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
