pcb-rnd 2.1.3 (r26629)
~~~~~~~~~~~~~~~~~~~~~~
	[act_draw]
		-Fix: creating a new padstack proto should allocate the 0th transformed shape (every valid proto shall have that)
		-Move: GetValue() moved to the act_read plugin
		-Add: PstkProtoTmp() dup subcommand from an existing padstack, using idpath
		-Add: PstkProtoEdit() action

	[act_read]
		-Add: new plugin for data access actions (idpath lists, parent data)

	[cam]
		-Fix: restore layer visibility even if execution of the cam script failed
		-Fix: save/restore all layer group visibility while exporting to cam (it is not enough to save and restore layer vis)
		-Fix: save and restore current layer selection during the cam export process
		-Fix: JLCPCB cam config should include mech layers (proute & uroute) in the excellon drill file
		-Fix: cam export GUI: missing EXPFILL on the top right tab
		-Add: PCBWay gerber export job

	[conf]
		-Cleanup: core (in plugins and core) shall use anonymous structs to avoid namespace pollution
		-Move: pcb_conf_ro() from conf_core to conf.[ch] for hidlib apps
		-Change: mark editor.save_last_command as OBSOLETE
		-Add: mass conf_native_t resolver for use cases when conf_core dependency is not permitted (e.g. hidlib)
		-Add: config node for centralized file changed check interval

	[core]
		-Fix: pcb-printf used abs instead of fabs for double
		-Fix: do not uninit PCB before plugins are uninite'd - PCB = NULL means hidlib = NULL which is fatal for many calls
		-Fix: set pcb_gui to NULL before unloading all plugins to avoid dangling pointer pointing to plugin internals that are already unloaded
		-Fix: obj subc preview draw doesn't crash if there is no padstack in the subc
		-Fix: generate a library changed event if all libraries got refreshed/reloaded
		-Fix: do not use board attribute PCB::grid::unit if there's a design config available
		-Fix: off-by-one allocation bug in path resolver
		-Fix: pcb_get_value_unit() accepts leading whitespace
		-Fix: locale: set all LC_* and LANG env vars to C so subsequent setlocale() calls from Xlib or wherever won't mess with our "C" locale policy
		-Fix: search.c bug on selecting second silk layer objects - simplify the search logic by doing the silk searches outside of the copper loops
		-Fix: draw silk coloring for "far side" shall not depend on layer IDs but groups, because there may be multiple silk layers in each group
		-Fix: don't crash on rat move to buffer if anchor is NULL
		-Fix: move back pcb_poly_square_pin_factors() from lib_compat_help to core, to resolve an invalid core->plugin dependency
		-Fix: {c r} menu item undo sequence: make sure serial is increased at the end so the next undoable block is not merged with rat optimizing
		-Fix: add-rats-to-selected-pins: do not accidentally merge with the next undo block, increase serial
		-Fix: don't fopen() file name NULL
		-Fix: hide PCB for the time a board is imported into the paste buffer so the layer stackup is not messed up
		-Fix: removing the warn flag is board change because this flag is saved
		-Fix: find_geo: circle padstack shape vs. line: do not ignore Bloat, that breaks DRC
		-Fix: crash on crosshair draw attached padstack in loose subc mode: use ptr2 for the padstack pointer, ptr1 might be the parent subc
		-Fix: don't draw unplated hole indication on export (by setting up a dedicated omit-overlay bit in xform for default exporting)
		-Fix: replace footprint (shift-click place): adjust for source subcircuit origin offset
		-Fix: fopen_fn always initializes the return file name (to NULL, on all error branches)
		-Del: obsolete menu files (old lesstif and gtk variants)
		-Cleanup: pcb_layer_to_file_name() dest should be gds_t to avoid potential buffer overflow
		-Cleanup: remove hid_flag.[ch] - merge the function into a menu related hid_cfg.[ch]
		-Cleanup: remove PCB_MODE_NO - redundant with PCB_MODE_ARROW
		-Cleanup: remove excess mode change to the arrow tool between other tools
		-Cleanup: remove layer_inlines.h with the front/back silk layer getter - callers should use groups, not layers (because of the wrong assumption of only one layer per group)
		-Cleanup: code duplication in composite draw finish
		-Rename: pcb_poly_from_line/pcb_poly_from_arc to pcb_poly_from_pcb_line/pcb_poly_from_pcb_arc to make room for a non-pcb-object based variant that will be needed by other hidlib apps
		-Del: do not set attribute PCB::grid::unit on load - it was a geda/pcb compatibility hack; we are not to preserve units across alien formats anyway
		-Optimize: save a few malloc()'s by caching the allocations of x;y arrays for poly coord lists
		-Optimization: do not refresh the layer selector, rather inhibit group changes during board import to buffer
		-Move: old layer based top/bottom silk lookup to io_pcb, the only code that needs this for compatibility
		-Split: data <-> string conversion so that it can be generalized and reused (n data.[ch])
		-Split: complex pcb object to polygon converter from the abstract stroked object converters, for hidlib reuse
		-Split: poly dicer main call so that the low level variant has no pcb struct dependency (hidlib)
		-Add: safe_fs wrapping around opendir/readdir/closedir and unlink()
		-Add: safe_fs access for file mtime
		-Add: event on every input key press (the status line printout needs it)
		-Add: event on crosshair move
		-Add: poly contour vertex optimization for filled polygons and thin draw from the central draw helper
		-Add: plug_io API: optional save_as subdialog builder
		-Add: temporary any-ptr support on FGW_DATA for subc data
		-Add: pcb_idpath2obj() for self contained paths (original version renamed to pcb_idpath2obj_in())
		-Add: auto-inverting polyong contour-to-area helper for the cases when building the shape can result in CW and would be expensive to change on the caller side
		-Add: font selector: font file name patterns for the file selector dialog for different types of fonts
		-Add: functions for saving and restoring layer group visibility
		-Add: idpath to string converter
		-Add: menu anchor for feature plugins
		-Add: optional first argument for error level in the Message() action
		-Add: Redraw() action for redrawing the screen (invalidate_all), useful for scripts
		-Add: generic obj _pre() and _post() that works on any primitive

	[DAD]
		-Fix: unify the default meaning of dialog fail; 0 means success, any other value is just a different kind of failure by default (ret_override can override this, but it should obey the same principle because of wm-close or esc-close)
		-Fix: gtk implementation: picture shouldn't imply extfill
		-Fix: new spinbox: coord entry doesn't crash if initial value is NULL and up/down pressed
		-Fix: spinbox: if value changes for any reason, mark the attribute changed
		-Fix: spinbox: up/down button fix up missing unit
		-Fix: num_children() call should enter a new level for COMPOUND widgets
		-Fix: new coord spin box: do not crash on empty (use "", not NULL as default value)
		-Fix: coord spin box: enter on empty should print 0 before the unit
		-Fix: spinbox: strdup the initial empty value to avoid free() on read-only string
		-Fix: when setting unit value, besides setting the new value on the enum attr, also set it on the end attr because the caller will query from there
		-Del: HATT_PATH: no user - just use HATT_STRING
		-Change: use the new, composite spinbox for coords by default, provide a brave option to go back
		-Change: switch over to using the new DAD spinbox for REAL and INTEGER
		-Add: HATF for vertical and truncated text
		-Add: gtk support for vertical text and truncated text
		-Add: gtk: second state of text is background selection
		-Add: infra for delivering right clicks
		-Add: gtk implementation of right click callback on labels and pictures
		-Add: arrange a global DAD coord spin box widget update when grid unit changes
		-Add: coord spinbox: pick up original unit for the unit selector dialog
		-Add: attributes have an "empty" field which should indicate if the textual entry is empty
		-Add: support for set_help callback in compound widgets
		-Add: subdialog API: on_close() callback - called when the parent dialog box is being closed
		-Add: spinbox: pressing enter on a coord number without unit should append the currently selected unit
		-Del: brave setting for the new coord spinbox - always use it
		-Add: DAD-compound unit selector (replaces HATT_UNIT)
		-Add: coord spinbox: also place a space between the numeric and the newly appended unit when enter is pressed
		-Add: support for dialog box minimum size (mostly for the docked dialogs)
		-Add: spin box calls user provided enter_cb on enter and up/down button
		-Add: new HATF for indicating if a preview widget is showing the board (needs extra updates on board draw)
		-Add: extend the API for toggle buttons: PCB_HATF_TOGGLE and widget state is 3 level

	[ddraft]
		-Fix: have to convert coords to doubel for fabs() (can't use abs() because coord may be longer than long)
		-Add: toolbar icon

	[diag]
		-Add: integrity checks for subc origin, rotation and side

	[dialogs]
		-Fix: enable preferences dialog tabbed to grow
		-Fix: fontsel: update all open fontsel dialogs if board fonts change
		-Fix: export dialog hid attribute copy to DAD widget: need to use 'rich' copy because of compound widgets (there are less atomic widgets than hid attributes)
		-Fix: set reasonable default size for the fontsel dialog
		-Fix: parent subc bbox needs to be updated if any of it's padstacks change geometry
		-Fix: direct export does all the layer(grp) save/restore the cam exporter does too, so there is no visible change on the GUI after export
		-Fix: preferences: when saving library paths, the code uses low level lht calls so do extra steps to make the conf subtree dirty and board changed
		-Fix: preferences: indicate the source of newly created library path conf nodes properly
		-Fix: preferences: if no library path selected, insert before and insert after will use the first and last rows respectively
		-Fix: pinout: don't use crosshair coords, use getxy (for proper operation from menu invocation)
		-Fix: various chanegs to the layout of the padstack editor dialog to get it small enough for our 800x600 target
		-Fix: removing subc from library dialog preview shouldn't modify the undo list
		-Fix: when pinout() doesn't find a subcircuit, print an error message
		-Change: library parameter edit dialog for parametric footprints is non-modal
		-Add: InfoBarFileChanged() action for maintaining a info bar for file changed
		-Add: DAD based advanced search box
		-Add: save as: (hidden tabbed) subdialog for format specific settings when saving a board
		-Add: temporary workaround for DoWindows removal: NetlistDialog() chain-calls the old action for lesstif
		-Add: mark netlist dialog and view dialog previews with PCB_HATF_PRV_BOARD so they get proper screen updates on board redraws
		-Add: rewrite the library dialog from scratch, using DAD
		-Add: library window: timed refresh of the preview while the user is typing

	[doc]
		-Fix: lihata format doc typos
		-Fix: typo in compiosite rendering devel doc: RESET should not be called between composite sub layers
		-Fix: action reference appendix: sort in case insensitive way because the user looking for an action will not know if it's upper or lowercase
		-Cleanup: tutorial: rename 7805 to 17_sch, so it plugs in to the modular tutorial setup
		-Update: AdjustStyle() action doc for the new argument list
		-Update: Scroll() action's second argument changed meaning
		-Update: explain what the Command() action really does
		-Split: move historical aspects (regarding to the transition from the old setting system to the conf system) to history.html to keep main index smaller and more relevant for the new-comers
		-Add: install all tutorials that are in usable state plus allow cross-links
		-Add: action: Zoom() with no argument is zoom to extent
		-Add: SwapSides(): mention that v flip tries to keep location
		-Add: automatic [hidlib] tagging for conf nodes that are part of the hidlib
		-Add: hidlib: recommendation on pcb_hidlib_t vs. design struct
		-Add: hidlib: note on icon colors
		-Add: data model: document the subc aux layer
		-Add: developer: extend composite layer draw doc with hints on what starts or ends a composite layer rendering
		-Add: scripting installation howto: recommend to install libmawk because awk is the default language of the example scripts
		-Add: simple index for tutorials
		-Add: document Atomic() freeze and unfreeze and the usage sequence
		-Add: scripting: document the syntax of permanent user script
		-Add: mention live scripting in the scirpting section of the user manual

	[draw_csect]
		-Fix: uninitialized line object fields on simplified line drawing

	[export_excellon]
		-Split: excellon drill/cnc export from gerber to a separate plugin
		-Add: export otpion for coordinate formats, with support only for the original format
		-Add: excellon support for um and 10um metric resolutions

	[export_gerber]
		-Fix: buffer overrun on file suffix generation
		-Fix: drill gerbers: don't stop after printing apertures, print the flashes for drills
		-Cleanup: make coord format table static (namespace pollution)
		-Add: very loud error when using direct gerber exporting with deprecated name styles and implied excellon export

	[export_png]
		-Add: --as-shown enables unplated hole indication

	[export_ps]
		-Fix: drill herlper spinbox: set the max value so it is enabled
		-Fix: make sure there is only one, fully initialized page in cam mode
		-Cleanup: remove ps_fill_pcb_polygon(), rely on the core-processed polygon drawing mechanism
		-Add: eps --as-shown enables unplated hole inidication

	[export_svg]
		-Fix: never draw with stroke thinner than 0.01mm, that's invisible on the output
		-Fix: draw filled circle with stroke==0 for diameter accuracy
		-Add: new export flag --as-shown: enable rendering unplated hole indicator

	[export_xy]
		-Fix: macrofab seems to require negative rotation angle
		-Fix: properly separate prerot and rotated by-pad centroid calculation
		-Fix: use the naked bbox of copper pads for calculating subc pad bbox

	[extobj]
		-Add: basic infrastructure
		-Add: infra for registering, unregistering and looking up extended objects
		-Change: only subcircuits can be extended objects

	[find.c]
		-Fix: padstack connections: handle raw plated slot connection (with no copper shape around the plating)

	[fp_fs]
		-Fix: potential invalid memory read because of string not properly terminated
		-Del: unistd.h is not needed anymore

	[fp_wget]
		-Fix: safe mkdir temp dir buffer handling
		-Split: separate executing wget from the cache logic so it can be moved into a separate plugin in the next step

	[file selection dialog]
		-Fix: subdialog's hid_ctx must be set from the file selection dialog implementation in gtk and lesstif
		-Add: when enabled, guess file format from the file name and recalculate the file name; but initially don't change the detected file format
		-Add: make it explicit on the GUI when file format guess fails
		-Add: make save as format guess default value configurable

	[gl]
		-Fix: immediately apply (update internal cache) any change of the background color
		-Cleanup: remove PCB and some core header dependency from low level gl render
		-Del: pcb-poly draw - rely on the core poly converter so the HID API won't need to have polyarea
		-Del: excess update of the grid color on background color change
		-Del: Removed the use of GL_SCISSOR. The expected performance gain is less than 20% and fixing it would reduce this drastically.
		-Update: Don't restrict the drawing area to the expose region now that GL_SCISSOR isn't being used.

	[gsch2pcb-rnd]
		-Update: glue for the new hidlib API on menu and conf core home dir setting

	[gtk]
		-Fix: DAD: hide() works on boxes where there's no wltop only wl
		-Fix: DAD: click on label is delivered as change_cb
		-Fix: update mouse cursor shape if conf node editor/mode changes
		-Fix: if command entry is visible in non-full-screen then the user switches to full-screen, keep the command entry visible
		-Fix: zoom/pan: rounding errors
		-Fix: get_coords loop shall not save undo serial or change undo states in any way
		-Fix: frame/scroll box hide/show parent widget should be the outmost wrapper to make sure the whole widget tree disappears
		-Fix: more robust initialization sequence: emit the GUI_INIT event only if both the top window is already configured and the main loop entered (fixes a possible race condition)
		-Fix: do not call the Zoom() action in initialization because that would draw the crosshair before the first render which would confuse the composite draw code
		-Fix: get truncated text alignment correctly, after rotation, and don't overwrite it with center-align which should be applied to non-truncated text only
		-Fix: gdk rendering: grid color update should properly register the new color - fixes unwanted grid color change after 'new board'
		-Fix: respect DAD expfill on STRING input, PICBUTTON, TABLE, TABBED, combo box input fields, BUTTON
		-Fix: gdk rendering shouldn't crash with div by zero if grid is 0
		-Fix: set preview coord-per-pix so preview widget LoD optimization doesn't depend on main drawing area board zoom level
		-Fix: fsd race condition: when poke called with no file name set yet, do not crash but return empty string
		-Fix: respect default DAD window size even if placement is disabled
		-Fix: file selector history shift off-by-one buffer overrun bug
		-Fix: gdk rendering: don't require a pen for drawing a rectangle - fixes negative composite layer base fill assert on unitialized cap style
		-Fix: DAD compound widget hide: once the dedicated callback function handled the hide, do not try to hide wl[] or wltop[] (they are potentially NULL anyway)
		-Fix: don't limit preview size to 110*110 mm (fixes library preview for arts with large origins)
		-Cleanup: command line doesn't need to force-update the top window titlebar, it's done automatically via events
		-Cleanup: rename ghid_zoom_view_abs() to pcb_gtk_zoom_view_abs() for API naming conventions
		-Cleanup: set_layer_group shouldn't special case ASSY and  csect, the normal layer logic handles that properly
		-Cleanup: the HID does not need to force-select the arrow tool on startup
		-Del: gtk-only route style infra - switched over to the central, docked, DAD based system
		-Del: pcb_gtk_zoom_view_fit() for code simplification: the same effect can be achieved with using the window zoom code
		-Del: empty action SaveWindowGeometry
		-Del: in_popup state: nothing uses this state
		-Del: gtk-only spinboxes: special DAD code for INTEGER and REAL widgets: they are handled by the DAD spinbox code in core
		-Del: old, gtk-only HATT_UNIT implementation: use the DAD compound implementation instead
		-Del: DoWindows() action - all dialogs got moved to the dialogs plugin already
		-Change: use the CLIPBOARD selection for the clipboard API - this means the ctrl+c-ctrl+v clipboard on X, not the middle button selection clipboard. Rationale: there's really no selection involved, but explicit user action (clicks, buttons) on setting up clipboard data
		-Add: top window DAD subwindow docks
		-Add: support for toggle buttons
		-Add: publish the API pcb_gtk_zoom_view_abs() - the centralzied Zoom() action needs it
		-Add: gtk-side implementation of the new zoom/pan HID API
		-Add: implement the new mouse cursor API, remove the old (and remove bu_icons.*)
		-Add: DAD picture widget should react on clicks
		-Add: transient-for call to mark DAD dialogs relation to the top window
		-Add: collect all preview widgets in a linked list so all PCB_HATF_PRV_BOARDs can be updated onm board redraw

	[hid]
		-Fix: misleading API doc - calibrate() on a GUI HID should do nothing
		-Fix: whatever code sets hid BUSY, should unset it once it has finished its job
		-Fix: pcb_attribute_dialog_() passes on minimum x and y dimensions of the dialog box
		-Del: ->get_view_size() - use the more generic ->view_get() instead
		-Del: file save notify API: the HID doesn't need to know that (the local gtk implementation of file watch was using it last)
		-Del: API fill_pcb_polygon - use only the pcb-independent (hidlib) poly API
		-Move: menu checkbox function from core to lib_hid_common's new menu helper (part of the hidlib but not gsch2pcb-rnd or tests)
		-Move: menu code needed only by GUI HIDs from core to lib_hid_common
		-Add: API for top window docking
		-Add: call to expose the HID's menu config struct so plugins can read the menu
		-Add: API to expose HID key state
		-Add: extend the API with zoom/pan calls
		-Add: API for getting the current view box
		-Add: API for changing the mouse cursor
		-Add: do_export() delivers a context pointer (pcb_hidlib_t *) to cut dependency on PCB
		-Add: API for top widnow title set
		-Add: API: wrapper macro for entering the BUSY mode
		-Add: function based hid->busy() so the HIDs don't need to bind the event
		-Add: pcb_hid_busy() calls the HID's optional busy handler and emits the event only as a side effect
		-Add: extend the api so that minimum x and y size fo DAD dialgos are passed to real dialog boxes too, not only docked boxes

	[hid_gtk2_gl]
		-Fix: remove PCB (board) dependency, use hidlib only

	[lesstif]
		-Fix: set_hidlib(NULL) should change the window title to "unknown"
		-Fix: suspend and restore crosshair for the get location loop
		-Fix: wrong return value for the attr dlg set help text call
		-Fix: don't crash when removing non-existing table-tree cursor
		-Fix: paned view should always EXPFILL
		-Fix: allow paned widget to resize
		-Fix: wm-close crash on DAD dialogs - it's always the caller who free's ctx
		-Fix: hackish, but portable workaround in window placement for WM decoration (aka wandering window problem)
		-Fix: relative pan should not change the mouse cursor
		-Fix: set preview coord-per-pix so preview widget LoD optimization doesn't depend on main drawing area board zoom level
		-Fix: tabbed widget forces a redisplay on tab page change
		-Fix: FillBox: require (back-push) box minor size to accomodate largest widget
		-Fix: FillBox: make sure all children widgets are resized using Xt so their window geometry is in sync
		-Fix: publish no-close version of dialog box waiter function to avoid implicit declaration
		-Fix: respect default DAD window size even if placement is disabled
		-Fix: preview widget: do not bind sides to the form, just allow the parent to set fillbox growth bit
		-Fix: preview widget should also shrink, not just grow
		-Fix: memory handling bug in library window: writing 1 byte before the buffer on level 0
		-Cleanup: set_layer_group shouldn't special case ASSY, the normal layer logic handles that properly
		-Cleanup: remove stdarg.[ch] to ltf_stdarg.[ch] to avoid naming clash with libc's
		-Del: styles dialog - replaced by the DAD implementation (the old one was segfaulting for releases already)
		-Del: do not watch for grid unit change - not used
		-Del: zoom_toggle(); was Zoom(toggle) but it was not in use
		-Del: old attribute type code for REAL, INTEGER and COORD: handled by DAD now
		-Del: do not bind the BUSY event, depend on the explicit hid call
		-Change: disable the thumb-pan mode: most probably nobody used this in the past 10 years, it is not worth reimplementing it in other HIDs
		-Add: somewhat working popup context menu
		-Add: BOTTOM dock box, docked status bar subdialog
		-Add: redraw all PCB_HATF_PRV_BOARD previews as well on top window redraw
		-Add: lesstif-side implementtion of the new zoom/pan HID API
		-Add: replace old local top window title code with the central callback

	[hidlib]
		-Fix: HIDs shouldn't depend on the dialogs plugin
		-Fix: rounding errors made vertical flip jumpy in the new centralized SwapSides action
		-Fix: throw an error if hidlib essential conf resolvement fails (hidlib users need to provide a minimal set of config)
		-Fix: move grid related helper calls to hidlib, replace pcb_board_t with pcb_hidlib_t in those grid calls
		-Fix: gtk: don't call board changed for zooming to extend, rather call the zoom() action to decouple from core
		-Fix: batch HID doesn't depend on PCB
		-Fix: message log scrolls to bottom right after open (depending on the checkbox)
		-Cleanup: gtk zoom/pan code doesn't depend on PCB
		-Cleanup: gtk top window: do not depend on PCB's hidlib but use topwin->common->hidlib
		-Cleanup: gtk: don't depend on PCB for drawing scrollbar
		-Cleanup: gtk's coord conv inlines do not depend on PCB anymore
		-Cleanup: centralize the Zoom(), Pan(), Center(), Scroll(), SwapSides(), Command(), Popup() actions
		-Cleanup: centralize set_layer_group() and get the GUI HIDs just draw (gl not yet finished)
		-Cleanup: remove GUI_SYNC event - not needed anymore
		-Cleanup: lead_user shouldn't depend on draw.h (which is not part of the hidlib)
		-Cleanup: cut the default menu file tie between HID plugins and core and hidlib
		-Cleanup: remove pcb_event_move_crosshair() from the API, use only one hidlib call for moving the crosshair and pass a parameter about whether it's from the mouse
		-Cleanup: HID API passes on polyarea and a full flag instead of pcb_poly_t (cutting dependency to the PCB-specific poly API) - the HID draw helper will be pcb-rnd-only code
		-Cleanup: API CHANGE: direct call from poly draw code to hid_draw_helper's thin draw poly - obsoletes HID API's thin draw pcb poly call; remove the thindraw poly HID API: done from core
		-Cleanup: do not include hid_draw_helpers.h, it's core-only, remove illegal dependency between gl low level and draw helpers
		-Cleanup: move hid_draw_helpers to obj_poly_draw_helper as it's doing poly-specific things only and has nothing to do with the HID API
		-Cleanup: replace HID API's notify_filename_changed() with an event - the HID doesn't need to get this
		-Cleanup: unify toolbar icon colors to comply with the reduced color set
		-Cleanup: move the two expose (draw main and draw preview) calls into the hidlib, as these are essential API in the HID->core direction
		-Cleanup: menu file shouldn't use DoWindows, that action is going to be removed
		-Move: window placement code and config from dialogs to lib_hid_common
		-Move: default dialogs.conf from dialogs/ to lib_hid_common/ (for reusing placement)
		-Move: grid from pcb_board_t to pcb_hidlib_t - any display will need a grid
		-Move: pcb_board_t's MaxWidth and MaxHeight to hidlib size_x and size_y - this is really the drawing area extents
		-Move: board's Filename and Name to hidlib filename and name
		-Move: after-gui-uninit delayed print of log messages from main to hidlib (a generic app may need it)
		-Move: essential common GUI features, including the log window, the fallback color picker, the common dialog xpms, are moved from dialogs to lib_hid_common so other hidlib apps can benefit
		-Move: Info() action from batch to report plugin: HIDs should not have actions and the feature this action implement is not CLI-specific
		-Move: Help() action from batch to core: all UIs will need this action and HIDs shouldn't have their own actions anyway
		-Split: move PCB-related sections of lib_hid_common out to a new plugin lib_hid_pcbui so that hidlib won't have these (avoiding PCB-dependency)
		-Split: conf_core: generic settings are moved to hidlib's own conf that will be the same for other hidlib apps as well
		-Split: separate main() into reusable functions that will be part of the hidlib
		-Workaround: use the old library window in lesstif until the tree table widget and/or hbox/vbox sizing is fixed
		-Change: lib_hid_common is explicitly for GUI hids (metadata/description update)
		-Change: GUI HIDs don't depend on lib_hid_pcbui because they need to work with other applications as well - main.c force-loads that plugin when needed
		-Change: decouple gtk from conf_core and PCB
		-Change: grids.o is part of the hidlib: grid is part of the hildib and this file contains the low level utils
		-Add: decouple actions.c, conf_hid.c, hid_dad_spin.c, hid_init.c, hid_nogui.c, error.c, hid_cfg.c, paths.c from conf_core
		-Add: generalize conf_core_postproc call, do not include a direct call to conf_core's implementation in hidlib
		-Add: decouple grid menu code from conf_core
		-Add: optional set_hidlib() call in the HID API so HIDs don't need to rely on events
		-Add: replace PCB->hidlib refs with a local cache using set_hidlib()
		-Add: API CHANGE: pass (hidlibt *) as first argument to all events
		-Add: API CHANGE: (pcb_hidlib_t *) as first arg in: invalidate API, crosshair refresh API, set layer group API, tool API, safe_fs
		-Add: GUI xordraw overlay event shall have the GC as an argument so the plugin won't depend on draw.h
		-Add: hidlib->pcb glue layer with adjust attached obj; HIDs call adjust attached objects through the hidlib
		-Add: generalize the (static) marks and (moving) attached objects draw callback API
		-Add: rewrite the layer selector: dockable subdialog for a DAD based layer selector
		-Add: abstract menu file name format string and path list
		-Add: hid's view_get() should get a hidlib parameter so plugins won't need to depend on PCB
		-Add: publish host application name, version and url as variables so hidlib doesn't need to hardwire pcb-rnd's compile time

	[io_autotrax]
		-Fix: layer array write beyond bounds
		-Fix: wrong empty string comparison

	[io_kicad]
		-Fix: do not ignore pad local clearance
		-Fix: do not convert pad rotation degrees to integer
		-Fix: when rotating padstack, make sure the new transformed shape is calculated
		-Fix: CUCP#63: default hole size matching kicad source; default pad size matching kicad's hardwired; do not require pad size spec in the file
		-Fix: don't ignore module name on load - use it as footprint attribute in case there was no footprint text prividing the name
		-Fix: CUCP#52: interpret %V and %R in module fp_text
		-Fix: allow negative "mask clearance" and copper clearance values
		-Fix: zone_connect default is 1, not 0, as shown by the leftmost test case of CUCP#57
		-Fix: CUCP#51: thru-hole padstacks can use paste too
		-Fix: use the local mask geometry for padstacks, when available, instead of always using the global
		-Fix: missing else caused early error exit on complex pad subtrees
		-Fix: accept custom pad shape as rect
		-Fix: do not crash on multi-layer zones but throw error for unfinished feature
		-Add: parse module global clearance
		-Add: explicit warning for the case when pad clearance is a guesswork
		-Add: support for the target primitive
		-Add: parse module solder_mask_margin
		-Add: calculate pad mask using the module "mask clearance" setting as well
		-Add: parse per pad "mask margin"
		-Add: CUCP#55: support for paste_margin and module solder_paste_ratio
		-Add: parse zone_connect and create thermals on pads to sorrunding polygons
		-Add: custom pad heavy terminal: prepare for forced pad layers, iterate over all wanted layers to create the primitive on each
		-Add: gr_line and gr_arc respects forced layers (for custom pad primitive)
		-Add: support for gr_poly custom pad primitive (CUCP#48)

	[io_lihata]
		-Fix: register padstack prototype parent as subc->data when loaded for subc
		-Add: save_as subdialog options for boards to omit: font, conf, routing styles
		-Add: mark the config settings for omitting the font and config [dangerous] because it may ruin the portability of the resulting file

	[io_pcb]
		-Del: simplify the silk layer lookup code by removing the local cache - this piece of code will not run too often anyway
		-Add: io compatibility warning on multiple silk layers per group - gEDA/PCB does not support such "fancy" features

	[io_tedax]
		-Fix: return error if zero footprints could be loaded because that's an error in most contexts

	[jostle]
		-Fix: don't set and leave the HID in BUSY state
		-Del: unistd.h not needed

	[layer]
		-Cleanup: remove excess array allocation (+2) - it was still a leftover from the broken layer model of PCB with silk being special
		-Cleanup: use the layer id type for iterating over layers in visibility save/restore, don't assume int is wide enough
		-Add: conversion function that convertas lyc and lyt at once from a single string

	[lib_compat_help]
		-Fix: pcb-compatibility pstk loader: work around hole with clearance with zero size copper circle; only on non-plated holes, leave plated vias/pins alone

	[lib_hid_common]
		-Fix: grid menu installation bug (chicken-egg problem on a native conf lookup)
		-Fix: don't crash if there's no menu system to remove from
		-Add: load window placement from all central config, not only system and user

	[lib_hid_pcbui]
		-Add: create and sync top window route style subdialog
		-Add: toolbar: create the docked subwindow on gui init
		-Add: toolbar: create toolbar pic buttons using the "toolbar_static" menu subtree
		-Add: toolbar: create dynamic tools in the toolbar after init; re-create the toolbar if a new dynamic tool is registered that needs a toolbar icon
		-Add: create and sync top window status bar subdialog
		-Add: create and sync top window overhead readouts subdialog
		-Add: centralized code for file-change-on-disk detection (timer based)
		-Add: update top window title on change

	[lib_legacy_func]
		-Del: the whole plugin - old plugins won't compile with pcb-rnd anyway because of the large scale API changes

	[lib_wget]
		-Move: low level wget code from fp_wget to lib_wget

	[mincut]
		-Fix: don't crash when subc with NULL refdes is causing a short
		-Fix: when nonetlist is set, ignore the subc (don't use it as S or T)

	[propedit]
		-Fix: don't crash if the del button is pressed while no attribute is selected
		-Fix: propedit() with no argument should work on selection
		-Fix: do not overwrite the input field with the absolute value if the user is working with a relative value, so multiple increments/decrements are possible
		-Fix: execute obj pre/post on clear flag change to get the sorrunding polygon reclipped
		-Fix: don't crash if attribute is added without value; don't add the new property if key is empty
		-Add: expose the text/fid (font id) field
		-Add: propset() accepts idpath as scope for easy property changes from scripts
		-Add: propedit dialog: enter pressed on a value (bottom right) should have the same effect as 'apply'

	[pstk]
		-Fix: padstack conversion action should return error when the conversion failed
		-Fix: padstack convert typo: internal copper shape needs a hole or a slot, not a slot
		-Add: inline helper for accessing the mech shape ("slot") at a given layer

	[query]
		-Fix: publish qry_error() API and finalize the 2 argument setup
		-Fix: use the central macro for deciding if a padtsack is plated or not (fixes missing plated slots for @.plated)
		-Fix: when precompiling fields for an object field query, do not assume field names only, accept (and remember) strings that will need to be converted run-time (e.g. layer type names)
		-Fix: obj field query: don't crash if result is NULL string
		-Fix: query(eval) uses type long for boolean
		-Split: coord from integer type: integers should not be confused with coords because coord has a unit
		-Del: don't implement layer type/comb conversion locally, use the centralized call of core for this
		-Add: query(append, list, expr) to produce a script processable idpath list of objects
		-Add: QueryObj(): generic object field access
		-Add: support precompiled field names
		-Add: expose padstack's proto ID

	[rat]
		-Fix: anchor guess doesn't segfault if anchor oject is not found (got deleted meanwhile)

	[report]
		-Cleanup: simplify the code: use netlist2's lookup function instead of a local implementation

	[rtt]
		-Change: replace the old, fixed-name-style gerber+excellon with the new pcb-rnd-name-style gerber-only for the tests
		-Add: direct test of the excellon exporter

	[scconfig]
		-Fix: invalid regex for comment removal in gen_conf directive parser
		-Fix: generate export_vfs_fuse header only if the plugin is enabled
		-Del: GETTEXT domain from config.h: we don't do any NLS
		-Add: rewrite gen_conf.sh logics so it works upside down, from trailing struct variable names instead of struct type names; this allows the code using anonymous struct type names and avoid polluting the global namespace
		-Add: use the new scconfig generic help function to generate that section of the help and make help sections more clearly separated

	[script]
		-Fix: dialog box code: use the new DAD API for accessing results when loading a script
		-Fix: resolve ~ to home dir in script file name when loading a script (low level)
		-Add: fgw custom types for idpath and idpath_list
		-Add: guess language from file name in the GUI load dialog
		-Add: permanent user script load: load the scripts after parsing scripts.lht

	[subc]
		-Fix: flipping selected subcircuits shouldn't depend on silk visibility - it was an old leftover from the times when there was no subcircuit virtual layer and silk was associated with elements

	[tool]
		-Fix: initialize static tools before plugin init because plugins may also register tools from their init
		-Add: optional icon (XPM) to the tool struct
		-Add: copy tool icons from gtk to core - will be shared among all HIDs
		-Add: infra for defining a custom mouse cursor for a tool
		-Add: extend the tool struct with flags - add a flag for auto-toolbar placement
		-Add: event on registering a new tool: the toolbar may be already running when a plugin providing a new tool is loaded

	[undo]
		-Add: Atomic(): freeze and unfreeze for easier scripting

	[util]
		-Add: devhelper script for testing plugin dependency correctness



pcb-rnd 2.1.2 (r24805)
~~~~~~~~~~~~~~~~~~~~~~
	[act_draw]
		-Fix: TextNew() syntax: missing font ID
		-Add: do undo by default; optional first argument to suppress undo

	[autoroute]
		-Fix: reset last subnet state when hitting a terminal
		-Split: route data network mapping into a separate function from the overgrown main route data prepare function
		-Split: mapping code: "line add" to a separate, reusable function
		-Split: connection mapping: misc "object box add" into a separate, reusable function
		-Add: code for the new netlist API

	[cam]
		-Fix: virtual layers can be referenced by name
		-Fix: _begin() should reset the struct even if cam is disabled, to make sure all states the exporter may check on are 0
		-Fix: don't crash if plugin has no arguments
		-Add: file name templating
		-Add: accept comments
		-Add: cam() action accepts key=value options to set the base
		-Add: prefix mkdir can return the file name
		-Add: cam job configs for the old gerber exporter naming styles, where applicable
		-Add: cam job configs for a few commonly used fabs
		-Add: cam job configs for a few commonly used naming styles in other EDAs
		-Add: cam dialog box
		-Add: hidden cam exporter so that 'pcb-rnd -x cam jobname [pcb-rnd-options] filename' works
		-Add: menu item for cam exporting, bound to {f c}

	[core]
		-Fix: data dynflag clear shall be recursive so subc parts are cleared too
		-Fix: while drawing slots, make sure to use the same layer that was set
		-Fix: proper string handling in key quote for unrecognised key error
		-Fix: hid_nogui, reading the stdin, takes EOF as cancel
		-Fix: don't pop up an extra dialog for footprints-not-found in quiet mode
		-Fix: don't crash on file not found while importing a netlist
		-Fix: don't call hid ->log directly, uses pcb_message()
		-Fix: throw an error on file load error (e.g. non-existing file) if there is no GUI
		-Fix: do not draw broken bounding box of the xor drawn attached 'A' for text tool font placement
		-Fix: the error message for not doing something to a locked object, also include the type name of the object to ease debugging
		-Fix: allow the remove tool to operate on subc floaters even in non-loose-subc
		-Fix: verbose action logging should go to stderr, not stdout
		-Fix: plug_io calls GetStyles() directly, through C API to avoid action verbose prints
		-Fix: text flag post-change: if dyntext flag changes, recalculate the bounding box because the display text likely changed too
		-Fix: export() without arguments shouldn't crash but throw an error
		-Fix: allow removing warnings on the first click after board load
		-Fix: clear the warn cache flag only if we are clearing the WARN flag on all objects
		-Fix: pcb_menu_default.c is a generated file, make distclean should remove it
		-Fix: text rendering: invalid memory access on drawing the thin-drawn and xor-drawn version of the invalid/unspecified symbol
		-Cleanup: box.h shouldn't depend on move.h; box.h is the lower level construct
		-Cleanup: merge copy.[ch] into move.[ch] for compactness
		-Cleanup: completly remove NLS _("")
		-Rename: project file root prefix is not "geda-" but "coraleda-" because there's zero chance geda would ever use this project file format
		-Rename: PCB_MOVE to PCB_MOVE_POINT - name too generic; move PCB_MOVE_POINT from move.h to box.h - all box and point helper macros are there
		-Move: ClipInhibit() action from experimental features to core; add menu checkbox
		-Change: exporting an empty board is useful in some situation - it should be only a warning, not an error
		-Change: allow '*' in IDs, for kicad compatibility
		-Split: route_draw.h from route.h to avoid unwanted hid.h dependency
		-Add: render terminal IDs using a configurable template
		-Add: safe_fs wrapper for pcb_mkdir, file size query, pcb_is_dir()
		-Add: quoted string print variant that doesn't print the wrapping quotes but leaves that to the caller
		-Add: include lihata node location (file:line) in keydesc parse error messages
		-Add: LoadFrom() has a better function name for loading a footprint to buffer, deprecating the Element based name
		-Add: throw error message on unknown first arg in LoadFrom
		-Add: extend pcb_drc_lines() so that it can stop on the first blocker and return the mid-point coords
		-Add: optional as-drawn-annotation of polygons
		-Add: function to fix up IDs (subc refdes, terminal ID) by replacing invalid chars with underscore

	[hidlib]
		-Cleanup: move layer visibility related calls from hid_flags to layer_vis (for hidlib clean)
		-Split: hidlib: the common parts from main init and uninit sequence moved to hid_init - to be reused in a hidlib initialization
		-Split: file_loaded from build_run, for hidlib
		-Change: funchash should be in hidlib (generic keyword hash)
		-Add: split OBJS and OBJS_C99 in preparation for a hidlib

	[dad]
		-Fix: split _DEFAULT and use the _NUM and _PTR default setter to avoid int<->ptr casts
		-Fix: runtime hide/unhide should deal with wltop[] in both lesstif and gtk, to affect the possible framing/scrolling as well
		-Fix: autorun shall set table hid_ctx so that callback functions can access it
		-Fix: retovr invalid memory handling: can not be part of the context because the context may be free'd by the caller too soon
		-Fix: AUTORUN shall allocate retovrt and lock the dialog against new widgets
		-Fix: don't deref ret-override struct fields if it's already NULL
		-Fix: make flags an explicit field of the attribute struct - abusing max_val makes it impossible to use with numeric values
		-Fix: trace mod key states even if the command prompt is open
		-Add: infra for compound widgets
		-Add: spinbox: compound widget for a DAD based universal spinbox
		-Add: HATF for tightly packed boxes (used in spinbox buttons)
		-Add: PCB_HATF_HIDE for initial widget hide
		-Add: dynamic settable help text (tooltip) so that spinbox can set the error message for the warning widget
		-Change: the export dialog doesn't depend on PCB_HATF_LABEL, but creates labels locally
		-Change: the flagedit dialog doesn't depend on PCB_HATF_LABEL but creates labels locally
		-Del: PCB_HATF_LABEL - no implicit labels anymore

	[dialogs]
		-Fix: printcalibrate: don't crash if there's no printer but print error and return
		-Fix: prompt-for 'enter key' handler: need a pointer to the pointer of return override, as it will be filled in by DLG_RUN() after widget creation
		-Fix: the prompt-for action accepts NULL default string (uses "")
		-Fix: remember all export attr widget ID, not only the first one per exporter, because it is not trivial (and rather fragile) to calculate further IDs
		-Fix: layer bindings dialog: expfill on the table
		-Fix: padstack dialog, generator tab: do not derive shapes if the initial shape generation failed
		-Add: export dialog: if an exporter has more than 12 settings, rather add a scroll to the vbox so the dialog box won't grow too large
		-Cleanup: move printer calibration out from core to the dialogs plugin - it's gui-only
		-Split: compile dlg_about, dlg_comm_m, dlg_export, dlg_flag_edit, dlg_fontsel, dlg_layer_binding, dlg_layer_flags, dlg_lib_pstk, dlg_padstack as separate objects for speed

	[doc]
		-Fix: typo: <b> not closed in action ref
		-Del: remove AdjustSizes() doc (action is getting removed)
		-Update: datasheet: format support update, move gEDA down in the priorities
		-Change: restructure the 7805 tutorial to be the generic work-from-schematics-editor tutorial, removing gschem references
		-Add: tutorial: no-sch for beginners
		-Add: tutorial: 15/step5 id for direct ref
		-Add: tutorial: 16 (working from a tEDAx netlist)
		-Add: datasheet: mention edakrill direct footprint access
		-Add: explain dad _DEFAULT_VAL() and _DEFAULT_PTR()
		-Add: action doc: Netlist, LiveScript, ClaimNet, OpenemsExcitation
		-Add: document the cam syntax extension for multiple layers
		-Add: cam examples on virtual layers (for exporting drills)
		-Add: cam doc: document file name templating
		-Add: script install genht 1.0.1 is too old for this
		-Add: auto-generated table of all dialog boxes for the appendix

	[drc]
		-Fix: missing cast caused overflow on circle shape hole ring break check, missing legit broken rings

	[export_dxf]
		-Fix: do export internal copper layers when explicitly requested by cam

	[export_gerber]
		-Fix: do not export DOC layers in non-cam mode, the old name-style code gets confused
		-Add: coordinate format enum, support for higher precision output
		-Add: in cam mode, allow exporting route/drill files in gerber

	[export_ipcd356]
		-Fix: typo: invalid memory clear for heavy terminals
		-Fix: test feature struct reset should overwrite the whole struct (sizeof() dereference bug)

	[export_ps]
		-Fix: don't crash in calibration if there's no lpr specified

	[export_xy]
		-Fix: pre-rotation pad width calculation (e.g. for the Macrofab template) works for non-90 deg rotation too

	[extedit]
		-Fix: avoid double-remove of watches, some HIDs (e.g. lesstif) won't tolerate that
		-Add: extedit(selected) and extedit(buffer)

	[find]
		-Fix: don't clear mark on incremental search - we don't need to revisit objects already visited
		-Fix: pcb_check_and_open_file() shouldn't use stat directly, but the compat_fs call for checking if a file is readable
		-Cleanup: move pcb_check_and_open_file() from core to export_oldconn, that's the only user
		-Add: incremental search from object
		-Add: macro to check if an object is already marked by a find context

	[font]
		-Fix: get rid of global fontsel object, make the code and API reentrant
		-Fix: remember fontedit target object by id, not by object pointer so the dialog won't crash if the object is gone
		-Fix: object font dialogs: on replacing the board, close all text object font edit dialogs - the are sure invalid for the new board
		-Add: make object fontsel dialogs non-modal, keep them on a double linked list, don't let two dialogs open for the same text object

	[fp_fs]
		-Fix: uninitialized libshell

	[fsd] (the new file selection dialog API)
		-Del: old, per-HID save() and load() actions and associated custom file selection code
		-Del: old filechooser and orphaned fileio action file from gtk
		-Cleanup: move file selector flags from macros to an enum
		-Cleanup: name prefix flags
		-Cleanup: centralize ImportGUI(), remove the per HID implementation and related orphaned dialog box code
		-Add: gtk: new fileselect implementation with subdialog support
		-Add: lesstif: new fileselect implementation with subdialog support


	[gerber]
		-Fix: make sure to open a new file if cam file name template changed file
		-Fix: premature uninit of cam caused unwanted drill file export when using the cam syntax
		-Fix: verbose output should go to stderr, not stdout
		-Split: move out and generalize the aperture code from the gerber exporter into separate source files
		-Split: excellon exporting from gerber exporting; excellon can be called separately now
		-Change: allow cam to export assembly layers
		-Add: excellon: per plated/unplated file name option, overridden by the CAM file name when present
		-Add: gerber verbose mode is also turned on by conf rc/verbose
		-Add: make the new default the pcb-rnd name style

	[gtk]
		-Fix: tooltip code with the new netlist won't crash if there's no refdes or terminal ID
		-Fix: old library dialog refresh: make not a dir messages more explicit
		-Fix: don't call hid ->log directly, use pcb_message()
		-Fix: terminal tooltip shouldn't attempt to resolve netname if refdes or terminal ID is missing
		-Fix: gdk special color set should never trigger a conf change, that'd result in an infinite loop
		-Fix: old gtk-only DAD spinbox: save wltop[] properly
		-Fix: DAD set on string values should save the new value with strdup
		-Fix: don't unregister menus if the GUI is not active
		-Fix: typo in the gdk render poly vertex optimization made offset polygons grow tentacles sometimes
		-Fix: slipping tap bug
		-Fix: window placement: have to query the window's geometry from the configure event, the data the event delivers does not include decoration (the "wandering window bug")
		-Fix: use explicit label widgets for the parametric footprint parameter dialog - implicit names are not supported anymore
		-Fix: param lib dialog: do not free non-allocated const char * string field name
		-Del: ghid_scrolled_vbox(), ghid_scrolled_selection(), bu_check_button, ghid_table_coord_entry(), ghid_table_spin_button(), pcb_gtk_g_strdup(), util_str.[ch], util_gtk_debug.h, ghid_framed_vbox_end(), coord entry builder, text_view builder - no user
		-Del: obsolete action: LogShowOnAppend()
		-Cleanup: excess memory allocations and string copies on building top window titlebar
		-Cleanup: remove unnecessary includes from the preview widget
		-Add: DAD text scroll-to-bottom implementation
		-Add: call the renderer's special color set callback upon conf change that affects those colors (this used to be a hackish direct call from the gtk-only config code)

	[hid]
		-Fix: fallback no-gui hid: always print the "progress bar" if GUI is not the no-gui hid; in this state we are printing the progress bar for another HID
		-Fix: do not draw the progress bar before GUI_INIT (fall back on the no-gui progress inidication) with HIDs that don't support opening DAD dialog before the GUI_INIT event (lesstif)
		-Fix: always strdup HID string/path arguments parsed because the caller may free them
		-Fix: don't crash when default hid argument string value is NULL
		-Del: the old ->log() API, only ->logv() is in use now
		-Cleanup: centralize the benchmark action to simplify the HID API
		-Add: centralize user-lead code, replace the circles with an alternating arrow
		-Add: DAD text scroll-to-end hid callback
		-Add: hid property bit to indicate if markup in DAD text is possible
		-Add: attribute dialog: raise window call
		-Add: infra for hiding non-conventional export plugins from the export dialog, e.g. export_test and loghid and vfs later

	[import_edif]
		-Fix: binary char leaked in to source code

	[import_netlist]
		-Fix: uninitialized rat commands

	[import_sch]
		-Cleanup: remove direct netlist dependency - rather use actions

	[io_eagle]
		-Cleanup: resolve subc rotation TODO (precise vs. lossless)
		-Add: poly clip inhibit during load to speed up

	[io_kicad]
		-Cleanup: remove unused vars, remove, debug printfs
		-Cleanup: code compaction on excess {}, compact var declaration
		-Fix: text rotation: keep floating point rotation, use 'direction' only for centering and mirroring
		-Cleanup: remove code dup in gr_text coord/rotation conversion with macros
		-Cleanup: simplify text size X and size Y conversion
		-Add: throw a warning if text size X and Y don't match, use the average
		-Cleanup: simplify text thickness conversion and add a TODO for justification
		-Cleanup: simplify the calculation for text rotation/mirror
		-Fix: centralize GLYPH_WIDTH config and turn it into a macro
		-Clenaup: remove gr_text/fp_text code duplication
		-Add: create subc text on the right layer with subc offset and rotation applied
		-Add: support for fp_text hide
		-Add: warn for unknown effect argument
		-Add: support for text thickness
		-Add: create mech layer group for adhes layers and doc groups for courtyard and fab
		-Cleanup: remove code dup: generalize gr_line parser to also handle fp_line and segment
		-Fix: properly round coords after conversion
		-Cleanup: rewrite gr_arc with the low level field parse macros
		-Cleanup: remove code dup: gr_arc handles fp_arc as well
		-Cleanup: via parsing: use the low level field parser macros, remove code duplications
		-Cleanup: do not special case silk or top/bottom copper layer creation, layer stack parsing should handle it
		-Fix: better error handling in the module code
		-Add: preserve kicad module attributes as kicad_attr_* subc attribute
		-Cleanup: reduce module parse code length by splitting fp_text out to a function
		-Cleanup: split pad parser out from module parser, into a separate function, because it is large
		-Cleanup: pad parse: simplify pad layer logics
		-Fix: don't silently ignore unhandled pad child node, throw an error
		-Fix: fp_line and fp_arc parsing error means module parsing error
		-Cleanup: always use the layer id type, not int, for storing layer IDs
		-Cleanup: compact the zone code, get more warnings and errors
		-Add: ignore zone filled=yes and priority value
		-Cleanup: all kicad_error() and kicad_warning() point to the right node
		-Cleanup: use the COORD conversion macros for polygon vertex x;y instead of code duplication
		-Cleanup: remove excess/redundant (node->str == NULL) checks
		-Cleanup: centralize "ignore value but throw an error if it is NULL", optionally with also warning for duplicate arguments (remove code duplication)
		-Cleanup: centralize layer parser to reduce code duplication
		-Cleanup: remove CamelCase from read.c
		-Fix: do not round module rotation, use a double
		-Add: parse general/area for a mid-prio fallback to missing page size; use the central page size table
		-Add: text object creation needs to get parent ("module") rotation because refdes text has this also embedded in the text rotation and that needs to be compensated to avoid double rotation
		-Add: read pad_to_mask_clearance from the setup subtree using a table based loader
		-Add: apply setup/pad_to_mask_clearance on smd and thr pads
		-Add: create netlist on load; parse net of pads, add pads to the netlist
		-Fix: don't create subc with invalid refdes, fix up the name with underscores
		-Fix: filter pin names (terminal IDs), fix them up with underscore until they are valid
		-Add: support for pad paste_ratio
		-Fix: make unknown module parameter a fatal error
		-Del: unused/dead code for via name: you don't name vias in pcb-rnd
		-Add: layer parse shall count signal layers first - we can not depend on layer names in some old layers and KiCad's file format is just too broken to solve this without some guessing
		-Add: accept "power" and "mixed" layers as copper layers, and use a better terminology for variables (copper instead of signal); remember layer type as layer attribute
		-Add: parse the layer stackup by considering, IDs, names _and_ file version, trying to figure old board files; handle random foreign layer names and reverse order stack
		-Add: force-reorder copper layers by layer number (used as emulated array index) to make sure internal layers are ordered properly, independently of what order they appear in the file - also consider KiCad's layer order switch after version 3
		-Cleanup: replace the old, hardwired C code based layer guesser with a data driven, generic, scoring algorithm
		-Fix: don't warn for missing font: kicad doesn't embed font in the board file
		-Add: parse multiple string children of text justify node, remember the alignment
		-Add: consider left/right/center alignment in text placement
		-Fix: caculate and use real text bounding box for fine placement/alignment/justify, instead of guessing from string length
		-Fix: do not create hidden text objects (CUCP#42)
		-Add: segment status: load 0x40000 as PCB_FLAG_LOCK (CUCP#40)
		-Add: parse "layers" and "blind" for vias, throw error on contradiction or if layers don't resolve
		-Add: support for loading and creating blind/buried vias (CUCP#41)
		-Add: parse and apply "layers" subtree of pads
		-Fix: do not ignore pad rotation; apply it considering subc rotation
		-Add: allow loading any file format version from 2017
		-Fix: convert file version as long, not int - values like 20170000 are just too large, we must have at least 31 bits
		-Add: support for round rect pads
		-Add: parse pad options and mask/paste margins
		-Fix: when loading a module as pcb, call the module parser
		-Add: when loading footprint as pcb, create all layers the parser will need in advance
		-Fix: throw an error if padstack ends up with no shape on any layer
		-Add: parse fp_poly fields and create fp polygons
		-Add: support for np_thru_hole pads
		-Add: parse and create oval holes as slots
		-Add: auto-create a mech layer for plated slots so they show up properly
		-Add: ignore drill offset with a warning
		-Add: handle empty (layers) in smd: assume *.Cu and throw a warning
		-Add: ignore the autoplace* subtrees in modules
		-Fix: some old files are defining thru-hole pads without drill geometry - improvise 0.5 mm for now

	[io_lihata]
		-Fix: netlist patch typo mixed up "del" and "add" on load
		-Fix: read: tolerate tailing whitespace in integer values
		-Fix: do not crash when reading polygons with no contour
		-Fix: free broken poly when reporting parse error

	[io_pcb]
		-Fix: uninitialized fcmd
		-Cleanup: move pcb_tmp_data_save() from core to io_pcb, the only user

	[layer]
		-Fix: don't crash if virtual layer purpose comparison is requested but the virtual layer has no purpose string

	[lesstif]
		-Fix: tree table binding: append new tree node at the right level when it has an existing sibling
		-Fix: mem. err: dont manually unmanage a managed widget
		-Fix: DAD close memory bug: do not wait for the dialog's widget if it is already destroyed
		-Fix: tree table: various memory handling errors
		-Fix: DAD result copy-back: always set default_val and make only the part that copes to results[] optional
		-Fix: DAD text widget respects EXPFILL
		-Fix: DAD: read/copy back the result even if there is no callback function registered for a widget - the readout may be async
		-Fix: pack boxes as tight as possible
		-Fix: DAD set on string values should save the new value with strdup
		-Fix: do not load the background image if it is an empty string
		-Fix: typo in hex digit converter of xpm
		-Fix: call GetStyles() directly through C API to avoid verbose trace
		-Cleanup: publish wait-for-dialog API and remove code duplication on it
		-Cleanup: move box helper to dlg_attr_box
		-Change: centralize the window geometry query code for window placement and make it query the real window size, don't rely on the config event data
		-Del: AdjustSizes() - use the preferences dialog instead
		-Add: integrate the new FillBox widget and replace the old RowColumn (no exp/fill support yet)
		-Add: replace the non-portable motif tabbed widget with a local pages widget implementation
		-Add: subbox DAD
		-Add: new fileselect implementation
		-Add: tree table: finish DAD binding
		-Add: DAD text: scroll-to-bottom implementation
		-Add: DAD text: respect the SCROLL flag
		-Add: menu system: process and create popups/ - even tho there is no code to open popup menus at the moment, the key bindings are required

	[lib_compat_help]
		-Fix: handle rotated square old pads properly: do the 90 deg rotation or throw an error on non-90-deg
		-Add: paper size def for USLetter, required by kicad

	[lib_polyhelp]
		-Fix: rewrite polyhatch(interactive) with DAD to fix the missing input labels problem

	[log]
		-Fix: print pending log messages after a failed export with -x
		-Cleanup: simplify the error.h API: file-system specific error messages have a central template and are macros instead of functions (wrappers around pcb_message())
		-Add: remember all log lines for a persistent log system, free all on exit
		-Add: log append event so that the GUI can react
		-Add: LogDialog() action, new log dialog code (using DAD)
		-Add: conf node: rc/dup_log_to_stderr to allow reproducing error messages to stderr (console support)
		-Add: Log() action with Clear command
		-Add: the batch HID doesn't print debug messages unless verbose is set

	[mincut]
		-Del: stub API - switched to the event API
		-Del: obsolete "ignore" argument
		-Cleanup: remove global variables, use local contexts

	[netlist]
		-Change: full netlist engine rewrite from scratch
		-Fix: do not assume the first terminal we are searching from actually exists - missing first terminal left the find state uninitialized
		-Change: don't use intrusive popup for indicating footprint not found, just write an error in the log, that normally should pop up the log window and works better on CLI too
		-Add: look up offender net on short circuit
		-Add: short deduplication using a hash table
		-Add: short indication event so that the netlist code does not need to depend on the mincut stub
		-Add: rat draw: accept the situation that neither terminal is in a net - that's when a new net is created
		-Add: use the user provided net name when creating a new net - create a netlist patch entry
		-Add: case insensitive net search by name, standardize how user input is looked up
		-Add: ClaimNet() for mapping existing objecrts as network
		-Add: Netlist() rename and merge (action and GUI)

	[pcblib]
		-Add: openscad models for the standard smd between 01005 and 1206

	[propedit]
		-Fix: memory handling error: set property only if address prefix matches
		-Fix: flag and attribute sets are not recursive in subc
		-Fix: propedit(object) should pick subc part padstack before subc
		-Add: expose layer group type bits by name (read-only)

	[ps]
		-Split: move out paper sizes to common code to lib_compat_help (io_kicad needs it too)

	[puller]
		-Fix: make dependency on glib explicit

	[rat]
		-Add: prepare the API for rat lines to remember their anchor objects
		-Add: implementation of pcb_rat_anchor_guess()

	[report]
		-Add: netlength warns for incomplete/shorted nets
		-Add: warn for polygons/text objects in net length

	[res]
		-Del: "Edit name of" menu - redundant; hotkey submenus for {e t} text edit and {e r} refdes edit moved to text and subc context menu; the rest are accessible more easily from the property editor
		-Add: menu item for invert selection

	[rubberband]
		-Move: move and rewrite the remove-rats-upon-object-removal from the rubber band code to core - it has nothing to do with rubber banding
		-Cleanup: remove the old attempt for rubber band manipulation after refdes rename - there are too many corner cases, rather just erase all rats and let the user re-optimize them

	[scconfig]
		-Fix: disable the script plugin if there's no system installed fungw found
		-Fix: when enabling dialogs, draw_csect and draw_fontsel need to be enabled too
		-Fix: do not -I or -l glib for core, even if glib is found on the system, as core does not depend on it in any way
		-Fix: make distclean removes gmon.out which may be created during the -pg test

	[script]
		-Fix: browse scripts dialog missing EXPFILL for proper layout
		-Add: dialog live scripting
		-Add: live script: list all fungw scripting plugins available
		-Add: scripting anchor in the default menu file; live script dialog menu

	[shape]
		-Fix: initial round rect rounding radius should be 1/10th of the width to result in a valid round rect shape that can be generated
		-Fix: generate the new shape on tab change

	[subc]
		-Fix: missing cast for subc rotation (may have caused truncation)
		-Cleanup: const correctness on parent obj lookup
		-Add: editor/subc_conv_refdes conf node special value "<?>" means "do not create the refdes attrib, but create the refdes text", which will result in the <?> printout with DYNTEXT

	[tests]
		-Add: test cases for the new rat geo code (with shortest path on any object vs. any object)
		-Add: netlist geo test case for polygon hole
		-Add: run the drc_pstk_hbrk tests by default

	[tests/RTT]
		-Fix: do not run on Proto or default (save some CPU cycles on uninteresting input)
		-Update: rat.svg ref (it is exported despite of being empty)
		-Update: rat.bom ref missing TEST author
		-Update: layer_spc.bom missing TEST author (empty boards are exported now)
		-Update: stderr filter for the new, more accurate warning/error messages on empty export and friends
		-Update: eps refs for 'empty board exported'
		-Update: ps refs for 'empty board is exported'
		-Update: XY refs for 'empty board is exported'
		-Update: gerber refs for 'empty board is exported'
		-Update: svg refs for 'empty board is exported'
		-Update: png refs for 'empty board is exported'
		-Add: more SVG warning filter (for elliptical arc)
		-Add: make sure gerber is generated with the fixed name style (explicit)

	[tool]
		-Fix: box selection should be triggered only if there is a valid box (box is in the second state); fixes: random right click selections

	[util]
		-Update: gsch2pcb-rnd to the new error API
		-Add: script to list all dialog boxes

	[vfs]
		-Add: plugin for exporting/exposing a board as a filesystem via FUSE or Midnight Commander vfs

pcb-rnd 2.1.1 (r23079)
~~~~~~~~~~~~~~~~~~~~~~
	[portability]
		-Change: #warnings translated to TODO() for portability

	[boardflip]
		-Del: remove the plugin - mirror functionality already implemented in core, wrapper action moved to core

	[calay]
		-Add: plugin for importing calay netlists
		-Add: import menu item for calay netlist

	[cam]
		-Cleanup: remove excess memory allocation on default output file name derivation
		-Cleanup: default file name derivation does not need to remember the last set file name, this should be handled centrally later on
		-Fix: missing else blocked purpose supplement to be interpreted

	[color]
		-Add: centralize color parsing and handling

	[core]
		-Fix: draw: expose_begin() and expose_end() needs to save all gc's as well else nested calls will result in NULL gcs after the first end()
		-Fix: do not block-select invisible padstacks - a padstack is considered visible only if either the padstack virtual layer or the hole virtual layer is on
		-Fix: mem handling error: do not free the memory passed to object change name, it would result in invalid name saved with the object
		-Fix: freeze undo for mirroring subc data and buffer data as they should not be on undo list on per object basis
		-Fix: arc hash and eq start angles for side-mirror
		-Fix: properly combine transformation rotation angle and transformation side mirror for arc start angle hash and eq
		-Fix: box selection should be triggered only if there is a valid box (box is in the second state); fixes: random right click selections
		-Del: old CreateMenu() syntax with 6+ arguments
		-Del: do not use hid->show_item, call the pinout() action from Display(pinout)
		-Cleanup: remove alignment_distance conf node - nothing uses it
		-Add: Select(invert) - invert selection (common function in vector graphic tools)
		-Add: --dump-version and DumpVersion() - script parsable version query
		-Add: idpath API to remember object IDs recursively through subcircuits
		-Add: optional, caller specified transformations in expose-all
		-Add: API for drawing layers with color fade
		-Add: pcb-printf %mN takes the unit set by %m+ and uses it without any modification or override
		-Add: config node to change layer group rendering: any other-group layers are rendered with the invisible objects color
		-Add: config node and rendering mod for black_current_group option (high contrast rendering)
		-Add: text: hash and eq rot degree, font ID and thickness

	[dad]
		-Change: DAD dialogs need to use explicit close buttons - implicit per hid buttons are all removed
		-Add: new widgets: picture, picture button, color picker, text edit
		-Add: API: default/starting window size hint (optional)

	[dialogs]
		-Fix: the new export dialog copies back the current attribute values from the dialog to exporter data after the dialog is closed - preserves users settings, but also fixes the memory handling error after export file name modification
		-Fix: export dialog and flag dialog content can grow and fill available screen space
		-Fix: PromptFor(): escape or WM close won't return the new string but an error so cancel is not confused with ok
		-Change: new layer property dialog and layer group property dialog with DAD and add close buttons
		-Move: plugins dialog from core to the dialogs plugin
		-Add: PrintGUI - generalize the export dialog so it can list printers
		-Add: GUI support for shape swap in the padstack editor dialog
		-Add: padstack proto edit dialog inidicates with parenthesis and tooltip text if a layer is not available
		-Add: padstack editor: button for duplicating the prototype (to detach)
		-Add: dup proto button in pstk lib dialog
		-Add: local config for window placement
		-Add: default window size for layer binding dialogs
		-Add: pressing enter on the PromptFor() entry closes the dialog
		-Add: fallback color pick implementation
		-Add: generic viewlist
		-Add: new, HID-agnostic pinout dialog with extra pin ID features
		-Add: preferences dialog: config tree view tab
		-Add: preferences dialog: color tab content

	[doc]
		-Del: all references to GPMI
		-Del: gtk3: preferences dialog - not gtk-specific anymore
		-Fix: plugin dev: conf inclusion needs one more tmpasm line
		-Change: rewrite the action doc for Print() - we can now have multiple printer plugins
		-Add: motivation: log slots and mech/doc layers
		-Add: link the conf system from the doc index

	[drc]
		-Cleanup: don't use global var to pass object to append in violation
		-Del: remove the old, gtk-only drc dialog
		-Split: old DRC algo: monolithic logics into shorter functions
		-Add: new, view list based DRC dialog
		-Add: extend the poly plow callback with a void * user data so that callbacks can have a context
		-Add: remember 2 groups of offending objects per drc violation (red and blue groups)
		-Add: introduce generic drc API/infra, decouple the old DRC algo from the GUI
		-Add: DRC check: object-beyond-drawing-area
		-Add: progress bar while running the old DRC algo

	[export_png]
		-Add: set DPI on bitmap export

	[export_ps]
		-Del: ps_bloat - use CAM layer transformations instead
		-Fix: don't print implicit outline layer on all layers unless it is explicitly requested by the user
		-Fix: wrong help text for drill helper
		-Add: --drill-helper-size to force a specific diameter for all drilled hole when--drill-helper is set

	[export_stat]
		-Fix: board size and area are calculated from the data width/height, not the drawing area's, when there's an explicit outline
		-Fix: don't export empty board id as (null) but as empty string

	[export_xy]
		-Fix: use %mN to make sure decimil and centimil are not converted
		-Add: rewrite the pnp-origin find code so that it works with any object type

	[extedit]
		-Fix: allow editing the external editor command
		-Fix: use pclose() for popen()

	[find]
		-Fix: netlist find/select should work by net name
		-Fix: use the event system to run the drc, don't use direct function call as the drc is implemented in (potentially multiple) plugin(s)
		-Cleanup: simplify internal DRCFind() API: no need to pass legacy type/ptr1/ptr2/ptr3
		-Change: rewrite the search algorithm and APIs
		-Move: split/move export code for the old connection format from core into a new plugin: export_oldconn
		-Add: use dynamically allocated flags for internal marking (instead of abusing global/static flags)

	[flag]
		-Add: dynamic object flags for algoritmic uses

	[fp_fs]
		-Fix: invalid memory handling (read beyond end of the string) on search path append

	[fungw]
		-Fix: simplified action call wrapper returns -1 if result can not be converted to int
		-Add: action name but binary args call shortcut

	[gpmi]
		-Del: please use fungw instead

	[gsch2pcb-rnd]
		-Fix: potential buffer overrun

	[gtk]
		-Fix: print coords for parametric footprints only in sane units
		-Del: get rid of the EditLayerGroups action (centralized)
		-Del: get rid of wt preview kinds - there is only one kind, the generic one
		-Del: get rid of local vertical and horizontal compactness config node, use the new, central node: appearance/compact
		-Del: old, gtk-only preferences dialog
		-Cleanup: netlist dialog: code dup on select/find button - rather use the action
		-Update: DoWindow(preferences) throws a warning instead of invoking the old preferences
		-Change: switch over from old, gtk-only window placement code to new, centralized code from the dialogs plugin
		-Change: the old library dialog uses generic preview instead of pinout-specific preview
		-Add: implement the clipboard API

	[hid]
		-Del: report_dialog API - use DAD instead
		-Del: remove unused API "can_mask_clear_rats" - got irrelevant with composite rendering
		-Del: block hook API - nothing used it, there is no provision of ever using it
		-Del: remove lesstif-only ConfirmAction (there's a generic action for this now: MessageBox)
		-Del: old, per hid print action - already reimplemented using DAD as PrintGUI() in dialogs
		-Cleanup: API CHANGE: remove confirm dialog and close confirm dialog API - reimplemented with DAD, no need for each HID to duplicate that code
		-Add: clipboard API
		-Add: rewrite the fontsel dialog using DAD
		-Add: generic, DAD based user input dialog box to replace the per hid implementation
		-Add: new, generic message box to replace the per HID implementation
		-Add: DAD based progress bar dialog to replace the per HID implementation
		-Add: make hid iteration API explicit instead of burried in the progress bar widget update
		-Add: central Print() action that wraps the GUI action or throws a warning on CLI
		-Add: centralize and unify window placement infra

	[hid_gtk2_gl]
		-Fix: pcb_color_t mishandling

	[import_ttf]
		-Update: #includes for latest scconfig and devuan's setup where there's no freetype2/freetype/*.h only freetype2/*.h

	[io]
		-Add: "type" parameter in save incompatibility call to make the API compatible with pcb_view_t
		-Add: when enabled and available, display io incompatibility in a view list instead of dumping logs
		-Add: make io incompatibility view list dialog style (list vs. simple) configurable
		-Add: do not automatically print the incompatibility list in quiet mode on CLI

	[io_eagle]
		-Fix: read unsigned bitfield, not integer, from binary layer block
		-Fix: fix PCB_MESSAGE format followed by hard fail on invalid layer number
		-Fix: make eagle binary derived linetype attribute clearer and more explicit
		-Fix: refined errors messages relating to failure to retrieve layer numbers
		-Fix: bump bbox for all vertices of binary polygons, not every second vertex
		-Fix: read binary arc bytes as bitfields, extract clockwise flags, and apply sign flags as required
		-Fix: signed 3 byte coordinate reads from binary arc and wire blocks defining arcs now read properly
		-Fix: negative flags now being properly applied to calculated arc centre, and arc stop-start coords

	[io_lihata]
		-Fix: reading a board without silk layers is not an error above v1
		-Fix: do not write v1 board if top or bottom silk is missing
		-Fix: break parsing and return error on broken embedded font
		-Optimization: calculate the silk ordering on write only for lihata v1 - new versions of the format don't need this hack and ignored the result

	[io_pcb]
		-Fix: when creating two initial layers for an element load, set them up properly (making them bound, silk and parent pointing to data)
		-Fix: do not mess with the board layers when element is loaded as pcb - the layers are already set up properly
		-Fix: incompat warning desc param mixup and unnecessary newline
		-Fix: don't throw top silk layer warning for bottom silk if the subc is on the bottom side
		-Fix: save elements and pads with the onsolder flag if they are on the bottom side
		-Change: allow padstacks to have the onsolder flag in compatibility mode

	[io_tedax]
		-Fix: plugin classification: it's a full IO plugin, not an import plugin
		-Add: code for saving and loading: stackup, layer, netlist, drc and board

	[layer]
		-Fix: search.c won't assume existing silk layers anymore
		-Fix: make sure layer bound fields are empty when creating layer binding from real layers to avoid segfaults on uninitialized fields later
		-Del: do not assert on existing top/bottom silk, they are not mandatory anymore
		-Del: protection mechanism that wouldn't let users to remove top/bottom silk - they are safe to remove now
		-Cleanup: memory leak on layer del: free fields
		-Cleanup: rename layer free to layer free fields as it does not free the layer pointer

	[lesstif]
		-Fix: don't use strcasecmp() because of portability
		-Fix: process events in progress bar busy loop (for cancel)
		-Fix: use a label box (hbox) for better alignment of old style attribute dialogs - fixes export dialog too large
		-Fix: invalid memory write after WM close of DAD dialogs in lesstif
		-Del: get rid of EditLayerGroups and the local csect preview
		-Del: custom preview code for csect - we need only the generic preview for DAD now
		-Del: local net find/select algo in the netlist window, in favor of the central algo
		-Cleanup: use a much simpler call to create attribute dialogs: no need for implicit buttons anyway
		-Add: window placement for the library, netlist and log window

	[pcblib]
		-Fix: parametric footprint: wrong conversion of cmil and dmil to mil
		-Fix: parametric footprint: convert default parameter dims even if they are not mm or mil but some other unit
		-Fix: help text override for the local defautls in *sop()
		-Fix: so() and its derivatives should list pin_* params in the help - they have no pins at all
		-Fix: do convert explicit mil value coord properly even if there's no mil fallback
		-Add: help text extraction: default value override

	[propedit]
		-Fix: propedit menu actions: do not mess with selection, use the new scope syntax
		-Add: new, non-modal, HID-agnostic DAD dialog for propedit
		-Add: use a tree for properties instead of a flat list
		-Add: scoping: specific objects (by ID), all selected objects, layer, layer group, board

	[pstk]
		-Fix: corner case: hole is always thru-hole if there's no top or bottom copper layer, because we'd count from those
		-Fix: respect override color on rendering
		-Fix: hash eq/compare bugs on rot angle and mirror
		-Add: new color config nodes for non-current layer padstack color, one for terminals and one for non-terminals ("vias") - these are used instead of the invisible color

	[query]
		-Fix: duplicated clearance value for line and arc query access
		-Add: return polygon clearance if poly-clears-poly flag is set

	[report]
		-Del: use DAD instead of the report_dialog API of HID
		-Add: Report(netlength) uses the new find API

	[menu]
		-Fix: make refdes-only subc ID display more explicit and add an user defined fallback menu item
		-Update: layer group edit brings up the new preferences window instead of the old
		-Add: change font in text object context menu
		-Add: menu items for rendering overrides: black current group and invis other groups

	[scconfig]
		-Fix: loud error for unknown --buildin
		-Fix: "recursive" dep resolver so that hid -> dialogs -> fontsel dep chain does the right thing
		-Add: detect _Pragma(message) and prepare for replacing #warnings
		-Add: need to detect gdImageSetResoltuion() as some versions of gd doesn't have it
		-Fix: use --disable instead of --Disable for internal feature disabling - it is case sensitive
		-Del: references to retired plugin nelma
		-Fix: when glib is not available, disable gtk using the right flags
		-Add: ./configure --man1dir can change manual page path to non-FHS
		-Fix: do not disable lib_gtk_config - it's long gone

	[shape]
		-Add: per corner control of round rect generation
		-Add: resolution factor for rounding arc to make round corner arc emulation use less or more segments

	[subc]
		-Fix: rounding trick so that rotation angles that are supposed to be round are got back as round
		-Fix: negating host trans should negate the sin/cos calc too
		-Fix: coord hasher assumes negated host trans
		-Fix: angle hasher assumes negative transformation
		-Add: extend subc host transformation readout with an option t return the negative transformation
		-Add: make automatic refdes text on subc conversion configurable (and optional)

pcb-rnd 2.1.0 (r21060)
~~~~~~~~~~~~~~~~~~~~~~
	[act_draw]
		-Add: new plugin to host basic drawing actions: LineNew, ArcNew, TextNew, PstkNew, polygon creation

	[ar_cpcb]
		-Add: import/export/autoroute plugin for external auto-router c-pcb

	[asm]
		-Add: hand assembly helper plugin 

	[cam]
		-Add: parse supplements: purpose field, transformations

	[conf]
		-Fix: ignore rc/library_shell from board and project fields - might be unsafe
		-Fix: ignore all command conf nodes from unsafe sources while doing a conf merge instead of waiting until popen() - this way valid values from safe sources are not masked

	[core]
		-Fix: ChkView() action shall return the state value properly for named virtual layers
		-Fix: arc remove op: do not clear the parent field before unregistering the arc - arc unreg will do it anyway
		-Fix: call end_layer for each set_layer in board boundary draw
		-Fix: do not let empty-bbox footprints load as board to avoid a slowdown/crash
		-Fix: don't crash when the rat code announces a short circuit for an unknown net
		-Fix: file name pattern subs: shorter name that also includes PCB for anonymous files in %F
		-Fix: heavy terminal poly color mixup on HIDs that turned off layer indication gfx
		-Fix: initialize all fields of dummy text object before drawing in drawing stub error message
		-Fix: keep side flip operations together in the same serial group of undo
		-Fix: make text thickness change operation undoable
		-Fix: pcb_backup() should always use the same, configured pattern, which should have the file name and the PID to minimize the chance of accidental overwrite of backup files
		-Fix: refuse to execute on-selected operations on objects that are locked
		-Fix: search_data_by_loc return value when nothing matched
		-Fix: search_data_by_loc shouldn't pass object as const, the callback may need to change the object
		-Fix: survive nonexisting silk layers in draw (silk color determination is optional)
		-Fix: use the layer recipe for unbound subc layers to avoid a crash on NULL layer ptr
		-Fix: wrong plug footprint temp var initialization (potential buffer overrun)
		-Fix: don't throw error on font load cancel
		-Fix: when destroying font with arcs in it, do not unreg the arcs, they are not registered
		-Del: no need to pass layer pointer to many object draw functions
		-Change: CreateMenu(): new, simplified syntax (plus compatibility with the old syntax for now)
		-Change: off-limits default color is a bit darker so that holes and slots stick out more
		-Change: the lock tool uses the log through Report() instead of spamming the desktop with popups
		-Cleanup: data init/new and uninit/free terminology: free should free the pointer
		-Cleanup: remove CamelCase from draw code
		-Cleanup: remove CursorX, CursorY and Zoom from the board struct - these are not board specific properties but GUI/editor specific ones
		-Add: 'quiet' option in path resolve to suppress error log for the case the caller checks the result and handles broken substs
		-Add: -x -list- prints a script readable list of export plugins
		-Add: NewGroup() accepts a 4th argument to set the comb bits of the new layer
		-Add: bump default2.lht to v6 and add mech layers
		-Add: bump default4.lht to v6 and add mech layers
		-Add: change refdes action and menu - change name too often picks up the wrong object
		-Add: check hid_conf registration leftovers on uninit, in debug mode
		-Add: extend MoveLayer() so it can be used to move a layer into a different group from CLI
		-Add: gettimeofday() wrapper to fix a compilation bug on IRIX
		-Add: give the caller a chance to set rat id on creation
		-Add: helper code for generic 2d transformation matrices
		-Add: id->obj hash in data
		-Add: new standard object call: reg/unreg for ID administration
		-Add: pass an extended draw info structure from the top of drawing requests all way through the recursion to the bottom calls; this will help injecting object rendering transformations
		-Add: pstk creation gets an optional id (that will let io_lihata enforce id on pads later)
		-Add: silently ignore the "connected" flag (it is not supported)
		-Add: simplified text render call API - to be used with preview widget drawing
		-Add: standard obj call: text/poly pre/post
		-Add: config setting for using basename of the board in export files comments/headers instead of the full path (to fix path leaking)

	[dad]
		-Fix: memory leak: free all fields of a dialog, not only the last
		-Fix: tolerate NULL pointer in preview free callbacks
		-Fix: autorun didn't deliver the return value so it was impossible to detect a cancel
		-Add: tree-table widget: API
		-Add: tree-table widget: gtk implementation
		-Add: progress bar widget: API
		-Add: progress bar widget: gtk and lesstif implementation
		-Add: hpane and vpane widget: API
		-Add: hpane and vpane widget: gtk and lesstif implementation
		-Add: preview widget: API
		-Add: preview widget: gtk implementation
		-Add: dad() action
		-Add: scripted dialogs: free tree table rows

	[diag]
		-Fix: data integrity: rewrite checks from LYT_OUTLINE to LYT_BOUNDARY
		-Fix: data integrity: considers global rat lines
		-Add: data integrity: check for the new ID hash
		-Add: data integrity: check for layer->group->layer links
		-Add: data integrity: test for duplicate layer entry in group and for group->layer->group links

	[dialogs]
		-Fix: make it clear that group edit is about not logical, but physical layers
		-Fix: padstack edit shall allow setting hole dia to 0, that's how hole is removed
		-Fix: when regenerating the padstack shape, invalidate the drawing so the new shape shows up
		-Fix: padstack editor doesn't silently ignore unknown shapes layer types, but throw an error
		-Rename: layer and group GUI editing is not only about flags, rename the actions to be more clear about the purpose
		-Add: undo dialog
		-Add: 'change type' combo box in the group type/name dialog
		-Add: support for layer group location change from the GUI
		-Add: layer group flags dialog: purpose field, location field
		-Add: purpose field in layer bindings
		-Add: new pinout dialog
		-Add: pstklib: padstack library dialog, with preview
		-Add: padstack dialog: the prototype button invokes the pstklib dialog for selecting a new proto

	[doc]
		-Fix: some layer groups are 'maybe' for compositing
		-Fix: lesstif SwapSides should have S mentioned in the syntax
		-Fix: internal units is not 1/100 mil anymore
		-Update: edit and update acompnet content
		-Update: bridges: add xschem and c-pcb
		-Update: mark gpmi deprecated
		-Del: remove nelma (plugin retired)
		-Del: old shorthand command summary from the code - don't advertise these actions
		-Move: action doc moved from code to doc action appendix (and script that generates the output doc and links)
		-Add: lihata v6 change log
		-Add: lihata board format spec: explain that padstack shape layer mask needs to contain no more than 1 location bits
		-Add: new terminology: the "main type" of layer groups
		-Add: actions are sorted and dedup'd in the appendix
		-Add: cam layer supplements
		-Add: coralEDA link in index
		-Add: eagle and protel compatibility on main page
		-Add: Mageia and Fedora have official package
		-Add: FAQ
		-Add: FAQ entry for dsn missing holes on import
		-Add: FAQ entries on DSN import vs. silk, mask and paste
		-Add: developer doc: object API: document reg/unreg, pre/post API
		-Add: rosetta: DAD examples
		-Add: explain what a pup file is for
		-Add: developer doc: detailed description of the basic infra of a plugin
		-Add: document geda/pcb format extensions
		-Add: extend the datasheet with data model points
		-Add: Zoom() doc with selected and found
		-Add: document the purpose of CycleDrag()
		-Add: scripting: document AddTimer()
		-Add: scripting: LoadScript(), UnloadScript(), ReloadScript() and ListScripts()
		-Add: scripting: ScriptPersistency() and script action preunload()
		-Add: scripting: Oneliner()
		-Add: DAD documentation

	[export_gerber]
		-Fix: handle multiple outline layers
		-Fix: drill file end marker is M30
		-Workaround: OSHpark import doesn't take G00 in separate line
		-Add: support for drilled (G85) slots and routed (G00) slots

	[export_png]
		-Fix: more robust outline coord cheat for working around gd's broken line clipping
		-Fix: workaround on alpha+photomode if the core sets the boundary layer twice (when mech layers are missing)
		-Fix: multi-step outline draw: let all layer groups be drawn
		-Change: draw rectangles by drawing lines to guarantee the right brush
		-Change: mark png-bloat obsolete (use cam transformations instead)

	[export_ps]
		-Fix: handle multiple route layers
		-Fix: more robust and efficient way to determine if there's explicit outline
		-Fix: reproduce the implicit outline using the same line width that draw.c in core does
		-Change: mark ps-bloat obsolete - use cam layer transformations instead

	[export_stat]
		-Fix: when deciding if a subc is smd or not, count slots for through-hole
		-Add: upgrade for counting slots

	[export_svg]
		-Fix: don't write the group of empty layers

	[gsch2pcb-rnd]
		-Fix: -q inhibits printing the instructions and the no-method-specified warning

	[gtk]
		-Fix: key presses doesn't mean the cursor has entered the view - fixes bug: getxy returned valid-looking coords instead of asking the user if there was no crosshair but keyboard input
		-Fix: use all screen space for the command entry
		-Fix: the print dialog needs to get the gtk common struct instead of topwin because of the preview API
		-Fix: old pinout preview should call the new zoomto API to get the footprint zoomed
		-Fix: set definite drawing area size for the font selector
		-Fix: preview: set initial size request and canvas size of pinout windows so the zoom logics can calculate the initial zoom level
		-Fix: library preview: more accurate initial zoom with all floaters included
		-Fix: when setting up the preview widget for csect, set default width and height so that zoomto does the right thing (fixes: graphics does not appear)
		-Fix: apply horizontal and vertical compactness from conf change events, not hardwired calls from gui config so direct conf change is applied too
		-Fix: DAD: when creating a new box for a frame (requested in flags), respect the EXPFILL flag
		-Fix: DAD: if caller's close callback destroys the modal dialog, make sure the original response (wheter it was ok or cancel) is preserved and returned
		-Fix: apply xoffs/yoffs margin correction to layer previews as well
		-Fix: preview popup is on the right click (in-line with the default menu config)
		-Fix: proper rounding in screen<->coord conversion (fixes the slipping tab bug)
		-Fix: after entering a new value, even if with new unit, preserve the text, don't overwrite it with canonical form until it's necessary (for stepping or clamping)
		-Change: split the layer selector widget to have a separate section for in-stack and out-of-stack layers
		-Change: replace local cli history implementation with the central one from lib_hid_common
		-Change: tune status line print: use shorter bolds to decrease horizontal size
		-Cleanup: CLI's main loop is in the context, not a global var
		-Del: remove the separate command window entry - does not play well together with the new CLI ideas, doesn't fit in the unified GUI approach and didn't seem to get much use anyway
		-Del: route style dialog: no 'save style as default' any more: route style is not in the config, the default board should be edited
		-Del: text direction from the advanced search dialog
		-Del: bu_notebook and framed notebook page builder: no code uses it
		-Add: advanced search tabs: rotation and thickness text fields are available in query()
		-Add: advanced search: tab entry for host layer's purpose
		-Add: resize grip on top window
		-Add: route style dialog: entry to text thickness
		-Add: route style dialog has a text scale entry
		-Add: new, more generic preview widget API, compatible with the DAD idea
		-Add: on top win close, close the command entry first, as it has its own main loop that can block everything - fixes bug: can't exit while command entry is open

	[hid]
		-Change: API CHANGE: pass on purpose and purpi to layer group set so that decisions can be made based on subtype of mech/doc layers later
		-Change: API CHANGE: pass on editable "caller xform" struct pointer to the set layer API so exporters can configure the core to do transformations on drawing
		-Fix: give control to the HIDs about whether heavy term layer indication gfx shall be drawn or not
		-Add: remove menu by cookie if not by path
		-Add: cli central history API

	[hid_gtk2_gl]
		-Fix: do not draw the crosshair if the cursor is not in the drawing area (follow lesstif and gtk2+gdk on this)

	[hid_gtk3_cairo]
		-Fix: do not draw the crosshair if mouse cursor is not in the drawing area (unify behavior across HIDs - untested)

	[hid_lesstif]
		-Fix: typo in action handling code made zoom() (a.k.a. zoom extent) a syntax error
		-Fix: lesstif Zoom() must do the same as gtk Zoom()
		-Add: load/save/append to the central command line history

	[io_dsn]
		-Add: full board parse/load

	[io_kicad]
		-Fix: fp_circle is a 360 degree arc

	[io_kicad_legacy]
		-Fix: scaling of exported legacy module library fixed, and integer decidegree pad rotations enforced

	[io_lihata]
		-Fix: don't attempt to fix up the outline layers if there's no board (subc loaded)
		-Fix: properly return NULL for failed padstack write
		-Fix: warn for saving text thickness in route style only under v6
		-Fix: create polygon with the right ID on load
		-Fix: load lines, rats, arcs, text, padstacks, and subcircuits with the right ID, create them only with the right ID
		-Fix: warn for empty layer type in padstack proto shape on load
		-Fix: when saving padtsacks with slot to lihata v5, do not save the slot shape with empty layer type but omit it - causes less confusion and on broken files
		-Del: 'no_id' from parse_line(): we always need to have an ID because of the ID registration
		-Change: do not save layer visibility bit in v6, warn when it is loaded from v6
		-Add: lihata board format version 6, for supporting new layers types and slots, new text props
		-Add: when loading pre-v6 lihata, make sure the outline layer's comb is marked 'auto'
		-Add: save noshape thermal as an explicit flag from v6 up

	[io_pcb]
		-Fix: recover from broken group string - create intern copper layer for any layer that is not referenced from the group string
		-Fix: do poly clipping only once during load - shorter load times
		-Fix: do not save duplicate element attributes (footprint, value and refdes - they are saved as property in this old format)
		-Fix: do not lose multiple special layers on load, even tho only the first one is placed in the right group
		-Del: pcb format documentation from the .y file - pcb-rnd should not attempt to document alien formats, we should leave this task to the maintainer of the format (geda/pcb in this case)
		-Add: warn the user when saving a NetListPatch - geda/pcb won't like it
		-Add: fix up broken (unlinked) outline layers after load (it's probably pstoedit that generates such files)

	[layer]
		-API CHANGE: creating a new bound layer gets a purpose string
		-Fix: whether the implicit outline layer needs to be drawn does not depend on how many outline objects got draw, but really depends on how many outline objects there were on those layers
		-Fix: when fixing up outline layer (e.g. after loading from old file formats), set the auto comb flag on the layers (to allow padstack use)
		-Fix: ask the hid whether plated and unplated slots should be drawn only if they exist
		-Fix: when creating real layers for bound layers, set new layer's object type to PCB_OBJ_LAYER
		-Fix: #tbs: do not let the user remove top/bottom silk groups (temporary workaround)
		-Del: PCB_LYT_ASSY, PCB_LYT_FAB, PCB_LYT_CSECT - use the purpose field instead
		-Del: PCB_LYT_UDRILL and PCB_LYT_PDRILL - use the purpose field instead
		-Del: PCB_LYT_OUTLINE - use BOUNDARY and purpose
		-Change: side-based silk+doc layer rendering to make sure about layer order; properly draw global doc layers (between intern and current-side doc layers)
		-Add: DOC and MECH layer types
		-Add: purpose field
		-Add: draw mech layers together with boundary layers, at the end
		-Add: when drawing boundaries and mech layers, pick best candidate for unplated and plated slots
		-Add: NewGroup() action for making it easy creating new layers from the menu (with context menu)
		-Add: DupGroup(): new action and menu item for duplicating a layer group

	[nelma]
		-Del: retire the plugin - upstream stopped maintenance and there was no user either (openems and other sims will take the role)

	[oldactions]
		-Del: Return() - something we never used

	[polygon]
		-Fix: rewrite the polygon offset code based on the colinear-corner-shift idea to avoid line-line intersections
		-Fix: when a layer is moved to a different group, reclip all polygons of the layer automatically
		-Change: expose the API of polygon offset low level - to be reused by padstacks
		-Add: polygon offset cache normal vector calculator
		-Add: draw_info bloat transformation works on polygons

	[propedit]
		-Fix: use the undoable text rotation change API
		-Del: text direction - use text rotation instead
		-Change: rename text rotation to direction to match the code and make room for real rotation
		-Add: code for handling text thickness and partial code for handling text rotation
		-Add: layer group purpose field
		-Add: missing code for removing attributes from board

	[pstk]
		-Fix: use ortho-grow for padstack shape offseting for more accurate results of derive/grow/shrink
		-Fix: do not crash if prototype is empty
		-Fix: missing 'else' made wireframe/thin draw poly shape filled
		-Fix: throw a loud error when a padstack with empty shape layer is broken up
		-Add: no-thermal clearance for hshadow should trace the hole or slot shape
		-Add: slot support: convert to pstk: accept one boundary or mech layer for slot
		-Add: hshadow support (special shape for clearance around the hole, without copper)
		-Add: low level pcb_pstk_shape_at_() that can be forced to return the shape even if thermal is NOSHAPE
		-Add: padstack draw respects the noshape thermal and inhibits drawing
		-Add: the thermal tool cycles through the no-shape bit now
		-Add: special treatment of off-board padstacks: do not clip or undo
		-Add: low level proto call for replacing the geometry in-place, without creating a new proto
		-Add: utility function to count prototype usage under data
		-Add: utility function for removing a padstack prototype

	[query]
		-Change: rename text rotation to text direction to make room for the real rot field
		-Cleanup: layer is a searchable object now, let the low level code search/list layers, but disable it from high level for now to keep compatibility
		-Add: support for text rot and thickness
		-Add: access layer purpose (group's purpose)

	[res/menu]
		-Fix: editing layer or layer group properties should unselect all so nothing else is edited
		-Del: mnemonics from the menu files (for HID API simplification)
		-Change: better key binding for the plugin management dialog: {p m p}
		-Add: integrity check in the maintenance menu
		-Add: change refdes submenu in subc context menu
		-Add: dedicated submenu for user scripts
		-Add: subc layer binding in the subc context popup menu

	[tests/rtt]
		-Fix: unify how pcb-rnd is executed; proper from-src-dir execution
		-Fix: use basename in ps/eps export to get reproducible output
		-Add: slot/mech example
		-Add: visual compare script, format-independent
		-Add: valgrind flags: detect memory leaks

	[rubberband_orig]
		-Fix: rat line connected to multiple terminals on the same coord would move the rat endpoint multiple times when the subc is moved
		-Update: moving a line with rubberband will remain connected to arcs by inserting a new route.
		-Update: Moving a line point that is connected to an arc will insert a new route to ensure that the arc remains connected.

	[scale]
		-Add: low level: text, arc, poly, line, padstack scaling
		-Add: pcb_data_t and buffer scaler functions
		-Add: ScaleBuffer() action

	[scconfig]
		-Fix: stroke: insert the internal conf file to DEPDEP so make dep runs even when stroke is disabled
		-Fix: cam, export_xy, fp_wget: explain enough of the internal conf so make dep works even if they are disabled
		-Fix: remove --with-intl - it can render pcb-rnd unusable while we don't really have support for non-english locales
		-Fix: detect popen(), missing popen is fatal (make the dependency explicit)
		-Change: centralize the plugin internal conf mechanism
		-Add: detect SIGPIPE and if present, set it to ignore to avoid external programs to exit pcb-rnd

	[script]
		-Add: fungw engine (glue code) for "scripting" in C
		-Add: Zoom(get) - useful for scripts
		-Add: action AddTimer() and a minimalistic timer implementation
		-Add: script data persistency: action for reloading and removing data
		-Add: dialog frame for a script dialog

	[subc]
		-Fix: do not change the subc pointer when moving to other side, rather do it in-place so pointers are not messed up (as reported by celem with autoplace)
		-Fix: preview displays terminal labels when enabled
		-Fix: when drawing preview do not draw the label of non-owned terminals
		-Fix: memory leak on subc-in-buffer breakup
		-Fix: subc dup needs to set layer struct type to PCB_OBJ_LAYER else the object is broken
		-Fix: do not double-unreg objects on subc destroy (caused asserts on undo)
		-Fix: display subc ID (red subc marking overlay) even if refdes is NULL - what we display is configurable and may differ from the refdes
		-Fix: side flip: put only the subc flip on the undo list, not each subc part's flip, to avoid double-flip attempt on undo

	[text]
		-Add: text string render: use transformation matrix instead of manual transformation calculations (preparing for arbitrary angle rotation)
		-Add: buffer free rotation: also rotate text
		-Add: user selectable text thickness
		-Change: io_lihata saves only rot, not direction from v6
