pcb-rnd 1.2.8 (r15478)
~~~~~~~~~~~~~~~~~~~~~~
	- Change: switch over all plugins and core to the new data model

	[padstack]
		-Fix: selection bug: if a padstack is a hole only, it's near to the selection box even if no shape is near (because it has no shapes)
		-Fix: no-shape hole corner case: xor-draw shouldn't try to draw the first shape when there's no shape
		-Fix: point-in-padstack: check hole even if there's no shape
		-Fix: don't crash on padstack special case: hole-only padstack
		-Fix: corner case: don't crash on hole-only padstack
		-Fix: padstack conversion from object list: when giving an early error on too many objects being converter (compared to available layers), the count shoudl include layer objects only, not the via/padstack that is to donate the hole
		-Fix: when converting padstack from via or existing padstack, preserve mask layer with LYC_AUTO
		-Fix: when converting padstack from an existing padstack, also copy the paste layer
		-Fix: when converting paste or mask objects into a padstack, make sure to use LYC_AUTO - by definition, all padstack mask/paste objects are AUTO
		-Fix: when drawing a subc pinout preview, figure padstack shape and color by a layer mask, not by an actual layer group (fixes: subc lib preview missing padstacks)
		-Fix: buffer rotation rotates padstacks as well
		-Fix: when sending a padstack to the other side, do not invert the rotation angle - side swap does that automatically
		-Change: place padstacks instead of vias by default - remove the associated brave bit
		-Add: when drawing a subc preview, also draw padstack holes - all holes except for BB
		-Add: existing padstack can be source object for a padstack conversion
		-Add: make the padstack mark (cross) geometry configurable
		-Add: padstack hash
		-Add: padstack editor: tooltip on local clearance
		-Add: padstack editor: short label explaining the difference between instance and prototype setting scope

	[subc]
		-Fix: don't warn for unbindable virtual layers (e.g. aux) on undo deletion
		-Fix: when importing subcircuits using the ElementList(Need), initialize the crosshair so that subc mirroring doesn't catapult the buffer to negative y on placement
		-Fix: aux layer creation: create it when special point is added even if it is before the normal aux vector creation (suppresses warnings about missing subc-aux layers)
		-Fix: smash buffer subc detaches the shared rtrees first so buffer rtrees are not double free'd on buffer data destroy
		-Fix: when moving a subc between buffer to board, set the parent of global objects properly
		-Fix: when creating aux layer base vectors, take rotation angle in degree
		-Fix: when sending subc to the other side, also mirror the stack_offs of layers so that inner layers end up mirrored in the stack too
		-Fix: the buffer tool can replace subc with subc using shift click, saving/preserving all attributes of the original board subc
		-Fix: safely return the old refdes in subcop_rename so the undo code doesn't get confused
		-Fix: dyntext corner case: when dyntext evaluates to empty string, return <?> so that no invisible text is produced
		-Fix: proper object and polygon-clear-polygon clear/restore poly administration when subc is copied from/to the board
		-Fix: (floater text) remove undo: prepare the remove undo/redo code for subc layers
		-Fix: prepare the text object buffer move function for subc layers
		-Fix: spread the 'floater text' subc-part move buffer layer code to arc, line and polygon
		-Fix: do not allow pasting a second subcircuit in the footprint edit mode
		-Fix: don't use the crosshair GC hardwired when drawing subc marks (also fixes color bug)
		-Change: default config: prefer best lihata format over mainline format for footprint save
		-Add: is-empty call
		-Add: pcb_subc_new() for orthogonality; same as alloc() but also sets the ID
		-Add: helper functions to add points on the aux layer and query them
		-Add: create aux takes an argument for creating the aux layer on the bottom, indicating that the whole subc is on the bottom side
		-Add: template based subc ID print on the subcircuits overlay layer
		-Add: hash and eq functions for text, polygon, padstack, subc layers  (for use in subc hash)
		-Add: structure to centralize the reverse transformations of x and y coords for hashing
		-Add: hide floaters shall supress drawing any object with the floater flag set

	[layer]
		-Fix: don't call invalidate_all on layer change notification if we are exporting
		-Fix: layer creation do/undo - need to store 3 layer indices to be able to inser tbakc the layer at the right place
		-Fix: when UI layers are free'd, free all layer objects
		-Fix: layer_is_empty() should consider all subcircuit layers, recursively
		-Fix: do not treat paste layers specially when deciding whether a layer group is empty: pins and pads are no special case any more
		-Add: helper function to create missing (internal) substrate layer groups between adjacent copper groups
		-Add: call for removing a specific UI layer directly, not all layers by cookie

	[core]
		-Fix: ignore empty flags when flag lists are loded from string (io_pcb corner case)
		-Fix: proper error message when registering a hotkey fails
		-Fix: allow arc delta to be changed to 360, inclusive in the op code
		-Fix: when a main_action fails, pcb-rnd should return non-zero
		-Fix: typo in subc rotation code: rotate90 should not do generic rotate but should do rotate90 recursively
		-Fix: pcb_polyop_change_clear_size() should work on polygons with the clearpolypoly flag
		-Fix: pcb_polyop_change_clear_size() uses the normal message mechanism to give a warning instead of a show-only-once-popup
		-Fix: connection loop uses signed integer type so it doesn't go out of bounds if a net contains only 1 or 0 connections
		-Fix: selection bug: select only on layers that are visible
		-Fix: issue a layers changed event before layer vis reset on board creation so that the layer selector is not reading into already free'd memory
		-Fix: When merging new lines, set the search radius to 1 so that existing lines can be found.
		-Fix: layer-is-empty-pure: in some special cases there's no rtree but list objects, in which case the layer can be non-empty while rtrees seem to be empty
		-Fix: polygon clearance corner case: a subc may not have a buffer or board parent (lib)
		-Fix: data-is-empty: if there's at least one padstack or subcircuit, it's not empty
		-Fix: pcb-printf %mH heuristics for negative values
		-Fix: don't create layer group name with space in the name (fallback global outline name)
		-Fix: default board has no space in the name of the global outline layer and the layer is not marked as internal
		-Fix: don't abort or crash on invalid GC while xor-drawing text with missing symbols (e.g. binary junk)
		-Fix: drc: proper line vs. padstack polygon intersect (considers Bloat)
		-Fix: search object by location prefers same-side floater over layer objects
		-Fix: rotate rounding error (caused subcircuits to lose precision when reverse engineering the rotation angle)
		-Fix: when loading a footprint, remove the selected and found flags
		-Fix: when searching for padstack by location, prefer the padstacks that have a shape on the current layer
		-Fix: CLI: do not depend on order of arguments: the filename can be inserted between any two arguments
		-Fix: heavy terminal thermal clearance size doubling bug
		-Fix: polygon insert point was not adjusted correctly with 'all-direction lines' disabled
		-Fix: disperse "elements" typo ruined the grid for subcircuits
		-Fix: disperse "elements": remove flicker by using the snapped coords for incrementing the cursor
		-Fix: double free in conf error message
		-Fix: ratline operation: pass on the main pointer (deleting ratline using the remove tool shouldn't crash)
		-Fix: typo in multiple file name error message
		-Add: give a hint if the config dump action fails
		-Add: --version prints svn revision as well
		-Add: handle the is_footprint special case in data/layer loops
		-Add: configuration node: editor/auto_via to disable automatic via placing globally
		-Add: XORDrawSubc now draws lines and arcs as outlines instead of thin lines.
		-Add: XOR draw the current 'pen' when in line/arc/text tool mode
		-Add: keyboard handling workaround: when US layout is not enabled try to guess from the translated
		-Add: allow polygons to be rotated by the rotate tool
		-Add: inhibit poly clipping during buffer operation - clip only once, at the end
		-Add: utility function that determines whether an object is in the subtree of a data_t
		-Add: emit board-meta-changed event if the board's Changed flag changes so the GUI can always update
		-Add: recursive data flag change utility function
		-Add: infrastructure for tracking files loaded so they can be printed for user's info (PrintFiles() action)
		-Add: disperse "elements": do not lose objects beyond board extends, ratehr warn the user and restart dispersion on top - overlapping objects are better than lost objects
		-Add: action PasteBuffer(ToLayout) uses the crosshair coords if "crosshair" is passed as second argument instead of numeric coords
		-Add: DRC: be able to start network bloat search from subc terminals as well
		-Add: system() action for testing te lihata pers save table bug

	[autocrop]
		-Fix: do polygon clipping only once, after all moves, so poly-poly clearances are rendered properly (also the clipping will take less time)
		-Fix: do not directly modify the pcb width/height field, use the central call for side effects like crosshair range update
		-Cleanup: remove doxygen

	[autoplace]
		-Add: manual redraw at each end-of-stage for visual feedback
		-Add: progress bar, so the operation can be cancelled

	[autoroute]
		-Fix: remove the clearance value from padstack bounding box while adding them in the routing box set so padstacks with overlapping clearances don't get merged
		-Fix: off-by-one on route style allocation
		-Fix: relax the assert()s to allow +-2 nanometer of rounding error on via boundaries
		-Cleanup: rename structs and typedefs to follow pcb-rnd naming conventions
		-Change: pretend that terms are manhatten-aligned, otherwise the autorouter asserts
		-Add: prepare for the generic polygon-is-terminal case
		-Add: obstacle mapping recurses to subc

	[conf]
		-Fix: conf(set,) should update/render the final value even if it was set as native
		-Fix: command line -c += and ^= should create and manipulate the right policy subtree, not the first "overwrite"

	[diag]
		-Add: integrity checks: subc refdes validity
		-Add: integrity check for terminal name characters
		-Add: integrity check: subcircuits outside of board extents
		-Add: data dump action to ease debugging the DRC
		-Add: DumpLayers(all) prints a complete map and cross-checks

	[doc]
		-Fix: don't use absolute url for embedding a local image
		-Fix: bridges: legacy io_kicad is write, not read
		-Del: features/ - moved to the pool
		-Del: gtk3 devel docs: adoc, old plans and file listings, css cruft, ToC
		-Update: rebuild action reference table with latest version of pcb-rnd and more complete buildin config
		-Update: developer data model for layers and padstacks
		-Update: data model drawing and data.html with more struct names
		-Update: importer code docs for the new data model
		-Update: plugin creation doc lists all new pup fields
		-Update: obj func naming concentions for element removal
		-Change: rewrite the model chapter for the new data model
		-Add: knowledge pool link from the main page
		-Add: list OpenBSD as supported platform
		-Add: link in the mailing list archives
		-Add: --help in the manual page
		-Add: developer data model: rtree vs. lists
		-Add: indent(1) patch for function decl and comment unalignment
		-Add: make install handles doc/ properly
		-Add: generate OS package list; package descriptions and metapackage
		-Add: plugin naming conventions: lib_ plugins
		-Add: packaging.txt mentions recommends the default package splitup

	[export_bboard]
		-Fix: build: explicit dependency on cairo

	[export_gerber]
		-Fix: hackvana naming style needs the drill file named .cnc not .drl (reported by Erich)

	[export_ipcd356]
		-Change: plugin state: requires full rewrite

	[export_nelma]
		-Change: do not compile nelma by default, mark it deprecated

	[export_openscad]
		-Add: proper rotation and mirroring for 3d models when placed as subcircuit
		-Add: incompatibility warnings if padstack hole or subc orientation can not be determined

	[export_ps]
		-Fix: always draw with erase color on mask - the ps exporter doesn't support real compositing anyway (fixes missing padstack masks)

	[export_svg]
		-Tune: poly bloat value minimized - mostly covers the thin lines missing because of the slicing but does not make noticable difference in size

	[export_xy]
		-Fix: use 1 and 2 for Macrofab SMD and PTH (celem says so)
		-Add: respect the pnp-origin mark of the subcircuit if it exists
		-Add: macrofab: fill in the last two (optional) columns using subcircuit attributes macrofab::DNP and macrofab::MPN

	[fontmode]
		-Fix: make font layer visible by default

	[fp_fs]
		-Add: save the output of a parametric footprint gen in a temp file because it will need to be loaded multiple times and rewind() is called on it (because of the multiple file formats)
		-Add: temporary hack for allowing kicad modules to be loaded from the lib
	[fp_wget]
		-Fix: work around wget's buggy error return on succesful non-updating -c

	[gerber]
		-Add: when 'copy outline to layer...' is enabled, do not consider affected target layers empty even if their group is empty, because of the copied outline; note: the outline is never empty (implicit board extent outline!)

	[gtk]
		-Fix: preview expose area scaling bug: have to tune the expose extents to the actual widget extents else objects beyond the original extent but still within widget pixels won't be drawn
		-Fix: when picking the default format for fp save, pick the first match, not the last match
		-Fix: invalidate after propedit val changes so the changes are drawn immediately
		-Fix: attribute dialog: detect if input is partial or conversion fails and don't change the value to avoid overwriting valid values with invalid values
		-Fix: do not change DAD widget values if the new value matches the old value, to avoid unnecessary cursor jumps
		-Fix: allow the lib_gtk_hid plugin to compile as dynamic linked plugin (CFLAGS was set too late)
		-Fix: handle non-existent/deleted UI layers in the wt selector
		-Fix: library window: arrow key navigation shouldn't auto-activate levels and parametrics, only static footprints
		-Fix: library window: page up, page down, home and end are also "arrow keys" and should activate footpritns
		-Fix: library: untangle ctrl+c from igoring unhandled keys and arrow keys
		-Fix: library window: accept keypad enter as well for row selection
		-Fix: help text: invocation lists all known gtk plugins
		-Fix: config window: don't duplicate the window close mechanism; all signals should call the same code and that code should be prepared for multiple calls (fixes: closing preferences from the window manager then reopening crashed)
		-Fix: GetXY() presents the query string in the status line
		-Fix: do not create multiple instances of the command window, just raise the existing instance if needed
		-Fix: gl: Check for NULL name when setting colour. If NULL, print a warning message and set colour to magenta instead of crashing.
		-Add: DAD dialog TABBED implementation
		-Add: gl: draw UI layers
		-Change: instead of pins/pads and vias, the layer selector has an entry for controlling holes
		-Change: increase the wait time between param dialog modification and text entry refresh, to allow more time for the user to complete her edits.

	[lesstif]
		-Fix: allow drawing UI layers
		-Fix: duplicate shift+d hotkey in the default menu file
		-Fix: normal handling of silk, paste and mask layers in the layer selection/visibility mechanism
		-Fix: present the query string in GetXY
		-Del: old special case layer selector menus
		-Add: implement tabbed widget for DAD
		-Add: attribute dialog should have minimal width and height enforced
		-Add: apply the central layer alpha setting on rendering
		-Add: redraw after color conf changed

	[import_sch]
		-Fix: debug messages should not be printed to stdout but logged properly, if the new verbose config permits
		-Add: default value of verbose is false

	[io]
		-Fix: when loading element, check for the plugin's element load capability, not pcb load
		-Change: API CHANGE: test_parse_pcb -> test_parse that gets the expected type of the file instead of a dummy board ptr
		-Change: footprint load API contains an optional format parameter (just like the board load API does)
		-Add: API for reporting save incompatibilities
		-Add: do a test_parse before attemting to parse a footprint
		-Add: LoadFrom() action respects the optional format parameter when loading an element

	[io_eagle]
		-Fix: version parsing now deals with absent '.Z' in X.Y.Z version string more gracefully
		-Fix: not being able to place a component is not a warnign but an error, as it almost surely breaks the board
		-Fix: elem text set (which is really just subc attribute set)
		-Fix: don't add subc instances twice in rtree
		-Fix: bin: another hole type ID found in the wild, v 5.12
		-Fix: bin: can now read new hole type with mask 0xFF53 "hole"
		-Fix: bin: binary layout hole features now have diameter, drill doubled to get correct size
		-Fix: bin: inhibit group updates until all groups are read to avoid invalid/missing silk layer problem
		-Fix: bin: read pad block half_drill, half_diameter as unsigned bitfield too.
		-Fix: bin: read bitfield as T_UBF not T_INT
		-Fix: bin: SMD rotation RXXX was not being parsed properly prior to padstack creation
		-Add: bin: preliminary support for free text block storage in egb_ctx struct

	[io_hyp]
		-Fix: write implicit board outline if there's an outline layer but it is empty
		-Del: old element silk screen draw code - subcircuits don't need silk outline on screen
		-Change: generated test: get the oblong padstack asymmetric to make it different from the round pad
		-Add: load padstacks as padstacks, with considering all metal layers described in the file
		-Add: make sure layer group names are unique on save

	[io_kicad]
		-Fix: don't assume the order of the layer stack, different versions of kicad use different order
		-Fix: don't guess layer type by ID
		-Fix: do not fake host to pcbnew - write pcb-rnd version info in header
		-Fix: do not center the drawing in the page (this will be an optional feature later)
		-Fix: get smd pad and thru-hole pin rotation angle right
		-Cleanup: major simplification in the internal API of the pad creation code - make the pin code reusable for via
		-Cleanup: code simplification: now that tally is back in the central pad code, it won't ever be NULL
		-Cleanup: split paper size heuristics from pcb write function
		-Change: write.c layer model rewrite - use data tables instead of code hardwirings
		-Add: generate implicit outline
		-Add: io compatibility wanrings for term attributes on padstacks
		-Add: auto layer allocation for the case when footprints are loaded

	[io_lihata]
		-Fix: invalid memory write on loading rats (post-id-assignment)
		-Fix: don't crash on padstack corner case: hole with no shape
		-Fix: remove trailing \n from error report strings
		-Fix: do not crash with sparse padstack proto array (using IDs)
		-Move: automatic p&p and origin code into a common helper function - io_pcb will use this too
		-Add: support prio: lihata is the native format for footprints
		-Add: inhibit poly clip while loading a design, apply the clip once at the end

	[io_pcb]
		-Fix: when creating a new subc on a data, make sure padstack rtrees are linked
		-Fix: save may change the logical layer ordering - to keep the GUI in sync, generate a layer change event
		-Fix: reuse paste and mask layers, by name, to avoid ever-growing number of layes on round trips
		-Fix: do not export flags that are unknown to mainline
		-Fix: do not merge element lines on load-to-subc - the loader should not change the data
		-Fix: don't crash on saving a footprint even if refdes is not set
		-Fix: insert missing substrate layers after loading the board to get consistent output
		-Fix: when mirroring a padstack while loading, use pcb_pstk_data_hack, because PCB is not necessarily pointing to where we are loading the padstack into (fixes the 'import .pcb into paste buffer and get bottom side padstacks on the top side')
		-Workaround: when loading an old fp file, there's no unit format information - use the preferreed hman readable variant over centimils for now
		-Add: try to guess save unit format variant from the unit styles seen in the file
		-Add: create explicit paste and mask layers - drawing on implicit layers is not supported by subc/padstack
		-Add: incompatibility error when saving non-empty mask or paste layer
		-Add: create the usual subc layer groups and layer bindings when loading an old fp for editing
		-Add: reverse engineer rotation of subcircuits when converted from element on load
		-Add: when loading old elements, also mark the pnp point unless the origin should be used
		-Add: io incompatibility error on save if there are no styles (geda/pcb tends to crash on such files)

	[io_tedax]
		-Add: IO plugin registration, bindings for loading and saving footprints
		-Add: parse pcb hooks for loading footprints from the CLI

	[libuhpgl]
		-Add: ignore esc sequences
		-Add: support for the pen speed (VS) command

	[polygon]
		-Fix: increase line endpoint epsilon comparison (see knowledge pool node 'polybug1')
		-Fix: clearance is generally considered to be part of the bbox for all objects, make it so with polygons too
		-Add: more detailed error reporting on polygon contour check fail
		-Add: when self intersection debug is drawn, redraw the offending lines with bright red
		-Add: line-polyline intersection optionally returns the point of intersection
		-Add: code that will later on fix the most trivial self intersection polygon cases
		-Add: delayed poly clipping with dirty flags; poly clip all (forced all-poly reclip)

	[propedit]
		-Fix: absolute values for padstack rotation
		-Fix: padstack map: global clearance value halving is not needed
		-Fix: padstack clearance set doesn't need to *2 the value
		-Add: edit polygon properties: clearance

	[report]
		-Fix: NetLength works even if there are no elements
		-Add: report(NetLengthTo)
		-Add: when printing rat line endpoint groups, print their names too
		-Add: print parent subc

	[menu]
		-Del: nonetlist flag set menu: it was element-only, and there is now a generic flag editor that includes this flag too
		-Add: 'free rotate selected' menu in the popup

	[rtree]
		-Add: switch over to using genrtree instead of the local implementation
		-Del: remove 'manage' from the API - callers should arrange freeing the tree nodes; a full tree must be dynamic or static, mixed trees are not supported

	[rubberband_orig]
		-Fix: rubberband ratlines connected to subcircuits/padstacks
		-Change: Remove the copper-only constraint; rubberband is an editor feature that should work on any layer

	[scconfig]
		-Fix: when building libminuid, expect spaces in CLFAGS and LDFLAGS passed down
		-Fix: build libminuid using $(MAKE)
		-Fix: explicit rules to build genlist objects for gsch2pcb-rnd
		-Fix: add repeat report warning if libxml2 is missing
		-Fix: make clean (and distclean) removes ojects in libminuid and uundo
		-Fix: missing dependency for building all genlist objects for gsch2pcb-rnd (workaround for excess smartness of GNU make)
		-Add: ./configure --profile generates profiling code with gcc (-pg and -no-pie to work around a gcc bug)

	[teardrops]
		-Fix: use the central distance calculator instead of a local, non-coord-type-safe copy; also avoid sqrt()
		-Cleanup: remove doxygen from copyright and remove some dead code
		-Add: handle padstacks (arbitrary poly shaped pad handling is very limited)

	[util]
		-Fix: fp2subc: force saving as lihata v4 so the result is always a subc
		-Fix: gsch2pcb-rnd: don't embed Install_root in the executable
		-Fix: gsch2pcb-rnd: typo in LIBDIR_INSTALLED made gsch2pcb-rnd check for the gnetlist backend always fail
		-Add: script to list 404 pages on the official home page
		-Add: fp2subc -d (or --debug) option to wrap pcb-rnd in a debugger (e.g. valgrind)

pcb-rnd 1.2.7 (r13656)
~~~~~~~~~~~~~~~~~~~~~~
	[padstack]
		-Add: pad stacks: generic object for pins, pads , vias and holes

	[core]
		-Fix: when a new file is created by a save and there's no format preference of the board, the "by file name extension" heuristics should pick the matching plugin with the highest save_preference_prio value instead of picking the first available (fixes the bug that new boards were saved as lihata v1 instead of lihata v4)
		-Fix: conf: mkdir ~/.pcb-rnd if does not exist so user config can be saved on request
		-Fix: Display(ToggleGrid) action now sets the grid relative to the crosshair, not the mouse cursor position
		-Fix: Draw buffer lines/arcs as outline instead of thin-draw. Solves problem with zero length lines
		-Fix: Draw pin/pad labels on top of other layers
		-Fix: ElementList(): get original-element rotation, offset and side uniformly, both for elem and subc
		-Fix: Far-side composite silk was being drawn in front-side colour
		-Fix: SetValue() text scale change with the wrong increment
		-Fix: buffer is not bound to a board, not even after a board is loaded into the buffer; buffers should be board-neutral
		-Fix: buffer paste layer binding bug: if the buffer has no layers only globals, don't bother copying layer objects
		-Fix: check if layer is not null (fixes polygon undo bug)
		-Fix: data model bug: when deleting an object, it is copied to the list of removed objects; do not clear the parent field after the deletion, but leave it to point to the data of that list
		-Fix: don't clamp arc angles between 0 and +360 but -360 and +360 - this lets the user explicitly set start angle or delta angle to -90
		-Fix: don't select locked objects
		-Fix: draw padstack holes after padstack shapes (some exporters, like ps, depends on overwriting pixels with holes so holes need to be drawn last)
		-Fix: import board to buffer layer mixup: the code shall convert all imported layers to dangling bound layers first, then do the binding to the current board
		-Fix: memory leak: buffer uninit: don't do layer binding right before all data is free'd
		-Fix: memory leak: default layer names in pcb_data_t destroy
		-Fix: memory leak: design path and real file name of the board to be loaded in case the load fails
		-Fix: memory leak: hid color cache destroy should free the names allocated by the lib
		-Fix: memory leak: on footprint plugin root path
		-Fix: memory leak: on plugin dir builds
		-Fix: pcb_loop_layers() doesn't depend on global PCB
		-Fix: pin/via in box macro: true only if the whole pin/via is in, ring incldued, not if the center is in
		-Fix: quoted-string printf handles empty string properly
		-Fix: remove buggy optimization: do not rotate the bounding box on 90 deg rotation, but recalculate - because of our open/closed boxes, rotation breaks the optimization
		-Fix: remove dangerous pcb_get_num() from the API
		-Fix: rounding error: repeated 't' and 'T' text value changes won't get the text scale drifting by a few percent
		-Fix: selection box bug: semi-negative selection failed on lines and arcs
		-Fix: text draw doesn't blindly trust that the layer is a real layer
		-Fix: when drawing an object preview, temporary switch off flips
		-Fix: when drawing objects on bound layers (e.g. a subcircuit for a preview window), use a more advanced color logics: objects on top copper and silk layer should have board colors, the rest should have far-side color
		-Fix: when importing a board into the paste buffer, do not add the current board's layer stack on the buffer before the load - let the loaded board decide about its layers
		-Fix: when picking the color for drawing an object on a bound layer, pick the real color right from the config, not the layer's color - layer's color is 'infected' by side flips
		-Change: rewrite pcb_select_block() with rtrees so it can consider floaters
		-Cleanup: API in headers shall contain parameter names; remove useless doxygen comments and add shorter, but more useful plain C comments
		-Cleanup: disperse objects call doesn't rely on PCB
		-Cleanup: remove PCB-> references from data.[ch]] and from layer rename
		-Cleanup: remove code duplication in layer rename low and hight level
		-Del: get rid of vtptr in favor of stock genvector vtp0
		-Del: retire free_atexit() - rather depend on uninit functions
		-Update: Enable cycledrag in rubberband mode
		-Add: API for properly destroying a HID color cache (to let exporters plug memory leaks)
		-Add: Backup() action to force a backup - useful for testing dangerous actions
		-Add: HID config option for enforcing composite draw - requred by png photo mode
		-Add: Reset the rubberband before looking-up new rubber lines when cycle-dragging
		-Add: Support for rubberband when moving arc points
		-Add: crosshair snap: polygon center if the polygon is a terminal and the center point is within the polygon (center as in: bounding box center)
		-Add: data helper function that lists terminals within data
		-Add: data mirror optionally mirrors text (by sending text on the other side)
		-Add: disperse elements now works on subcircuits as well
		-Add: extend the menu key handling API to receive both the raw base key and the translated key character from the HID
		-Add: extend the wireframe line draw API so that it has an argument for square cap lines
		-Add: free-rotate-at-cursor call
		-Add: function to list objects by type and mask into a pointer vector
		-Add: generic, flat data iterator on the children of pcb_data_t
		-Add: import subc, not only element, when replacing existing elements
		-Add: loop_all and obj_any should include subc
		-Add: noclip version of the move operation on the basic object types
		-Add: operation for pure clipping (clearing or restoring poly) of the basic objects
		-Add: pass a flag to search-by-location to handle floaters; search code can pick floaters over subc
		-Add: pcb_data_bbox() can ignore floaters
		-Add: portable fileno() wrapper
		-Add: portable milisecond sleep API
		-Add: standard operation: free rotate (on all existing object types of the new model)
		-Add: text "flip side" is really a latent mirror - give it the usual y_offs so it works properly in subc mirroring
		-Add: when moving floaters, draw a xor-line back to the origin of the parent subc (emulates moving name of an element)
		-Add: optional per object color override

	[layer]
		-Fix: wrong pcb printf args on layer edit attributes window title build
		-Fix: when setting up all-layer bindings to a board, do only as many layers as the board really has and remember this number in new data
		-Fix: layer type lookup shouldn't crash on UI layers
		-Cleanup: remove global var PCB dependency
		-Cleanup: remove redundant bound/real .name fields, use a common .name field - both have names and the two fields used to be one the same address anyway
		-Cleanup: move grp to under meta.real - bound layers are not in groups
		-Del: old macro to determine if a layer is bound, using indirect data - depend on direct data
		-Add: copper layer group list cache for fast bbvia lookup
		-Add: central layer stack free function
		-Add: function to convert all layers of a pcb_data_t * to dangling bound layers using a reference layer stack

	[subc]
		-Fix: LoadFootprint() accepts subc as a footprint
		-Fix: always display the refdes in the top-left corner of the dashed subc outline, even if the view is flipped
		-Fix: crosshair object snap: subc origin should be snapped to
		-Fix: don't draw at every subc op, that slows down rat find
		-Fix: dup(): copy subc metadata (e.g. attributes) before copying layer data; some layer data, like text bounding box, does depend on this metadata
		-Fix: include the name of the layer in the error message when a subc layer can not be bound
		-Fix: instead of direct move, use 3 stage move: restore polys, move, clear polys (fixes Ade's and JG's bugreport about small smd resistor clipping bug)
		-Fix: keep track of whether a buffer is loaded from the outside or is from the board; when loaded from the outside, subc pasting is affected by current side, else side is kept (this fixes a decade old bg about element having to be put on solder or component side on the moment of load, not on the moment of paste)
		-Fix: poerply dup the name of layers on creating new subc layers when converting from buffer
		-Fix: subc load to buffer: list type correctness (subc list instead of element list)
		-Fix: swap side needs to modify the subc pointer (creating a new subc)
		-Fix: terminal rendering: use pixel based terminal layer mark size
		-Fix: update dyntext texts when parent subc attribute changes so that the new bbox is calculated
		-Fix: when a subc/term poly is copied, it should create its clearance
		-Fix: when find.c removes flags, it should recurse to subcircuits as subcircuits parts may be found too
		-Fix: when placing a subc on the solder side, the other-side part of the operation shall not be undoable, it's just part of the placement
		-Add: DRC silk min width considers arc
		-Add: Flip() on selected objects includes subcircuits
		-Add: action ElementList() can replace element to subc
		-Add: call to determine if a subc is on top or on bottom, using the aux layer
		-Add: call to send all selected subcircuits to the back side
		-Add: free rotate operation
		-Add: free rotate subc when rotating a buffer
		-Add: helper function for 90 deg subc rotation
		-Add: high level move() call
		-Add: implement DRC minimal silk width check for subcircuits
		-Add: implement nonetlist flag set (alt+n)
		-Add: implement undoable subc removal
		-Add: minimal silk width DRC violation: also select the offending lines
		-Add: prepare ElementList(), ElementSetAttr(), ElementList() for subcs
		-Add: preview draw function
		-Add: properly draw the xor-outline of the subc while visualising the buffer, even on the bottom side
		-Add: search subc by ID
		-Add: support for loose subc (in-place editing, ignoring the 'subc lock' for subc parts)
		-Add: the floater flag (and concept); buffer->subc conversion creates refdes text as a floater
		-Add: when loading a footprint as board (footprint editing), enable loose subc

	[term]
		-Fix: poly-poly clearance: consider all layers in the same (real) layer group
		-Fix: delayed label draw: do not draw layer object terminal ID on board if it's on the other side (mimicks the old pad behavior)
		-Fix: reset delayed label draw array after each succesful batch draw

	[thermal]
		-Add: poly thermal calculations
		-Add: line thermal calculations
		-Add: arc thermal calculations
		-Add: padstack thermal calculations

	[tool]
		-Split: tool implementtion from random parts of the code regrouped into per tool files
		-Add: function callback API for tools

	[doc]
		-Change: cut ties with gEDA
		-Add: minimal description of subcircuits in data model
		-Add: document padstacks and bbvia in data model
		-Update: current list of keys
		-Add: a note about explicit refresh in fp_wget
		-Add: document what's new in lihata v4
		-Add: explicit history section for 2016 and 2017

	[autocrop]
		-Add: move padstacks too
		-Add: move subcircuits

	[autoplace]
		-Add: handle subc and padstack and layer object terminals on connection mapping

	[brave]
		-Add: brave mode for testing new feautres (with dialog box)
		-Add: brave mode for "use padstack instead of via"

	[draw_csect]
		-Add: editable outline layer group

	[dsn]
		-Add: export subcircuits as parts (without terminals)

	[export_dsn]
		-Fix: missing layer name quoting
		-Fix: don't use g_free() on normal strdup()'d padstack strings
		-Add: export polygon based heavy terminals of subcs
		-Add: export subc pins

	[export_png]
		-Fix: photo mode mask broke because of lack of proper compositing; add basic compositing draw
		-Fix: force compositing draw in photo mode, as photo mode will try to combine the output layergroup by layergroup and non-compositing may merge multiple groups in a single session
		-Fix: properly draw darkish shadow for all internal/other-side copper layers in photo mode
		-Fix: always do the fr4 color bending, not only on 2 layer boards
		-Fix: free erase and im after finishing the export so that a new export won't inherit a potentially smaller image buffer; this fixes 'mask drawn too small'
		-Fix: memory leak - free all the large image buffers after finishing the export
		-Fix: memory leak on colors and brushes
		-Tune: photo mode mask shadow color

	[export_ps]
		-Fix: --ps-color got in a never-running part of the code after the composite layer rewrite
		-Fix: drawing drill holes
		-Fix: overflow in media size

	[export_svg]
		-Fix: implement missing fill_poly_offs - required for exporting padstacks

	[extedit]
		-Add: new plugin for external edit of subcircuits

	[fp_fs]
		-Fix: silently ignore .lht and .subc.lht suffix when matching unsuffixed footprint names so subcircuits are found

	[fp_wget]
		-Fix: broken string end comparison
		-Fix: if wget fails, remove the partial/empty download so thet cache doesn't get fooled by the file date

	[gtk]
		-Fix: use the proper function to destroy the command dialog.
		-Fix: proper toggling of plugins/hid_gtk/use_command_window conf. setting
		-Fix: display/hide the embedded command combo box, in fullscreen too.
		-Fix: proper management of timer avoids a GLib-CRITICAL
		-Fix: property editor preview: memcpy from the wrong layer stack
		-Fix: text scale change should get the status line redrawn
		-Fix: partial fix for non-US keyboard issue; introduce <char> in the menu files
		-Cleanup: use a generic status line update instead of many copies of the same function
		-Change: do not thin silk lines and arcs for element preview: this feature won't be available for subcircuits
		-Change: don't set termname on pins and pads when making the preview dialog so that later the copy can be avoided
		-Change: "element" preview upgraded to generic object preview so that it can display subcircuits too
		-Change: Full Screen button is now a smaller icon button.
		-Add: implement the attribute dialog widget hide/unhide API
		-Add: DAD set() can set the label on a button
		-Add: attempt to explain window geometry save error (after failing on a missing project or read-only user config)

	[hid]
		-Fix: in gtk, the only safe way to unwatch a file from a watch callback is using the return value; upgrade the HID API to support this usage of the callback return value; fixes subsequent calls of extedit
		-Cleanup: remove PCB_HATT_MIXED: we have PCB_HATT_COORD for the common case instead, and the uncommon case should be solved using a HBOX
		-Add: When drawing lines, treat negative width as pixels instead of world coordinates (marks/labels can be drawn in pixel widths)
		-Add: DAD boxed and tables are scrolled when the scroll flag is set
		-Add: new API for drawing a filled polygon with offset
		-Add: DAD interface for coord edit
		-Add: api for hiding/unhiding widgets on an attribute dialog
		-Add: DAD support for REAL fields
		-Add: DAD support for uninitialized dlg (to be used in structs, for non-modal support)
		-Add: attr dialog API adds a new argument for dialogs being modal (so that non-modal DAD dialogs are possible)
		-Add: event callback in the 3-stage DAD API; attribute dialog button event for window close

	[hid_gtk2_gl]
		-Fix: Zero length square capped lines were not drawn
		-Fix: GL HID was drawing far-side silk on top
		-Add: Draw local grid in GL hid

	[import_*]
		-Fix: cancel on import doesn't mean syntax error

	[import_hpgl]
		-Fix: use only as many layers as many pens are in use in the file; name the layers by pen number

	[import_sch]
		-Fix: proper subst in schematics path

	[io_eagle]
		-Fix: correctly parsing larger SMD pad dimensions.
		-Fix: Rectangle parsing now uses design rule ms_width, reduced code duplication
		-Fix: parse signal, element, symbol etc name fields as string, not Int
		-Fix: arc parsing for linetype 127
		-Fix: drill and diameter doubled as required for through hole pads/pins
		-Fix: netlist node names default to pin number if no name string found.
		-Fix: pathological arcs in binary format with start + delta
		-Fix: text on layer 51 now created on 21, and invalid element names '-' changed to 'HYPHEN' to fix netlist parsing
		-Fix: element name substitution if element name is '-' change to 'HYPHEN'
		-Add: post-processing to fix nested 'signal' nodes; smilie's missing wires are now being parsed.
		-Add: eagle binary netlist parsing/loading of 'element_name-pin_number' for given net
		-Add: using binary design rules values for mdWireWire, msWidth, rvPadTop, rvPadInner, rvPadBottom
		-Add: further clarification of requirements for lib/pkg pin/pad "name" retrieval for nets
		-Add: reinstate rendering of arcs on tDocu layers within elements, tested in v3 binary
		-Add: layers 51 (tDocu) and 52 (bDocu) supported as layers in top and bottom silk groups
		-Add: support for Eagle binary and XML library files (.lbr)
		-Add: read.c adds description, element given in library file, and NAME, VALUE to footprint generated
		-Add: support for loading dru parsing

	[io_kicad]
		-Fix: correct handling of (at X Y rot) rotation value for footprint padsw! in layouts
		-Add: support for title_block, and fixed premature module parse termination with unsupported fp_line layers

	[io_lihata]
		-Fix: when loading a subc, ignore floaters in bbox calculation
		-Fix: parse element does the same footprint search procedure as io_pcb does
		-Fix: don't attempt to close the footprint file when open failed
		-Fix: when loading polygon points, set X2 and Y2 to 0 to keep compatibility with the poly code assumptions - fixes random-jumping poly corners
		-Fix: respect the version the user request for saving a subc in, but bump it (and warn) if there are padstacks in the subc
		-Fix: when loading subc from file, parse the version separately and accept anything from v3 up
		-Fix: when loading subc as a board, make sure all polygons are clipped
		-Fix: memory leak: free error message string after load
		-Fix: memory leak: free() polygon point table cells before overwriting them
		-Fix: memory leak: macro parameter evaluation side effect caused multiple copies of whole subc subtrees never getting in the final document tree
		-Del: remove the hackish PCB swap - now that the layer code is PCB-safe
		-Add: lihata format v4, support for padstacks

	[lesstif]
		-Fix: Tool ghost is shown, now.
		-Add: DAD: implement the attribute dialog widget hide/unhide API, make sure hbox/vbox/table widgets are stored
		-Add: DAD: set() can set the label on a button
		-Add: DAD: support for non-modal attribute dialogs
		-Add: DAD: ok/cancel button callbacks on attribute dialogs

	[mincut]
		-Workaround: broken find.c returns rat point as rat line
		-Add: show a progress bar after 1+ second of mincut hunting; cancel should revert to dumb indication

	[polygon]
		-Fix: poly-poly clear and restore shall not run on polygons that are not part of a board (e.g. buffer polys)
		-Fix: bounding box calculation allows negative coordinates
		-Fix: recalculate bounding box after 90 deg rotation - simply rotating the box won't work because the box is 'closed' (increased by 1 on the bottom and right)
		-Fix: coord size assumptions
		-Fix: poly-poly clear: always execute ppclear and pprestore on a board layer
		-Fix: poly-clear-poly: if two clearing polys collide, the code shouldn't return error, that'd cause other, legit clearances to be omitted (there's no real poly z order)
		-Fix: undo/redo clearance asserts: high level poly code should not attempt to clear/restore polygons on pcb_data_t that is not the data of a board
		-Add: low level function to calculate whether a line interstects with a pline
		-Add: low level functions to efficiently determine whether a circle is within a polyline or corssing a polyline (or out of the polyline)
		-Add: helper functions to peek into the vectors for previous/next contour point without bumping the iterator
		-Add: inline helper function for setting up a polygon iterator on a polyarea
		-Add: low level polyarea move function

	[report]
		-Add: report unclipped poly area (using currently active unit)
		-Add: search padstacks for holes

	[rubberband_orig]
		-Fix: Rubberband lines with pins/pads didn't always work or could crash due to uninitialised variable
		-Fix: Don't create more than one rubberband object per line when checking polygon connections.
		-Add: Rubberband support for subc polygons
		-Add: Rubberband support for subc line terminals
		-Add: Rubberband support for subc arc terminals

	[scconfig]
		-Fix: unportected "." in regex made tool_lock.c look like a _l.c generating broken C compilation rules
		-Fix: libminuid should be compiled with the CFLAGS and LDFLAGS detected
		-Fix: map_plugins.sh warns for invalid default
		-Fix: map_plugins should sort deps for reproducible output
		-Fix: instead of guessing where to include opengl from, rely on the include prefix detected by scconfig
		-Add: define PCB_INLINE to simplify the code for static inline functions
		-Add: proper detection of fileno() - it's _fileno() on windows
		-Add: detect GLU if hid_gtk2_gl is to be compiled
		-Add: detect GLU and generate opengl.h accordingly

	[select]
		-Fix: missing case for box-near-check for element-text (made unselecting refdes hard)

	[shape]
		-Add: shape generator, with dialog box support

	[smartdisperse]
		-Fix: don't cast coord to long - coord may be wider
		-Add: handle subcircuits
		-Add: mark non-selected-visited should work on subc as well

	[undo]
		-Fix: a totally empty undo buffer is not an error, not even if serial==0 in this case
		-Fix: pcb_undo return value was not consistent, now it returns -1 on error and 0 on success

	[util]
		-Fix: keylist cleans up strings in the key column so "/" is properly displayed
		-Update: teach keylist to recognize <char> in key bindings
		-Update: gsch2pcb-rnd help text to reflect the new way the import works
		-Add: install fp2subc

pcb-rnd 1.2.6 (r11992)
~~~~~~~~~~~~~~~~~~~~~~
	[core]
		-API CHANGE: the attribute system requires unique keys per attribte list; this will keep things concistent as the code used to silently ignore redundant attributes
		-Fix: don't merge lines (when drawing extension of an existing line) if their clearance differs
		-Fix: pcb-printf: %mk really prints decimil and not some random "sane" unit
		-Fix: Mode(escape) should undo Note as well, so if the mouse button is still pressed there won't be a selection box after the release
		-Fix: select polygon only if the negative selection box really touches it
		-Fix: function pcb_is_arc_in_rectangle besides crossing, now checks if a whole arc is inside a rectangle
		-Fix: select arc only if the negative selection box really touches it
		-Fix: remove duplicate lists of "what flags this object type can have" - rather have a function that calculates it from the flag_str table and cache it
		-Fix: data bbox shouldn't improvize per object type but should depend on each object's bbox calculation function
		-Fix: don't change the ID when text is put on a layer - instead, invent the ID when the text is created (to prevent unintentional ID changes, e.g. on lihata load)
		-Fix: rotate line point relative to the passed rotation axis, not the line endpoint (fixes undo rotate bug)
		-Move: flag help text from doxygen comments to the struct so the code can use them
		-Add: attribute post value changed callback
		-Add: copy-back API in attrib that minimizes changes (helper for HIDs)
		-Add: new interpretation of clearance=0: same as if the clearline flag is not set
		-Add: Wireframe draw mode
		-Add: marker snap depends on config
		-Add: normalize() action for normalizing (clipping and moving into drawing area) data or the board
		-Add: pcb_subst_strdup() option for interpreting backslash sequences
		-Add: flagedit (accessible from the menu)

	[data]
		-Change: switch over from old default.pcb and implicit mask/paste layers to new, lihata based 2 and 4 layer defaults
		-Update: names in the desktop file, to pcb-rnd

	[dbus]
		-Del: retire this old, unused plugin

	[diag]
		-Add: integrity check: attribute list length
		-Add: formatted flag dump with new action dumpflag()

	[dialogs]
		-Add: new plugin for moving dialog boxes to
		-Add: flagedit dialog
		-Add: layer bindings dialog

	[doc]
		-Add: new composite render API documentation
		-Add: explain paste buffers
		-Add: refine indent recommendations
		-Add: alien format description: Koen's documentation on the hyp format
		-Add: minimal openscad documentation and an example model (for 1206)
		-Add: vendordrill plugin documentation
		-Add: document distalign
		-Add: document autocrop

	[draw_fontsel]
		-Add: replace font button

	[export_dxf]
		-Del: retire the old dxf code - will be rewritten from scratch
		-Add: new, lht based template for the base dxf as saved from librecad

	[export_png]
		-Change: switch over to the new composite HID API

	[export_ps]
		-Change: switch over ps output to the new composite API
		-Change: switch over eps to the new drawing mode API - eps is incompatible with composite layers (lack of features in the postscript language)
		-Fix: typo made composite layers empty
		-Fix: proper max val for calib - let x and y calib take values between 0 and 2
		-Fix: don't omit drill rings when drill helper is on
		-Fix: when drawing outline on a drill layer (forced by user option), turn off global.is_drill temporarily to get the right colors

	[export_svg]
		-Change: switch over to the new draw mode HID API
		-Fix: svg_rect() draws clipping properly
		-Add: disable photo mode for composite (they are incompatible)

	[font]
		-Add: be able to replace font in place
		-Add: be able to replace the default font, font #0

	[fp]
		-Add: accept footprint library search paths starting with '?' - means errors should be ignored
		-Change: default config won't emit error on missing library path ../pcblib and ~/pcblib

	[fp_fs]
		-Fix: don't segfault on tag-looking empty constructs (##) in fp-looking files

	[hid]
		-API CHANGE: new hid render API with better support for rendering composite layers groups
		-API CHANGE: new, Dynamic Attribute Dialog (DAD) API

	[hid_gtk2_gdk]
		-Update: Updated the GTK2 GTK HID to use the new HID API
		-Fix: preview expose saves/restores the base canvas properly so that preview renders don't mix with the main window's
		-Fix: typo: filled poly should make changes on the clip buffer when in composite draw
		-Change: replace the mask based composite drawing code with the new composite API
		-Cleanup: the pixel/clip naming conventions
		-Cleanup: reorder priv struct members to group available canvases and currently active drawing settings
		-Workaround: for the flashing subc border caused by xor draw in non-direct mode

	[hid_gtk2_gl]
		-Update: Updated the GTK2 GL HID to use the new HID API
		-Fix: Respect the fullpoly flag when drawing polygons. Draws all poly parts, not just the largest one when the
		-Fix: Poly islands within holes were not being drawn in fullpoly mode. Reordered the rendering operations so that
		-Fix: Layer stackup window upside down. The view matrix is now set for each layer group as well as at the

	[hid_lesstif]
		-Change: update the mask rendering code for the new composite API
		-Fix: make sure lesstif cli arg attributes are registered before arg parsing so that CLI args are accepted
		-Fix: save all pixmaps when drawing dialogs (fixes lesstif dialogs crashes)
		-Fix: swapped coordinates when panning in dialogs - pan works properly in dialogs even if the board is viewed from the solder side
		-Fix: set proper background color for preview dialogs
		-Fix: move blit-to-window code from SHOW_LEAVE to SHOW_DRAW (fixes dialog glitches at mouse events)
		-Fix: save main_pixmap instead of pixmap (fixes pinout preview dialog)
		-Fix: don't let scroll go too far from the board - avoids runtime lesstif warnings
		-Add: support for the new attribute dialog features

	[import_hpgl]
		-Add: libuhpgl, a mini-lib for parsing HPGL
		-Add: plugin to import lines and arcs from HPGL

	[intconn]
		-Fix: centralize the element-related so that pin-pad and pad-pin intconn would work too
		-Fix: short eval code used the wrong check for nonetlist flag indicating intconn jumpers with pins shorted
		-Fix: remove intconn from flags and make it a good old common struct field - for easier access and cleaner data structs; keep file format compatibility with .pcb, and lihata board v1 and v2
		-Fix: do not set ->intconn directly, set the attribute instead and let the attribute post hook set the struct field; this will preserve intconn as an attribute on save

	[io]
		-Add: set conf node rc/paths/design to the directory path of the current design; this can be used in paths as substitutions using $()
		-Fix: don't crash if the preferred IO plugin doesn't offer saving the footprint

	[io_eagle]
		-Fix: eagle layer 20 (dimension) [instead of 199 (contour)] now maps to pcb-rnd outline layer
		-Add: reading in round/square/octagon pin/via flags in binary. Padstacks required for long/rounded.
		-Add: support for rounded SMD pads. Pads now either square, or round. No roundrects possible yet

	[io_lihata]
		-Change: bump the priority of lihata v3 so it's the default save format now
		-Fix: dummy node should be created with the name the caller requested, not hardwired "attributes"
		-Fix: make sure to parse attributes after flags - attributes may effect flags
		-Fix: don't attempt to save attributes of bound layers - they have none
		-Fix: load the layer combination flag before doing the layer binding
		-Fix: persistent save shouldn't crash if an in-memory text node has NULL value, it should inhibit saving that node instead
		-Fix: always save layer's obejcts list, even if empty, so the persister can merge the lists
		-Add: be able to load a subc as a footprint for editing
		-Add: from version 3 save and load polygon clearance field
		-Add: write_element hook in the v3 format - save subcircuits

	[layer]
		-Change: default layer group names should contain _ instead of space because group names potentially end up in file names and we don't like space in file name
		-Change: default visibility turns off mask and paste layers - they are distractive 99% of the time
		-Fix: loading a pcb into the buffer should convert real layers to bound layers - that's the only way a buffer can work
		-Fix: update layer color cache on config change
		-Fix: single negative silk renders properly
		-Fix: don't consider a copper layer empty if it has only via/pin rings on it
		-Add: attribute edition of the current layer in the layer popup menu
		-Add: menu for buffer layer binding change

	[lib_polyhelp]
		-Add: PolyOffs() action that duplicates selected polygons with an offset on their size
		-Add: ToPoly() action that converts any group of objects to a polygon

	[mincut]
		-Fix: corner case segfault (reported by barjac)

	[openscad]
		-Del: retire the original openscad exporter; full rewrite follows
		-Add: rewrite from scratch; support board outline, silk, copper, mask and element models

	[poly]
		-Add: poly-poly clearance when CLEARPOLYPOLY is set

	[propedit]
		-Fix: display clearance as copper-to-copper gap width
		-Add: force absoltue numeric value with a # prefix - useful for arc angles, e.g. #-90 means "value -90" instead of "decrease current value by 90"

	[report]
		-Fix: use uniform terminology for Clearance and arc width
		-Add: subcircuit report

	[tests/rtt]
		-Fix: don't fail if convert(1) (and ImageMagick in general) is not installed
		-Fix: make clean removes out/*/*
		-Fix: when dealing with gerbers, don't ignore the drill (*.cnc) files
		-Fix: remove all nelma png files - not going to compare them
		-Move: validation helpers into a separate dir to reduce number of files in main dir
		-Add: composite silk test input

	[rubberband]
		-Update: Lines must be connected exactly by endpoints to other line endpoints to be considered for rubberbanding
		-Fix: rubber band keeps middle line dir now snaps to grid, undo works and fixed artifacts when moving line
		-Fix: Don't keep middle-line dir if the middle line is parallel to any of the rubber lines
		-Fix: keep middle-line dir would access the rubberband lines before it had established that there are at least 2 rubber lines. caused a crash

	[safe_fs]
		-Add: safe_fs API for wrapping all file and process access
		-Add: privisions for regex based rules to deny access
		-Add: API for opening a file with path substitution
		-Add: API for searching for a file to open recursively under a directory
		-Add: pcb_strdup_subst() can replace leading ~ with the user's HOME
		-Add: leading '?' in a search path means optional (don't throw error if doesn't exist)
		-Cleanup: unify the support of % and $() replacement in paths

	[scconfig]
		-Fix: BadWindow bug of hid_lesstif (force-order -lXm before -lXt)
		-Add: link-time error for using strcasecmp directly or bypassing safe_fs
		-Add: --force-all to override developer's decision whether a plugin is broken

	[subc]
		-Change: subc parent API change: don't return int but the parent subc - same for comparison, but more universally usable for other purposes
		-Fix: don't lose layer combining flag when copying subc from buffer to board
		-Fix: when loading subc into buffer, properly set up buffer offsets so that subc origin is the same as the buffer's origin
		-Fix: flip subc when placing on the bottom side
		-Add: subc terminals that interact with netlist
		-Add: understand the refdes attribute; print refdes on the subc layer
		-Add: gui action for editing attributes of a subc
		-Add: teach fp_fs to accept subcircuits as footpritns
		-Add: subcircuit build the layer binding dialog
		-Add: lock tool works on subc
		-Add: a subcircuit file can be open for editing, as a footprit file
		-Add: make sure element smash -> convert buffer to subc path preserves as many element features as possible
		-Add: poly-vs-poly clearance infra (required for subc terminals)

	[tests]
		-Update: conftest for the new conf_update API

	[text]
		-Add: new text flag: dynamic string in text (to permit % substitution)
		-Add: %a.parent.*% parent attribute subsitution

	[undo]
		-Cleanup: move undo action related call prototypes in a separate header to match the separate .c
		-Clenaup: move out slot field free code from the slot allocation code (slot allocation will be genealized)
		-Del: remove local undo list implementation, switch over to libuundo
		-Add: dynamic, variable size payload on allocation

	[util]
		-Add: bisect helper script
		-Add: menu2svg: draw the menu system using graphviz
		-Add: fp2subc: convert footprint from the old pcb format to subcircuit

	[vendordrill]
		-Fix: missing else made the loader think /drillmap is not a list
		-Fix: broken printout units; use %ml for mil instead of manual conversion
		-Fix: replace all %f with %ml for coordinate prints


pcb-rnd 1.2.5b (r10635+bakcports)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	- Fix: import pcb into paste buffer layer binding bug
	- Fix: gerber drill file units
	- Fix: RTT tests shouldn't fail if ImageMagick is not installed
	- Fix: execution bug fix (do not let action scripts load from board files)

pcb-rnd 1.2.4 (r10635)
~~~~~~~~~~~~~~~~~~~~~~
	[subc]
		-Fix: saving buffer elements shouldn't ever save layer data; introduce an explicit flag for indicating the element-only intention to the io_ plugins so they don't have to guess from buffer layer names
		-Fix: poly plow: don't attempt to plow thermal if we are not on a board (but in a buffer - because of dynamic layer bindings)
		-Fix: find.c lookup code works in line->poly, arc->poly and poly->poly directions
		-Fix: autoroute should look at the rtree, not at the lists, to determine (recursively) if a layer is empty
		-Fix: bboard uses rtree instead of list for determining if a layer is to be exported, because of subc
		-Fix: don't check buffer validity in core before save, but check it in each io plugin because validity depends on the format
		-Fix: RemoveList of undo shouldn't set data->parent to PCB, as it is really independent of the PCB
		-Add: subcircuit object
		-Add: data model: consistent implementation of parent object, for all existing data
		-Add: integrity() checks for global object direct parents (via, element)
		-Add: pcb_text_dup() for pasting subcircuit text
		-Add: pcb_poly_dup() so that subcircuit paste can copy polygons
		-Add: poly dup_at()
		-Add: dup_at() for atomic objects
		-Add: missing Rotate90 operation for polygons - required for canonical operations on subc
		-Add: dup() functions for vias
		-Split: move text's XORDraw out from crosshair.c so that it can be reused in subc drawing
		-Update: menu files: save buffer is elements or subcircuits; load element/subcircuit in file/import

	[core]
		-Fix: break up buffer elements used the same copper layer for both top and bottom pads (bisecting thanks to: miloh)
		-Fix: limit thermal flag value to the supported range
		-Fix: don't run export on an empty board: it's probably an user mistake and some of the exporters would crash anyway (reported by miloh)
		-Fix: line mirror should update bbox and rtree
		-Fix: pinvia mirror should update rtree and bbox
		-Fix: arc, line, pinvia and poly mirror won't segfault if rtree is NULL (typical for buffer)
		-Fix: remaining rats or finishing the rats is no warning, but info
		-Fix: pcb_trace() should use pcb_printf() for the pcb-specific types
		-Fix: preserve attributes on line/arc/text/poly dup/copy/move
		-Fix: when split a line/arc because of insert point, copy metadata from the old line segment to the new
		-Fix: don't lose via name, number and attributes on copy/move
		-Fix: find-by-obj shouldn't ignore pads
		-Fix: Arc intersection bug
		-Fix: arc polygon clearance bug: arc conversion to polygon broke if radius was smaller than clearance (resulted in broken end cap and self intersection); implement a more expensive but safe way to construct it from three objects - such small arcs are rare anyway
		-Fix: Moving cursor with keyboard allows now leaving snapped pin/pad
		-Fix: actions don't rely on implicit XY coords, run the GetXY() (explicit query for coords); makes a difference when called from many
		-Fix: draw pins'/pads' names above the silk layer
		-Fix: toggleview() shouldn't crash on no-arg
		-Fix: when converting a value with unit to coord, clamp the result to COORD_MAX (instead of overflow)
		-Fix: mirrored pins/pads numbers after board flip
		-Fix: clearance for odd shapes on square+octagon
		-Fix: polygon arc clearance drawing rounding error: make sure the last point of the outer arc approximation is drawn; also make sure end cap starts exactly where contour ends
		-Fix: proper rounding in arc endpoing calculation
		-Fix: text line rounding error
		-Add: PasteBuffer() action for moving selection instead of a copy&erase combo (it should keep the ID)
		-Add: pcb-printf: %mq support (generic, configurable quoted strings)
		-Add: rtree iterator
		-Add: y_offs option to all low level mirror functions
		-Add: low level pcb_data_t move function
		-Add: pcb_data_t normalizer (to fix up board-too-small and negative coords)
		-Add: DumpPluginDirs() action and --dump-plugindirs command line switch to ease debugging
		-Add: central UTC date print for the export strftime %c unification
		-Add: pin/via and pad hashing functions geared for padstacks (ignore coords and names)
		-Add: help function to make a net connection list starting from an arbitrary object
		-Add: poly contour coord map function that iterates over all islands and holes
		-Add: polygon contour loop helpers
		-Add: helper function to determine if a pline is rectangle or not
		-Add: configurable backup format
		-Add: close polygon hole by double click
		-Cleanup: arc, line, element, pad, pinvia, poly, rat, subc, text op function names unified

	[layer]
		-Fix: don't segfault on resolving a bound layer ID without binding, rather assert
		-Fix: compositing: the function that decides whether a group is compositing should only care about negative composites
		-Fix: fake composite draw: optimization that temporarily fixes the composite silk and paste missing select color bug for the most common cases
		-Fix: do the fake composite layer draw hack optimization only for renderers that explicitly enable it because it interferes with translucency (useful mostly for sw rendering)
		-Fix: layer group vs. layer confusion made pad->ratline jump in find.c impossible
		-Add: function to calculate the distance between two groups on the stack
		-Add: function to count layer groups of a given type stepping through the layer stack in a given direction
		-Add: when abstracting an intern copper layer, calculate the copper layer offset
		-Cleanup: rename to pcb_layergrp_* for type naming unification

	[build]
		-Update: move genht out of liblihata to get a flat project structure

	[lib_polyhelp]
		-Add: function to trace a poly contour, from within the poly, with lines
		-Add: function to print a pline as an animator script
		-Add: horizontal and vertical hatching
		-Add: generic poly contour/hatch action: PolyHatch()

	[diag]
		-Add: auto-integrity checks when enabled
		-Add: check the undo stack integrity as part of the global checks

	[boardflip]
		-Fix: make the on-solder toggle flag universal that affects not only elements but text (for mirroring)

	[dbus]
		-Change: mark the plugin deprecated

	[draw_fab]
		-Fix: drill size units depend on the units setting in gui

	[report]
		-Fix: broken tabs

	[export_xy]
		-Add: template based output formats
		-Add: templates for gxyrs, TM220A p&p, macrofab, KiCad .pos
		-Fix: use the central UTC print function instead of strftime %c
		-Fix: cookie should not be bom's

	[export_ps]
		-Fix: attribute leak on uninit
		-Fix: arc corner case: don't div with zero if width is 0
		-Fix: r=0 arc is a point
		-Fix: don't use %g for potentially large values, it will break the ps syntax with exponents

	[export_svg]
		-Fix: attribute leak on uninit
		-Fix: detect ellipitcal arcs and refuse to draw them
		-Fix: warn for elliptical arcs only once per gc (which is similar to once per export) to avoid flood of error messages
		-Fix: arc endpoint rounding bug; it is more portable and more reproducible to use pcb_round()

	[export_*, import_*]
		-Fix: use the central utc print function instead of strftime %c
		-Fix: import_tinycad memleak: free argc, argv after use by qparse
		-Fix: export_gerber: use pcb_author() instead of getting the user name directly to allow config override (all other exporters do this)
		-Fix: export_nelma: attribute leak on uninit
		-Fix: export_openscad: rounding errors
		-Fix: export_png: attribute leak on uninit
		-Add: config setting for default save fp format
		-Add: io_hyp: write .hyp files

	[io_eagle]
		-Fix: bottom side element rotation.
		-Fix: improved n*90 arc type parsing. non n*90 arcs still need work.
		-Fix: pad dimensions now being parsed
		-Add: infrastructure for abstracting the low level tree (xml vs. binary formats)
		-Add: parse the binary format
		-Add: "du" decimicron unit to unit.c and unit.h for eagle bin format

	[io_autotrax]
		- Add: read Protel autotrax/easytrax board files
		- Add: write Protel autotrax/easytrax board files

	[io_kicad]
		-Fix: ignore objects on unknown or unsupported layers with a bold warning, instead of returnning an error
		-Add: support for bleeding edge kicad 20170123 and (dimension ...) item on layouts
		-Add: infra for proper error reporting
		-Add: save: (descr "description") field to s-expression modules
		-Add: properly quote strings on save
		-Add: call the board normalizer after load because kicad accepts negative coords and we don't
		-Add: workaround for auto-creating In*.Cu layers - kicad seems to do the same

	[io_lihata]
		-Fix: when a .pcb backup file would be saved as .lht.lht.pcb, simplify it to .lht.pcb
		-Fix: starting from v2, save data's number-of-layers, not PCB's - subcircuits typically have less layers
		-Fix: reset fontkit and default font in parse_fontkit
		-Fix: remove backup save in .pcb as it has side effects that might change the board _before_ the lht save
		-Add: format version v3: subcircuits

	[io_pcb]
		-Fix: accept whitespace in read-check between pcb and bracket, element and bracket (so valid files are not refused)
		-Fix: make sure there's a top copper layer and a bottom copper layer when loading an .fp file directly
		-Fix: creating top and bottom copper should look up the layer group even in non-debug builds
		-Fix: free default font memory properly when parsing font from file
		-Fix: font reset mechanism for loading the (optional) font from a .pcb file and for loading a font from a font file; fixes double font load when the default font is changed

	[draw_csect]
		-Fix: never draw 0 thick lines, round them up to 1 nm; some exporters hate 0 thickness

	[font]
		-Fix: when moving a text without selection, draw the real outline, not the bounding box outline
		-Fix: generate the font change event after reading the new font, not before, so that the bounding boxes are calculated properly
		-Fix: generate the font change event with the right font ID
		-Fix: pcb_font_free() should free polygons and arcs of glyphs and clean the list items for reuse
		-Fix: don't overwrite valid loaded fonts' ID and don't free them after loading
		-Add: XORDrawText() draws the real outline of the text, not the bounding box

	[tests]
		-Fix: build error in uniq_name (genht moved)
		-Fix: orig: separate XY and bom testing; the plugin got split long ago
		-Fix: orig: uniq name for xy tests
		-Fix: orig: rename gerber3 reference layer file names to match the current stackup
		-Fix: orig: don't test bottom layer on gerber3: it's empty
		-Fix: conf and propedit test build: genht relocation
		-Del: don't set the fab user with a non-standard flag
		-Add: cli tester for pcb-printf %mq
		-Add: enable RTT by default

	[tests/RTT]
		-Fix: don't consider "can't export empty design" an error
		-Fix: reset search path for default.pcb so the embedded version is used even if there are others installed (to guarantee persistent IDs)
		-Fix: use compare(1) for bboard png comparison - different libpngs will result in different binary files
		-Fix: use explicit TEST author for testing the text drawn on some output
		-Fix: all-input/all-format test fails at the end if any test fails (but always attempts to run all tests)
		-Fix: run only those RTTs that have their plugins compiled
		-Del: remove the breadboard tests for now: these input don't make much sense in that context
		-Add: make clean removes everything from diff/ and out/
		-Add: export test: -v for verbose mode
		-Add: in verbose mode, print all test names that failed
		-Update: refs for the new padrot input and rounding error fixes
		-Update: RTT: gerber refs for drill rounding bug fix and composite layers on mask
		-Update: RTT: get gerber tests to export the csect

	[gtk]
		-Fix: lib_gtk_hid shouldn't use the plugin control of lib_gtk_common (for cflags and ldflags)
		-Fix: gl: composite layer stenciling
		-Fix: gl: Disable thin-draw poly filling in the GL gui to match other HIDs
		-Fix: board-preview sets board extents as drawing size for proper zoom
		-Fix: undo bug: when gtk needs to run a getxy loop, it shall save the undo serial because the button release event in core is going to restore it
		-Fix: route style crash on menu: get the menu updated when route styles change
		-Fix: do not hardwire the .fp extension when saving a footprint, rather use what the io_plugin recommends
		-Add: create tooltips for the mode buttons
		-Add: make the DRC dialog reentrant
		-Add: use the new fp save format conf setting to choose fp format we are going to use
		-Change: DRC dialog uses the preview widget instead of pixbuf (portability)

	[doc]
		-Add: pick and place and xy origin tutorial
		-Add: implicit outline/origin board example for the xy origin tutorial
		-Add: design files for via thermals and via shape styles
		-Add: outline the user facing doc about pcb-rnd data
		-Add: incomplete intro to the user data doc
		-Add: initial v1.2.3 action reference appendix page
		-Add: initial combined pcbfab/pcbCAD/pcb-rnd glossary
		-Add: initial external resources links page
		-Add: table of dialog behaviors
		-Add: developer doc about polygon internals
		-Update: bridges with 3 new io_; replace graphviz with aagraph
		-Update: developer/data.html for subcircuits


pcb-rnd 1.2.3 (r8962)
~~~~~~~~~~~~~~~~~~~~~
	[core]
		-Cleanup: start remove hardwired global var PCB, make the API take the board pointer as an argument
		-Del: board color cache - use the conf
		-Del: no need to set silk layer colors to special, draw.c will handle that
		-Fix: human readable error message before abort() on unknown hid attrib type on cli-to-attrib conversion
		-Fix: select element only if its silk layer is visible
		-Del: show_paste is not a config setting anymore - normal layer group visibility should apply
		-Fix: ElementList() shouldn't crash on empty footprint description (reported by Evan)
		-Fix: don't segfault whenloading the buffer fails (e.g. source is non-existing file name)

	[layer]
		-Add: compositing layer draw for mask, paste and silk; positive vs. negative, auto vs. manual flags per layer
		-Cleanup: have a generic, draw-callback based PCB_LYT_DIALOG instead of a layer dedicated for fontsel; this makes it easier to introduce new dialog box layers/previews without having to register new layers
		-Fix: uninit in layer_vis to remove events registered earlier
		-Change: new interpretation of the mask draw API in the HID API: it's the generic composite layer draw API
		-Add: EditLayer() and EditGroup actions for changing layer/group name and properites (+ dialog box)
		-Add: function to clean up old imports: mark all silk layers auto; used in io_pcb, io_kicad*, io_eagle, io_hyp
		-Cleanup: get rid of PCB->ElementOn in favor of a layer group based query
		-Del: remove old config items show_mask and show_paste, use the normal layer visibility mechanism should handle that
		-Split: split off LAYERVIS_CHANGED from the LAYERS_CHANGED event to provide a cheaper mechanism for the more common case
		-Add: SelectLayer(): central action
		-Add: low level group rename functions
		-Add: low level function to find a group by name
		-Add: low level group pointer -> ID converter function
		-Add: low level function to step a layer within a group +1 or -1 slot; insertion of new layers is interpreted in group context,not in logical layer context
		-Del: old layer move code: logical layer index is insignificant as layers are presented by group orders,no need to move layers on that list
		-Add: helper function for creating the mandantory silk layers
		-Add: ToggleView() can expand/collapse and vis/unvis all layers and groups
		-Add: hid_common function for building a layer menu, at least adding groups and layers
		-Fix: mark pcb changed when group properties are changed in EditGroup()
		-Fix: cross section draws "text-with-background" only on the GUI - most exporters won't be able to display this correctly, making the text unreadable

	[layersel]
		-Add: new layer selector in the top window; show layers per groups; collapse/expand groups
		-Add: right-click layer popup (also selects the pointed layer)
		-Add: layer property inidications similar to cross section view's: hatch for auto, thick border for negative

	[csect]
		-Add: properly indicate where the layer would be inserted within the group
		-Add: add/del/reorder logical layers within a layer group
		-Add: allow logical layers to be in the paste layer
		-Fix: allow all layers to show up on the csect drawing, not only copper layers
		-Add: open popup menu for groups and layers on right click
		-Add: draw_csect doesn't allow removing the last layer from a silk

	[eagle]
		-Fix: make sure both silk layers are set up even if the input file didn't specify them
		-Add: load and build polygons
		-Fix: make new lines and arcs clear by default
		-Add: use md_wire_wire for clearance values on lines and arcs
		-Fix: put multiple unsupported layers on silk
		-Add: proper element text placement and rotation

	[scconfig]
		-Fix: cquote generates C89-safe long strings using arrays - removes a lot of string-too-long warnings
		-Fix: use -ansi -pedantic for detections in --debug mode, so the same flags are used for detecting libs and compilation; this should fix the realpath bug reported by Ade
		-Fix: make sure realpath() gets its _DEFAULT_SOURCE when needed
		-Fix: -fPIC is optional: many C compilers don't support it

	[boardflip]
		-Fix: don't mirror element text unless had to move to the other side

	[export]
		-Fix: ps: proper plugin uninit
		-Fix: stat: don't use read-only string in default attribute val - the gtk gui tends to free() it
		-Fix: stat: user-input save metadata properly
		-Fix: stat: use 4-digit year in date, to avoid confusion
		-Fix: stat: wrong date format, should be iso (reported by Larry)

	[fp_board]
		-Add: load board as a footprint library

	[fp_fs]
		-Fix: always return error on fp mapping if topdir is not a directory - this how we give other fp_ implementations a chance to map those

	[gerber]
		-Fix: board larger than 214.7mm had a coord overflow in drill files with 32 bit coords (reported by Evan)

	[gtk]
		-Fix: pinout window size is 0 after opening
		-Change: propedit preview should use the preview infra instead of pixmap for forward portability
		-Change: menu: use hbox instead of the accel label hack copied from gschem
		-Fix: popup menu didn't work since r4248: action didn't consider the extra layer of (private) menu handle
		-Add: left-click on the layer selector widget pops up the layer popup
		-Fix: gdk should allow drawing the paste layer
		-Add: local widget_hide_all() implementation to work around gtk's wise decision to kill off everything that's simple
		-Fix: don't offer restoring factory default for layers, it's hard to tell what exactly we should do
		-Add: wt_preview can distinguish right click from pan
		-Add: esc in command window dialog closes the dialog
		-Fix: apply Chalres' patch about double command execution on esc
		-Fix: point-cursor-disappears-if-gpmi-enabled bug; move point_cursor logics from glue to in_mouse, make a permanent override and an explicit "set cursor to mode default" (mode set to -1) that also respects the override
		-Fix: command entry history upside-down + when number of commands is over the maximum in the history, properly delete the oldest, not the latest
		-Del: underscore menu mnemonics: no support for that hotkey mechanism in our menus anymore
		-Add: GL: annoying, bold warning about opengl not supporting composite layers

	[lesstif]
		-Fix: non-c89 initialization
		-Add: be able to show the paste layer
		-Add: remember both submenu widget and menu button in the lihata node's user_data when creating menus (so that it'll be possible to remove menus later)
		-Add: implement the remove menu HID call
		-Fix: remove flags[] entry when a checkbox menu is removed
		-Add: reuse empty wflags[] slots

	[io]
		-Fix: let io_ set Data->loader on pcb load; this gives the plugin a chance to make a decision depending on file content

	[io_hyp]
		-Change: enable the plugin by default

	[io_lihata]
		-Add: v2 writer makes a layer stack subtree; prefer v2 saver if version is unspecified
		-Fix: in-place upgrade from lihata board v1 to v2 (bypass the root mismatch error)
		-Fix: non-lht-board file overwrite: missing or mismatching root error means we need to do a fresh save, not merging but overwriting everything
		-Fix: when saving v1, make sure the 2 silk layers are at the end of the layer list - old code and the old format requires that

	[io_pcb]
		-Fix: when loading a footprint file, properly set up the mostly empty layer stack
		-Workaround: the total lack of reentrancy... assume fp fopen() may call Parse so initialize globals only after that call
		-Fix: swap layers so that silks are always at the end (required by old code and the format)

	[plugin]
		-Change: use puplug instead of the plugin system mostly inherited from mainline
		-Change: switch over from manual plugin listing to semi-automated when generating the tmpasm
		-Add: runtime plugin dependency handling: when a module is selected to be a plugin, its dependencies should be at least plugin (but don't need to be builtin)

	[png]
		-Update: new mask draw API; properly draw both positive and negative combinations
		-Fix: export non-axis-aligned square pads properly (numeric conversion bug turned those into random sized rectangles)
		-Add: photo-mask-colour options similar to mainline's.
		-Fix: draw mask layer in 'as shown' only if it's visible

	[polygon]
		-Fix: enable DEBUGP() in --debug so we get more detailed error messages
		-Fix: print animator script with proper coords on stderr instead of old pcb format lines when polygon asserts

	[ps]
		-Add: remember last set mask mode
		-Update: new layer mask API

	[route]
		-Add: Allow line-points to be moved using the route code which implements 45/90 mode. Disabled by default with config setting move_linepoint_uses_route
		-Fix: The 45/90 route rules were disabled if the rat layer was selected but editing other layers.
		-Fix: original line end point move should manage undo in the new code when route is turned off (bisecting credits: miloh & evan)
		-Fix: When moving a line-point would result in a 0 length line, the move operation was not applied.

	[rubberband]
		-Fix: Draw rat lines directly when rubberbanding to avoid 45/90 rules.
		-Fix: Rubberband with 45/90 route code failed if both ends of the line moved.
		-Fix: plugin uninit should remove events registered on init

	[svg]
		-Add: preparing for the new mask API: <defs> and <mask> sections for the mask
		-Update: new mask layer API: mask set/clear overrides color
		-Fix: use the "configured" mask color instead of hardwired red
		-Fix: missing else made the silk use copper color
		-Tune: "inner" layer shadow has no "3d" depth
		-Fix: mask rendering logics: always visible in photo mode, group visibility controls it in normal mode

	[util]
		-Del: gsch2pcb-rnd: method_pcb - please use method_import instead

	[tests]
		-Update: simple gsch2pcb-rnd test: switch from -m pcb to -m import
		-Update: pcbflags: there's no more showmask config setting
		-Fix: missing distance calculation function - link misc_util.o in propedit test

	[doc]
		-Update: core plugin howto for r8214
		-Fix: refine the 3-state wording in src_plugin's README
		-Update: mods3; work from pup files, ignore the READMEs
		-Update: plugin creation tutorial for the new plugin system
		-Add: explain autoload in the plugin doc
		-Add: mods3: generate plugin dep graph
		-Fix: html validation, typos (by Larry)
		-Update: model doc for layer compositing
		-Add: missing rosetta Makefile
		-Add: missing explanation for gpmi rosetta 90_clock
		-Add: bugreporting howto
		-Add: io_lihata: lihata board version history

pcb-rnd 1.2.2 (r8120)
~~~~~~~~~~~~~~~~~~~~~
	[font]
		-Add: multiple fonts: introduce the font kit concept; allow font objects to have a font id
		-Add: io_lihata support for multiple fonts
		-Add: io_lihata support for polygon and arc in font
		-Add: font selector GUI
		-Add: edit the current font, not font0, and throw an error if the current font is not accessible for some reason
		-Add: alternative default font with arcs, Herhey font

	[export]
		-Fix: ps: don't export zero-radius arc, it would end up writing "inf" after /0 (thanks to John for the bugreport and test file)
		-Fix: svg: don't export 0-radius arc
		-Fix: fidocadj: Fine tuned fidocadj text export angle, dimensions, placement
		-Add: gerber: exporting the cross section layer is optional

	[footprints]
		-Add: fp_wget: offline mode: wget the index only if enabled; GUI for manual update
		-Add: fp_wget: support for edakrill
		-Add: API CHANGE: the fp rehash function takes an optional pointer to the subtree to rehash; when NULL, rehash everything (as it did previously)
		-Change: don't merge all local file system trees into fs, keep them separate for less confusion

	[layer]
		-Fix: look up component and solder groups before placing a new rat on the GUI so the groups are placed right
		-Fix: move action doesn't let the user remove silk layers
		-Fix: removing a layer group removes all layers, including the second
		-Fix: obsolete direct PCB ref
		-Fix: when (re)moving layers, reparent the lists after memmove() to avoid broken parent pointers
		-Fix: buffer operations (mirror and paste): use the buffer's layer list only if it has one - when copying a simple object within the board, there won't be, use the boards' then
		-Cleanup: remove redundant pcb_layer_lookup_group() - use pcb_layer_get_group() instead
		-Del: old API, already unused: pcb_layer_create_old()
		-Del: macro PCB_LAYER_IS_EMPTY() to get the API simpler - just use the direct call, this also exposes the use of PCB in some calls
		-Del: macro pcb_max_group() -> not PCB-safe

	[core]
		-Fix: netlist add action shouldn't segfault on empty/NULL netname or pin name
		-Fix: convert buffer to element: buggy layer group handling (made solder-side objects disappear; thanks to Evan for reporting this)
		-Fix: move-selected undo bug: undo serial has to be increased after the paste
		-Fix: Don't add a via when switching to/from a non-copper layer during line creation
		-Fix: don't mess up the undo serial when moving an element to the other side from menu (reported by James)
		-Change: increase the layer limit to 38 for new io_ plugins
		-Change: move rectangle pad creation to a central function - more and more code depends on it
		-Add: export version, revision and main paths so that child processes (e.g. parametric footprints) have a chance to identify the installation

	[io]
		-Fix: io_lihata: assign unique ID to each polygon point loaded - fixes poly point move undo bug
		-Fix: io_kicad: parser now copes with absent gr_line thickness definitions
		-Fix: io_kicad: save fp in s-expression format
		-Fix: io_kicad: quote module name, as it may contain ()
		-Fix: io_pcb: do not load empty footprint into the buffer, it'd assert later (fixes: parametric footprint with broken params was leading to an assert in the preview)
		-Fix: io_pcb: force-rename outline and silk layers because the loader will detect them by name
		-Fix: io_lihata: accept trailing whitespace in boolean values
		-Fix: io_lihata: don't complain about fonts under io_err_inhibit
		-Add: io_kicad: eeschema import
		-Add: io_kicad: recognize layers Top and Bottom
		-Add: io_pcb: improvise a minimal usable layer group setup if there's no layer group string on the input (thanks to oskay for reporting this)
		-Add: tEDAx: netlist import
		-Add: tEDAx: footprint export
		-Add: tEDAx: footprint import
		-Add: mentor: plugin for importing edf netlist from Mentor Graphics Design Capture


	[rubberband & route]
		-Add: keep line direction of middle line segments (2 lines connected) in rubber band mode (patch by Luis de Arquer)
		-Add: Rubberband keep direction: Line being moved is constrained to keep direction on preview
		-Add: optional curved corners; alt+c and alt+shift+c in menu files to change route arc radius

	[gtk]
		-Fix: external command window segfault when reopen after a WM close
		-Fix: preferences dialog: proper refresh of widgets when changing the unit in top window while the sizes tab is open
		-Fix: fit in 800x600
		-Fix: cancel means NO when prompted for creating a new layout (updated ghid_prompt_for() for r7792)
		-Fix: don't change the mouse cursor in busy mode if the hid is not initialized (led to crash)
		-Fix: Display the proper pcb-rnd icon for top level windows.
		-Fix: preferences window: preserve correct tree view selection after Save.
		-Add: gl support
		-Add: optional gtk shift workaround for some broken mac+gtk stack
		-Add: detect if the user clicked on a parametric footprint and present a dialog box with its parameters
		-Add: gtk's attribute dialog can notify the caller about changes using an optional callback function
		-Add: global or selective refresh of libraries using the refresh button

	[lesstif]
		- double buffer preview

	[scconfig]
		-Fix: make clean removes sccbox.o
		-Fix: generate all files so that make dep works right even with disabled plugins
		-Cleanup: move out 60 kilobytes of optional junk from Makefile to Makefile.gendep: we may depend on make -f and variable passing if we already depend on gcc for make dep
		-Cleanup: move compile templates to scconfig/template
		-Cleanup: rename globals VERSION, REVISION and PACKAGE to have a PCB_ prefix to avoid name collisions

	[pcblib]
		-Add: auto generated --help for all parametrics

	[djopt]
		-Fix: uninitialized local vars (reported by miloh)

	[boardflip]
		-Change: rewrite the board flip plugin to be generic (flipping around X and/or Y, applying offsets)

	[pcblib]
		-Fix: unit conversion supports all suffixes the core supports


pcb-rnd 1.2.1 (r6916)
~~~~~~~~~~~~~~~~~~~~~
	[layer]
		-Cleanup: better layer group support; clear separation of physical and logical layers; real and explicit layer stack concept
		-Fix: remove silk and component and solder assumptuion from crosshair and search
		-Fix: auto enforce drc only on copper layers, remove silk assumption
		-Fix: autorouter refuses to route on outline; also remove silk assumptions
		-Fix: teardrop works only on copper layers
		-Add: cross-section view: an userfriendly, a common, HID-independent mechanism for layer group edit

	[random i/o and the ecosystem concept]
		-Add: export_fidocadj
		-Rewrite: import_dsn, proper parser
		-Add: import_ltspice
		-Add: import_mucs
		-Add: import_tinycad
		-Add: import_ltspice: parse a mentor netlist
		-Workaround: SVG: near-360 degree arcs break some of the rendering engines

	[core]
		-Add: accept # comments in action scripts
		-Add: self contained pcb-rnd executable: embedded font and default.pcb
		-Fix: Draw the correct pin/via shape when the SQUARE flag is set in thin-draw mode
		-Fix: NoHolesValid cache bit set bug that made silk polys disappear
		-Fix: do not attempt to calculate bbox of empty elements - throw an error instead and ignore the element (or even assert, in --debug)
		-Fix: don't depend on layer name for outline
		-Fix: don't let negative clearance happen
		-Fix: layer max assert off-by-1 - really allow 16 layers
		-Fix: polygon arc rounding error when drawing clearance around a pad
		-Fix: polygon drawn using the poly tool caused crash on save due to overwriting the list-administration when copying corsshair-poly to newly allocated layer poly
		-Fix: redraw after pin number/name change to get the change displayed
		-Fix: refuse to create attribute with NULL or empty name
		-Fix: remove arc endpoint should remove the arc, just like with lines
		-Fix: when deriving default file name of the board, don't truncate hardwired .pcb, try all io's file extensions until the first that is there

	[arc]
		-Fix: arc-in-box macro uses the real bounding box of arcs so an arc can be selected by a positive selection box just barely embedding it

	[doc]
		-Fix: html validation and cleanups

	[drc]
		-Add: Draw DRC outline of pads when enabled
		-Fix: Draw DRC outline when moving lines
		-Fix: Improve the drawing of the DRC outline around pins and vias
		-Fix: When moving an Arc, draw the DRC outline if enabled. Draw the Arc as an outline instead of thin
		-Fix: When moving vias, draw the DRC outline when enabled 

	[dynstyle]
		-Fix: when a new style is created, the gtk-side cache needs to be regenerated


	[export_gerber]
		-Add: copy hackvana extensions from mainline
		-Fix: eagle file suffix bug made top layer and bottom copper layer clash with top and bottom silk

	[export_png]
		-Fix: notice gc color and cap style changes and update the brush
		-Fix: properly draw corner case: full-circle arcs
		-Fix: scale rouding bugs
		-Fix: use gc for zero-length arcs too

	[gsch2pcb-rnd]
		-Fix: don't depend on scconfig objects, use pcb_concat() instead of str_concat()
		-Fix: stop fighting with src/ for compiling the src_3rd/ objects, just call src/ for doing that

	[hid_gtk]
		-Split: hid_gtk common parts into a lib (lib_gtk_common)
		-Fix: arc delta angle > 360 means full curcle, don't modulo
		-Fix: arc endpoint rounding error when drawing with gdk (reported by Evan)
		-Fix: don't run the netlist window if gtkhid is not yet active (batch mode)
		-Fix: set the right layer color when changing layer colors - store the context struct for each layer index separately (more memory leaks...)
		-Del: unused ghid_dialog_confirm_all() and ghid_dialog_confirm()
		-Del: utf8 dup string is not even used anywhere
		-Del: free_glist_and_data() is not in use, get rid of it
		-Del: dead code: ghid message dialog: we use the log now, that should be the only one way to inform the user
		-Del: unused abort functions
		-Del: gui-keyref dialog (outdated, hardwired, unaccessible)
		-Change: About dialog is more gtkish and uses the pcb-rnd logo
		-Change: disable mnemonics for main menus because mnemonics lets gtk steal our keyboard input

	[hid_lesstif]
		-Fix: arc delta angle > 360 is always a full circle, don't modulo
		-Fix: don't try to change cursor shape for being busy if the hid is not running
		-Fix: typo in the menu config for show_mask made solder mask unable to display

	[io_kicad]
		-Change: use the new, simpler layer creation API
		-Fix: refuse to use any negative layer
		-Fix: residual arc format parsing errors; homeomorphic linear mappings R us.
		-Fix: empty altium2kicad element definitions now imported with a 1nm line at the module centroid
		-Fix: fixed non cummutative symmetry operations when importing fp_arc and gr_arc elements
		-Fix: fixed off by one tree traversal error for polygonal zones
		-Add: Kicad supports arcs on the Edge.Cut layer, now implemented
		-Add: accept # comments when reading a KiCad s-expr file
		-Add: improved handling of SMD layer definitions board

	[io_lihata]
		-Fix: default output formatting (indentation bugs)
		-Fix: properly load the outline layer, even if it appears to be in group -1
		-Fix: translate the new, rich layer group table to the old, dummy format for saving v1

	[io_pcb]
		-Fix: don't attempt to save attrib with NULL value
		-Fix: layer number boundary check bug (the legacy +2)

	[poly]
		-Fix: poly clipped out of existence can come back without an assert
		-Fix: when priting 'cleared out of exitence' message, use mm for coords

	[res]
		-Add: all new importes in the import menu
		-Change: default file menu rearranged, import options grouped in a submenu to keep things simpler

	[rubberband]
		-Add: Support rubberbanding of lines attached to an arc
		-Fix: Allow both ends of a line to be included in a rubberband move

	[scconfig]
		-Add: detect and use -std=c99 if available, some versions of gcc doesn't go for that by default - we also want to avoid accidentally using extensions in C99 code
		-Add: detect cairo for the breadboard exporter
		-Fix: allow parallel build
		-Fix: mod CLEANFILES takes effect now
		-Fix: when compiling with --debug, display debug symbols as implicit-enabled in the summary

	[toporouter]
		-Del: remove toporouter and gts - we have better alternatives now


pcb-rnd 1.2.0 (r5967)
~~~~~~~~~~~~~~~~~~~~~
	[unravel]
		- Cleanup: reorganize the code around object types instead of the old, action-oriented approach
		- Cleanup: prefix almost all core symbols with pcb_ or PCB_ so the code can be reused as a lib later

	[doc]
		-Add: start writing a new user doc

	[arc]
		-Fix: broken is-point-on-arc check for large angles (thanks Evan for the bugreport)
		-Add: angle/radius edit UI

	[conf]
		-Fix: don't crash on empty project file
		-Fix: when creating a new project file root, use the geda project file hash, not the pcb-rnd-config node - the project file is shared among programs

	[gerber]
		-Fix: emulate 0 long arc with a 0 long line to work around a gerbv bug
		-Fix: simpler "do we print this layer?" logics, without caching
		-Workaround: split >180 deg arcs because some viewers (e.g. gerbv) have hard time interpreting them

	[gtk]
		-Fix: <custom> route style logics: start out with the copy of style 0; after a deletion inherit the sizes from the deleted style
		-Fix: don't reuse the static conf chg binding struct of fullscreen with solder side swap - it'll probably ruin both
		-Fix: update bottom status line after flipping the board

	[mods]
		-Move: drill.[ch] to the report plugin
		-Move: original rubberband code into a feature plugin
		-Cleanup: convert some GUI HID actions to events so that multiple GUIs can bind to them
		-Add: plugin frame for import_hyp
		-Add: remote plugin (HID-level remote control over sockets)
		-Add: draw_fab plugin behind a stub, move draw fab code from core to the new plugin
		-Add: new export plugin: export_stat (board statistics)

	[io]
		-Add: an extra flag bit to allow non-fatal loads; make sure missing default.pcb doesn't generate an error message
		-Add: proper handling of multiple file formats and file name extensions
		-Fix: add new test parse call - fixes false alarm parser error messages
		-Fix: don't change format on backup and tmp saves
		-Fix: don't throw the "no font" warnign after loading a footprint because footprints are expected not to have font embedded

	[io_kicad]
		- Save and load in the kicad s-expression format

	[io_lihata]
		-Fix: don't save invalid nodes in the canonical format (backup saves)
		-Add: (somewhat selectively) save and load the config subtree
		-Add: one more emergency save on lihata merge failure and verbose error message with instructions

	[layer]
		-Cleanup: convert magic number macros to enum
		-Cleanup: introduce layer id and layer group id types
		-Cleanup: more explicit virtual layers
		-Cleanup: remove the old layer API, including all the SL_ macros
		-Cleanup: renames and refactoring to make the logical layer vs. physical layer concept more clear
		-Split: move layer visibility (stack) functions out of layer.c
		-Rename: mask layer names: use top/bottom instead of component/solder for consistency
		-Add: UI layers (dynamic allocated debug layers with permanent objects)
		-Add: new layer name generator, based on flags and virtual layer names

	[pcblib-param]
		-Fix: don't lose pad thickness unit when calculating new defaults for qf()
		-Change: center pad of qf() is generated with no-paste (requested by John G)
		-Add: qf() center pad paste matrix option (requested by John G)
		-Add: qf() central pad mask option with cpad_mask; when not set, calculate it from pad geometry
		-Add: qf() got a new rpad_round boolean; when manually set to true, generates round pads

	[svg]
		-Fix: arc support: use the large and sweep flags of svg path arc to get true PCB arcs
		-Workaround: full circle arcs - the two endpoints should differ
		-Workaround: make endpoints differ in a 0 deg long arc

	[tests]
		-Cleanup: update and enable most of the tests, unified output, central make test

	[util]
		-Add: prj2lht: script to convert old projects to new
		-Fix: install the import schematics scm script in our own LIBDIR, because it's not reliable to find the gschem installation, rather use -L for gnetlist

	[scconfig]
		-Change: use $(MAKE) instead of make - this allows GNU make to run recursive parallel compilations (reported by Dima)
		-Change: disable bison by default; use --enable-bison for developing the grammar
		-Change: do not use gts for anything if toporouter is not configured
		-Add: extra error if explicitly requested things differ from the results we got
		-Add: make clean/distclean removes more scconfig related leftovers
		-Add: optional support for DESTDIR for Debian

	[core]
		-Fix: C89: do not depend on <strings.h> or strcasecmp, implement our own
		-Fix: HID API bug: invalidate_lr needs pcb_coord_t instead of int
		-Fix: action Netlist() subcommand add modifies the INPUT netlist, not the EDITED because this is used bu import_sch
		-Fix: attribute deletion by index didn't move all items properly (affects mainline as well)
		-Fix: disable cycledrag when rubberband is enabled (they are incompatible)
		-Fix: don't close a polygon twice on normal finish (fixes the excess need 3-point error message)
		-Fix: don't crash when a pin/pad number is NULL
		-Fix: don't warn for second hit on a plugin already loaded as long as the hash is the same
		-Fix: get rid of pointerlist in favor of vtptr
		-Fix: incorrect flag struct comparison; may have caused unpredictable undo bugs
		-Fix: line-line intersect code detects and handles the corner case of parallel lines properly (checking wheter endpoints of lines are on the other line)
		-Fix: make data bounding box function reentrant
		-Fix: make move macros safer with the standard do { } while(0) wrapping
		-Fix: make text, arc, line, pad, pin/via move macro safe: don't evaluate arguments twice, wrap in do {} while
		-Fix: move an object by 0 pixels shouldn't inhibit all subsequent redraw
		-Fix: negative selection box: limit box coord orders to two canonical forms, one positive, and one negative (fixes north-east to south-west selection on component-side view)
		-Fix: pin move is really the same thing as via move, use the same macro
		-Fix: polygon mirror should update the rtree (reported by Chad)
		-Fix: rename old, gui-hid-defined Export() actions to ExportGUI (matching the ImportGUI()) - Export() is the name of the builtin, core action
		-Fix: text rtree handling bug: EraseText should NOT have the side effect of removing the text from the rtree but the callers should do all rtree manipulation as needed
		-Fix: undo text flag bug: add text join undo as text flag change, not as line flag change
		-Fix: update rtree when mirroring arc in buffer
		-Fix: use COORD_MAX for large coord values, don't assume coords will be 32 bits
		-Fix: use the hid name passed with --gui, even if --gui is not the first argument; also allow using --hid instead of --gui (less confusing)
		-Fix: when snap off, don't crash when action helper is trying to figure the endpoint of an arc
		-Cleanup: classify all messages to be warnings, errors or info - no more PCB_MSG_DEFAULT
		-Cleanup: remove unsafe (non-reentrant) arc ends query
		-Add: --dump-plugins --dump-plugindirs CLI commands and DumpPlugins() and DumpPluginDirs() actions
		-Add: central Export() action instead of gui-specific ones - this works without a GUI HID
		-Add: conf setting to disable negative-box selection
		-Add: conf setting to make negative-box selection symmetric (ignore Y coord sign)
		-Add: support route style attributes


### NOTE: changelog for previous versions can be found in Changelog.* ###
