librnd 3.2.2 (r34506)
~~~~~~~~~~~~~~~~~~~~~
	[doc]
		-Add: comment on BSD make in INSTALL

	[gtk]
		-Fix: use compatibility color component conversion for determining crosshair color because component type and scaling differs between gtk2 and gtk4

	[gtk2]
		-Add: compatibility macro for converting color component to 0..1

	[gtk4]
		-Change: enable gtk4 plugin by default (but still prefer gtk2 if both gtk4 and gtk2 are available)
		-Add: compatibility macro for converting color component to 0..1

	[lib_exp_pixmap]
		-Add: extdep on libgd

	[lib_gtk_common]
		-Fix: missing gtk4_gl from the help text

	[lib_hid_common]
		-Fix: sensible default size for the export dialog

	[lib_hid_gl]
		-Fix: when real xor is not available (e.g. on VAO), use 1-clr for all r;g;b so that the base color is "inverted" like when xor is available

	[scconfig]
		-Fix: detect inline before making decisions based on it

librnd 3.2.1 (r34435)
~~~~~~~~~~~~~~~~~~~~~
	[build]
		-Fix: ./configure: fail early and cleanly if detection of cc fails
		-Add: use aru to create static link lib that can be extracted (no redundant file names)
		-Add: aru utility: wrapper around ar(1) to make object file names unique by temporary renames; this way "ar x" works on the resulting archive without overwriting output files

	[conf]
		-Fix: policy parsing bug: accept policy name even when followed by -prio so that subtree lookup for config merge doesn't fail with explicit prios (e.g. from conftest)

	[core]
		-Fix: exporting log: don't hardwire "ha:pcb-rnd-log-v1" for root node, use the app's package name
		-Fix: when listing GUI modules, also print builtins
		-Fix: potentially uninitialized memory in base64 encoder (may matter when encoding 0 bytes?)
		-Fix: missing stdio include for rnd_printf implementation (uses sprintf)

	[doc]
		-Add: custom pup field to indicate external dependencies of plugins
		-Add: packager's doc digest: inject external deps of core packages
		-Add: packager's doc: write a table of external dependencies per package

	[gtk]
		-Fix: make a list of all DAD dialogs open and close them on quit before closing down the GUI so they have a chance to uninit/free things
		-Fix: uninitialized scroll deltas in orthogonal direction of actual scroll in gtk2 mouse compat handler
		-Fix: safer empty command handler - just in case gtk entry query returns NULL (shouldn't)

	[irc]
		-Fix: don't print irc port number in hex in conn error message
		-Fix: don't crash when appending to non-existing GUI
		-Fix: always open the irc window after the connect button, even if the connection has failed - that's how the error message can be printed

	[lesstif]
		-Add: close all dialogs before exiting to give backing user code a chance to clean up
		-Fix: do not call the user's render callback from wt_preview while the dialog is being created because there's no dlg_hid_ctx yet

	[lib_exp_pixmap]
		-Add: standard draw pixmap call

	[lib_exp_text]
		-Fix: svg arc angles and endpoint transformations for y-flipped setup
		-Fix: svg arc center coord transformation should not be done before the 360 degree workaround because the workaround recurses and we need to pass untransformed coords
		-Fix: ps export: fill page option rounding error (calculate scale ratios with double division, not int division)

	[lib_gtk_common]
		-Fix: don't close a dialog after the wm has already closed it
		-Fix: do not close all dialogs before calling Quit() - Quit() may ask the user and decide to keep running

	[lib_hid_common]
		-Fix: uninitialized hash search result on pan auto placement
		-Fix: refresn preferences dialog conf tree and window tabs on board change (design change) so in a multi-design setup they always show the right config values

	[tests]
		-Fix: conf test make clean should remove all objects
		-Fix: conf test uses static linking, not assuming installation; do not link static .a files, extract them and link the .o files directly; this is a portable way to bypass the optimization that omitted symbols while linking the test executable making subsequent dlopen() fail when a plugin needed those symbols
		-Fix: missing stdio include in rnd_printf test
		-Fix: only make distclean should remove ./configure generated inc_all header in librnd test
		-Fix: use sccbox for creating the temporayr object unpack dir and most of the rm's as well for portability
		-Import: port pcb-rnd's conf test
		-Add: make test and make all for base64; run base64 test by default make test


librnd 3.2.0 (r34329)
~~~~~~~~~~~~~~~~~~~~~
	[API]
		-Add: libualloc is now part of the librnd API

	[conf]
		-Fix: conf_set: check array index only if target is not a list
		-Fix: conf_reset() should create valid project file root hash on project role
		-Add: optional hook for letting apps ignore config nodes
		-Add: comment explaining which design file name to pass to the function that calculates the project file name
		-Add: rnd_conf_load_as() accepts fn==NULL and creates a new empty lihata doc for the role
		-Add: event to indicate if a stand-alone config file has been written (useful for catching project file writes)
		-Add: helper function for copying shared confs/states (when creating a new design)
		-Add: temporary API for sch-rnd for multi-sheet support
		-Add: collect all the conf internal states in a struct for multi-support
		-Add: alloc/free/load/save config states (temporary multi-sheet support)
		-Split: conf field allocation from registration so it can be reused in temporary multisheet support

	[core]
		-Fix: don't hardwire pcb-rnd when setting up paths for app-specific plugin dirs and exec dir
		-Fix: main fungw context name is the app's name, not hardwire pcb-rnd
		-Fix: don't hardwire pcb-rnd in generic progress bar name
		-Fix: conf subsystem uses app's name instead of hardwired pcb-rnd for lihata node names ("file headers"), with an occassional fallback to the old pcb-rnd for backward compatibility
		-Fix: when searching for the policy-prio node upward, do not assume file starts with the config subtree; in a project file there is one more level
		-Fix: export attribute parsing: don't segfault on missing arg, report error
		-Fix: export parameter parser always reports error using rnd_message() and doesn't exit() but return -1 (just in case it's called from the GUI or an action)
		-Fix: export arg conversion: always check the result of numeric conversion and throw an error when failed
		-Fix: accept hid_ prefixed full plugin names for --gui/--hid
		-Fix: rnd_find_action() shouldn't crash but return NULL on non-action fungw functions (still fills in f_out)
		-Move: "ensure conf root" call from preferences dialog code to core - will be used by the window placement code as well
		-Add: rnd_ver_str, a compiled-in version for printing runtime ver
		-Split: rnd_message() into reusable parts so a more macro-friendly API variant can be provided later
		-Add: rnd_vmessage(): same as rnd_message() but gets vararg as va_list
		-Add: rnd_message(): error/warning shorthand functions without level in first arg (makes it easier for sch-rnd error reporting mechanism)
		-Add: helper function to determine exec prefix
		-Add: DAD API: macro to name panes - pane name will be used to remember pane position and restore (by window placement)
		-Add: events for saving/loading pane positions
		-Add: rnd_dirname() and rnd_dirname_real()
		-Add: if new rnd_app.multi_design is 1, allow multiple design file names on the command line
		-Add: generalize "find all gui plugins" code
		-Add: helper function to print all GUI hids available, to stderr (useful for --help invocation)
		-Add: gtk4_gl is somewhat safe by now, so --gui gtk should fall back on it if gtk2 is not available
		-Add: temporarily add 'k' as unit (1024*1000) for cschem until librnd 4.0.0 offers a more dynamic unit system for apps

	[dad]
		-Add: rnd_dad_preview_zoomto() corner case: if view is NULL, do not change zoom/pan, only redraw
		-Add: define pane name syntax
		-Add: name panes in librnd provided dialog boxes so their positions can be remembered
		-Add: RND_HATF_PRG_SMALL for getting progress bars small where needed
		-Add: tree widget: RND_HATF_TREE_NO_AUTOEXP to make "auto-expand/auto-collapse on row activation" optional

	[dialogs]
		-Fix: export dialog: set rnd_render to the exporter before calling do_export() - most exporters will depend on rnd_render when using GCs

	[doc]
		-Fix: action ref: Tool(): shouldn't list pcb-rnd-specific tool names
		-Fix: action ref: Tool(): stroke plugin is librnd's, not pcb-rnd's
		-Fix: remove pcb-rnd references and use generic language instead in action doc
		-Add: developer doc on multiple design capability

	[gtk]
		-Fix: pane is really realized only after the first resize is finished; delay size sets until that
		-Fix: when freeing pane widget data, use the right gtk widget for getting and setting the private pointer
		-Cleanup: remove "pcb-rnd" from windows-only gtk cache update message
		-Change: pane set while create: switch over from dynamic allocated timers to the central widget private data timer so that widget destroy can remove it
		-Add: prepare gtk panes to have a widget context struct to maintain timer states for reporting resizes
		-Add: paned: implement get pos timer
		-Add: generate event on pane geo change timer so the new pane position can be saved
		-Add: when a paned widget is destroyed while a get-timer is still running, force-emit the event after stopping the timer so the last known position is saved
		-Add: initial pane position setting, only when the widget is already realized, using the event query desired position (from the placement code at the moment)
		-Add: tighter window placement on gtk4: catch dialog map event and run the resizer there
		-Add: implement get_hidlib()
		-Add: respect rnd_hid_enable_per_dialog_hidlib in ->get_dad_hidlib()
		-Add: unexposed option for tracking original hidlib for local preview widgets
		-Add: implement RND_HATF_PRG_SMALL
		-Add: null set on tree table should remove cursor


	[hid]
		-Add: API: a call to query current hidlib from the GUI
		-Add: temporary multi-design support: rnd_hid_enable_per_dialog_hidlib for sch-rnd before 4.0.0

	[hid_batch]
		-Add: ->get_hidlib

	[import_pixmap_gd]
		-Import: plugin from pcb-rnd
		-Fix: disable the plugin if no gd is available
		-Update: use librnd gd config defines

	[import_pixmap_gnm]
		-Import: plugin from pcb-rnd

	[import_pixmap_pnm]
		-Add: enable the plugin

	[irc]
		-Fix: leave irc in OFF state after the window is close, even if the connection is closed in the process (so that a new window can be opened later)

	[lesstif]
		-Add: ->get_hidlib() implementation
		-Add: respect rnd_hid_enable_per_dialog_hidlib in ->get_dad_hidlib()
		-Add: implement RND_HATF_PRG_SMALL

	[lib_exp_pixmap]
		-Import: pcb-rnd's draw_png
		-Rename: png to pixmap - we are exporting to various formats
		-Add: save gd detection results in config.h and compile/install draw_pixmap

	[lib_exp_text]
		-Import: draw and media code from pcb-rnd
		-Cleanup: misleading internal API name: "pcb" really means "round cap" in librnd context
		-Add: spare fields in public structs
		-Add: install headers
		-Add: generic lpr hid lib for easy export_lpr implementation per app

	[lib_hid_common]
		-Import: export dialog from pcb-rnd
		-Fix: export dialog: refine the no-plugin-available message to better fit the printing case
		-Fix: typo caused direct saving window geometry to design or project didn't work (triggered save in user file)
		-Fix: fsd: remove cursor after dir change
		-Fix: dad() action: run_modal waits for the dialog to finish before returning
		-Split: preference's dialog "ensure conf root exists" call to a reusable, pref-dialog-independent call (will be needed by window placement code too)
		-Add: window placement code attemtps to load, store and save pane positions
		-Add: save known pane positions in window placement conf lihata subtrees
		-Add: react on pane pos set query event from the hash

	[lib_hid_gl]
		-Fix: grid color set function shall use the low level "draw" layer's set color instead of direct opengl call so it's portable (fixes gtk4 grid color problem)
		-Fix: restore grid color on compatibility mode gl (gtk2+gl)

	[scconfig]
		-Cleanup: switch over to /local/librnd where it's easy
		-Cleanup: rename more /pcb/ to /librnd/ in internals
		-Cleanup: remove old buildin init tab generation
		-Add: make rnd_hook_detect.h app subtree configurable
		-Fix: common args, like --debug or --symbols should use app's defined APP name instead of hardwired librnd
		-Fix: when an app plugin depends on an external (librnd) plugin and has to be changed to disable or plugin due to librnd plugin state, don't do it only on the plugin, but do it recursively to all other app plugins that depends on this app plugin as well for plugin state/dep consistency

	[script]
		-Fix: script dialog name should be librnd scripting, not pcb-rnd scripting, as all other ringdove apps have it too
		-Add: permanent scripts: accept librnd-perma-script-v1 as header (not only pcb-rnd can be scripted); prefer this header when creating the file; still accept pcb-rnd-perma-script-v1 for compatibility

	[tests]
		-Fix: librnd test program needs to set app package name, the conf subsystem relies on it

	[util]
		-Fix: replace \ with [] for more portable regex on "." for awk pkg format parser


librnd 3.1.2 (r34089)
~~~~~~~~~~~~~~~~~~~~~
	[build]
		-Fix: do not uninstall genht headers twice when libgenht is system installed (causes error)

	[core]
		-Fix: wrong comment on temp file name creation fallback
		-Fix: conf: when creating a new empty list, do not create an empty item in it
		-Fix: uninitialized local var caused segfault on error branch while creating project file

	[doc]
		-Fix: typo in -dev package desc in packaging doc

	[gtk]
		-Fix: opengl rendering: line/arc gc width needs to be determined at draw time, not at gc set time; the gc may be configured once, then subsequent zooming would change coords-per-pixel
		-Fix: framed hbox/vbox expand/fill in the right direction

	[gtk2]
		-Fix: make opengl preview widget contexts share textures with top window drawing area gl context - needed for preview showing the same pixmaps work correctly with the same cached texture IDs

	[gtk4]
		-Fix: make sure window destroy callback runs when window is closed from code
		-Fix: tree view: while destroying a tree widget, avoid triggering set cursor to NULL (there's no real cursor change)
		-Fix: more advanced setup to avoid double close callbacks caused by glib async signal mess
		-Fix: when setting initial preview zoom/pan to zoom_win, do not assume x1;y1 being 0;0

	[irc]
		-Fix: use app name instead of hardwiring pcb-rnd when saving the log

	[lib_hid_common]
		-Fix: when the preferences dialog is not active, do not attempt to refresh it from conf change callbacks
		-Fix: typo in win32-specific path handling of the new fileselect dialog
		-Fix: preferences config tree: save user config file or mark design changed if array type value changed

	[lib_hid_gl]
		-Fix: uninitialized gl version (on missing call)
		-Fix: refuse direct render backend on ES (where probably only vao would work)
		-Fix: opengl ES shader bugs: wrong name for texture2D() call, have to use "varying" instead of in/out for vertex->fragment communication, there's no f suffix for floats, use 3.0 for float comparison (thanks to Majenko)
		-Fix: vao init version check: accept anything >= 1.0 on ES , only desktop requires >=3.0
		-Add: on some ES versions there's no way to get the major version as an integer; try to parse it out from the version string

	[script]
		-Fix: one-liner shouldn't segfault if language engine is not found
		-Add: print info line to log if no installed scripting language would be found (no puplug dir set in fungw)

librnd 3.1.1 (r34045)
~~~~~~~~~~~~~~~~~~~~~
	[core]
		-Fix: conf system shouldn't throw error on shifting 0-length array for prepend
		-Fix: suppress error message on duplicate action and choose the app's action to keep for the actions that got moved from pcb-rnd to librnd at librnd 3.1.0; this is how librnd 3.1.1+ will work with old pcb-rnd executables
		-Fix: comment description of the dialog box geo change event: it means geometry _may_ have changed (gtk4 for exmaple will flood with unchanged geo on leave/enter)
		-Fix: set as many of the -c plugins/ before gui/export initialization as possible, but then try again the ones that didn't work after export/gui initialization: they may be export/gui conf nodes; for exmaple this allows setting opengl backend via -c even tho it is a hid_gtk_* plugin conf node
		-Fix: input handler makes event with hidlib (when hidlib is known)
		-Fix: provide a new set of key input handler calls to pass on hidlib to the event handler
		-Fix: DAD: wrong parameter name in comment about "tree row append under"

	[doc]
		-Add: developer doc: drawing on DAD widget and rendering path through HIDs and libs
		-Fix: packager's: remove $C from packages.html when not used
		-Fix: packager's doc: remove duplicate $PREFIC/lib/librnd3/scconfig from file listing

	[gtk]
		-Fix: remove gtkx cflags and ldflags: gtk2 plugins should use gtk2 flags, gtk4 plugins should use gtk4 flags so it is possible to compile both as plugins
		-Fix: hidgl_init() needs to be called on an existing gl context so it needs to wait until the widget is created
		-Fix: force-realize the new dialog after creation and iterate so that it is really created before returning so that the caller can manipulate widget states
		-Fix: dlg_attr* widget implementations should be dispatched to per-version gtk common instead of directly including global common - this gives the version dependent layer a chance to override or extend dad widget implementations without a maze of #ifdefs
		-Fix: hid glue: call backend uninit on pixmap uninit to get bakcend caches free'd
		-Fix: don't use gdk pixmap type directly in common code, gtk4 won't have it
		-Fix: don't call implementation-specific pixmap uninit if it is not available
		-Cleanup: use hidgl reset at the end of crosshair draw instead of low level gl xor mode setting
		-Cleanup: do not include stencil and opengl headers directly, everyhting shall go through hidgl.h
		-Cleanup: gtk2-gl shall not incldue opengl.h as no low level drawing is done
		-Cleanup: top window placement function name reflects its timing nature
		-Cleanup: gdkc_window_get_pointer() should have no return value (not used at caller)
		-Cleanup: compat API: unify calling convention on paned: pass GtkWidget and cast in compat
		-Cleanup: const correctness on gdk key query
		-Cleanup: move gtk2-only tree table keyboard workaround to the gtk2 layer so common code doesn't need #ifdefs on gtk version
		-Add: abstract drawing area type and class for the preview widget: in gtk2 it's a drawing area in gtk4 it's a GLarea
		-Add: preview opengl rendering creates new context with low level draw before first draw
		-Add: support for sparse grid in gtk2 and gtk4 opengl render
		-Add: bind gl texture free

	[gtk2]
		-Del: remove top window resize grip widget: it's not a natural gtk thing, it never made into lesstif or the gtk4 port and poll shows nobody would miss it anyway
		-Fix: missing include for preview context init
		-Fix: wrong order of hidgl init and new context calls in top window drawing area
		-Fix: correct "top-left" coords of pixmap rendering when flipped
		-Fix: flip (mirror) content of pixmap if displayed on flipped board
		-Fix: when rendering pixmap in composite rendering mode, also calculate and set clip
		-Fix: don't let global grid extend beyond the drawing area even if board is flipped
		-Add: uninit pixmap call that frees local transformed caches

	[gtk4]
		-Fix: do not scale color for transparency, it makes the output too light
		-Fix: window placement: window x;y needs to be queried separately because allocation is in window-coordinates
		-Fix: drawing area realized signal doesn't have a return value
		-Fix: make sure lib_gtk_common conf file is specified only once to avoid redundant Makefile rules generating the C version of the file
		-Fix: always declare gtkc_event_*
		-Fix: when acquiring x;y from a widget for a non-mouse event, convert surface coords into widget coords (fixes pcb-rnd "del key jumps crosshair away" bug)
		-Cleanup: remove xor color tuning from high level: in the vao backend we do not have real xor, only some blending cheat so color needs to be tuned locally
		-Cleanup: compiler warnings: missing cast on paned
		-Cleanup: remove scrollbar dead code
		-Cleanup: const correctness in css bg color set
		-Cleanup: realize/unrealize singals do have void * user data even if the code doesn't use it at the moment
		-Cleanup: rnd_gtk_tree_table_arrow_width() is gtk2-only
		-Cleanup: missing casts for top window custom scrollbar
		-Cleanup: wrong number of arguments for wt_preview singal callback
		-Workaround: gtk4 bug: GUI locks up if popup menu is not hidden before executing actions, e.g. in case of context menu inserting new layer
		-Add: call gl render
		-Add: port wt_preview compat to gtk_gl_area
		-Add: comment about popdown memleak and gui lockup
		-Add: top window and attribute dialog delayed placement because gtk4 is fighting it
		-Add: top win scrollbar widget: "jump here" when clicked outside of the slider

	[lesstif]
		-Fix: correct "top-left" coords of pixmap rendering when flipped
		-Fix: flip (mirror) content of pixmap if displayed on flipped board
		-Add: prepare the code for sparse grid (disable it for now as it's a gtk-only config node)

	[lib_hid_common]
		-Fix: preferences dialog: remove references to pcb-rnd from text printed on GUI

	[lib_hid_gl]
		-Cleanup: remove PRIM_MASK_* code from direct draw: all users got deleted between pcb-rnd 2.1.2 and 2.1.3 back in 2019
		-Split: original drawing backend into draw_direct and the API to draw.h to make room for alternate implementations
		-Cleanup: stencil calls to stencil_gl.[ch]
		-Cleanup: remove low level gl calls from anywhere else but backend code
		-Cleanup: rename colour to color - the codebase follows US English
		-Cleanup: functions with no arguments should be (void) in the low level draw API
		-Cleanup: do not use "static inline", it's not c89; use portable RND_INLINE instead
		-Cleanup: rename solid_rectangle to fillrect: shorter and more consistent with the codebase
		-Cleanup: rename texture_quad to textrect for consistency with other rect calls
		-Cleanup: rename "circular" cap drawing internals to be consistent with the rest of the code base: round cap
		-Cleanup: move stencil op reset from gtk gl to draw low level
		-Clenaup: view (translate+zoom) low level gl setup from gtk side to draw backend (new opengl does not have matrix transformations)
		-Cleanup: abstract push/pop matrix so that gtk doesn't need to do these with gl low level
		-Cleanup: disable a large chunk of dead code - seemingly some old stencil/mask draw code from before layer compositing
		-Cleanup: report error into the message log, not to stdout, when stencil bits are not available
		-Add: support for sparse grid
		-Add: hidgl_set_color() so that hids won't need to use low level draw .h directly
		-Add: error backend: in case no backend is available for rendering, print an error message and provide nop for all calls (better than a segf on NULL function ptr calls)
		-Add: vao backend for non-compat-mode opengl (gtk4), with ES and desktop shaders
		-Add: infrastructure for tracing opengl calls
		-Add: plugin configuration for backend selection logics
		-Add: stencil backends; config bools for disabling each stencil backend
		-Add: support for texture free (releases opengl texture name)

	[lohgid]
		-Fix: make_gc call-through should pass on delegatee hid instead of loghid's own hid - most GUI HIDs will store this pointer and make a check on USE_GC() to make sure no foreign gc is used and loghid would be considered foreign

	[scconfig]
		-Fix: lib_gtk_common is not compiled anymore, disable or depend on lib_gtk2_common and lib_gtk4_common
		-Fix: warn about missing lesstif only if the user explicitly requested it
		-Fix: warn about missing libstroke only if the stroke plugin is explicitly requested by the user
		-Fix: refine no-system-installed-fungw warning to tell it's librnd that needs to be reconfigured
		-Add: refine the gtk2+gl disable warning - opengl is much less generic than it seemed when that message was originally written: every version of gtk and probably every single HID using opengl will have different dependencies
		-Add: more accurate gtk2 vs. gtk4 warnings and notes for all combination of explicit and implicit requests
		-Add: more sophisticated gtk2 vs. gtk4 conflict resolvement: if the user expressed explicit interest in either version on the command line, prefer that one instead of the standard gtk2-over-gtk4 preference
		-Change: switch gtk4 from disable-all to disable so --all=plugin picks it up

	[script]
		-Fix: live script error message: request the user to system-install fungw (not necessarily from source) and reconfigure librnd, not pcb-rnd

librnd 3.1.0 (r33720)
~~~~~~~~~~~~~~~~~~~~~
	[build]
		-Fix: build all objects of gensexpr so that all headers can be installed
		-Fix: install the two missing headers in src_3rd genht
		-Add: install headers of gensexpr when the lib plugin is compiled

	[core]
		-Fix: typo in anyload declaration
		-Add: publish safe_fs rnd_file_stat() for efficient but portable access to multiple stat fields
		-Add: event for bootstrapping a board change from the lib (required for preferences window to mark the board changed when config on design role changes)
		-Add: mark some menu item fields obsolete and scheduled removal

	[dad]
		-Add: publish RND_DAD_SUBDIALOG so that dialg boxes can be build to include caller supplied subdialogs
		-Add: publish RND_DAD_STRING_SELECT_REGION so that dialog box code can force-select a region of string entries

	[diag_rnd]
		-Import: conf related diag actions from pcb-rnd so that all Ringdove apps have them
		-Import: finish importing diag actions by enabling the plugin and triggering ./configure from tab

	[doc]
		-Add: start documenting wayland specific GUI limitations

	[fsd]
		-Fix: don't segfault in shortcut saving if there's no app dotdir

	[gtk]
		-Split: win resize binding in two, because gtk2 prefers it before show() and gtk4 needs it after show()
		-Add: abstract GDK_MOD1_MASK: gtk4 renamed MOD1 to ALT
		-Add: abstract mouse cursor names (enum or char * or both) to compat layer because gtk4 does it differently
		-Add: internal xpm creation API to allow scaling later
		-Add: configuration node to control icon_scale - optional
		-Cleanup: replace ghid_ prefix with rnd_gtk_
		-Cleanup: replace rnd_hid_gtk_ prefix with rnd_gtk_
		-Cleanup: replace prefix with rnd_gtkg_ in glue API
		-Cleanup: remove _port_ from function names not dealing with ports directly
		-Cleanup: replace GHID_ prefix with RND_GTK_
		-Add: extend the doc to explain the source code split in lib_gtk_common
		-Del: drawing_area_size_allocate_cb() - it's a noop
		-Del: gtkc_widget_get_preferred_height() - no caller
		-Add: API to abstract drawing area configure event, installed on the top window's drawing area
		-Cleanup: rename the dwg resize compatibility event struct to a more generic xy event since it can be reused for mouse as well
		-Change: xy event delivers coords in long (strictly speaking: an int can be 16 bit)
		-Change: do the top window scroll wheel binding through the event xy wrapper for gtk4 compatibility
		-Change: extend the xy event call API to xyz so that mouse scroll wheel key modifiers can be passed back
		-Change: do the top window drawing area enter/leave events using compat.h (for gtk4 transition)
		-Change: do the top window drawing area mouse motion events using compat.h (for gtk4 transition)
		-Cleanup: remove gdk event type dependency from rnd_gtk_note_event_location() so it would work in gtk4 too
		-Change: generalize drawing area event setup, preparing for gtk4
		-Cleanup: switch over preview widget motion, scroll and resize from direct signal binding to compat binding for portability to gtk4
		-Change: do the preview drawing area mouse press/release events using compat.h (for gtk4 transition)
		-Add: generalize event setup so it can be reused independently of drawing widgets
		-Move: resize grip into a separate function; creation to compat layer since gtk4 likely won't have it
		-Move: resize grip xpm from gtk-common to gtk2-common; it won't be supported in gtk4 in any form
		-Move: resize grip: move out from gtk2 topwin - it's a large chunk of unrelated code and may be removed later
		-Update: "who did what" kind of historic banner to reflect changes made for pcb-rnd
		-Split: low level input singal connect/disconnect from common gtk to version-specific gtk as signal handling changed in gtk4
		-Cleanup: use compat layer for top window mouse press/release signals for gtk4 portability
		-Cleanup: figure and pass on modifier keys with mouse button press event from the compat layer so less version-dependent queries are made in gtk-common
		-Cleanup: use version-portable mouse press event for the get location loop
		-Add: compatibility layer for key press event handling
		-Cleanup: top window key presses go through the compatibility layer
		-Cleanup: use compat event bindings for location loop key events
		-Cleanup: switch over preview widget key handling to compat layer
		-Cleanup: bu_command uses the compat layer for key bindings
		-Split: move label wrapper for click bind to the compat layer, it works differently in gtk4
		-Add: compat API for tracking window size changes instead of gtk2-only configure event
		-Add: compat layer for window and widget destroy and delete signals
		-Cleanup: use compat layer for enter event on top window drawing area
		-Split: keyboard translation to gtk version generic and specific halves for gtk4 porting
		-Cleanup: strict match event callback function signature with (void *) user data
		-Cleanup: reclassify private bu_menu functions to static
		-Del: unused rnd_gtk_create_menu_widget_path()
		-Del: remove accel group support from bu_menu: we are not using menu accel for hotkey handline
		-Del: unused action group from global gtk state (we took away hotkey handling from gtk long ago)
		-Cleanup: menu API: don't depend on the custom menu type, pass GtkWidget (gtk4 will use a different widget)
		-Cleanup: move custom menu widget implementation into the .c file to make it private and remove it from the API; gtk4 will not need it
		-Cleanup: move menu toggle callback to private as the glue code always called it with one specific implementation; this removes GtkAction from the API (which is really an internal implementation detail and gtk4 doesn't have)
		-Cleanup: bu_menu: move API doc from .c to .h
		-Cleanup: bu_menu: mark all private functions static
		-Move: bu_menu to lib_gtk2_common - it will be a totally different implementation for gtk4
		-Add: abstract GdkCursorType into compat.h because it's changed in gtk4
		-Move: adjustment tune from ui_zoompan to the compat layer as it has to be done differently in gtk4
		-Add: abstract entry set/get into the compat layer because gtk4 changed the API
		-Add: abstract gtk_entry_set_width_chars() into the compat layer because gtk4 made this more complicated too
		-Del: gtkc_widget_add_class_style() - only the gtk3 port depended on it
		-Split: RND_GTK_KEY() into a gtk2 and a gtk4 variant; only gtk2 needs scconfig detection on this
		-Add: compatibility call for widget background color set - gtk4 doesn't have this (maybe we will need to use css)
		-Add: port wrap-click-bind on labels and picture boxes to use the centralized signal handler macros isntead of manual bindings so they will work with gtk4
		-Cleanup: get rid of end-packing, always use start-packing (in preparation of packing abstraction needed for gtk4)
		-Add: compat API for packing widgets; switch over from gtk2/gtk3 API to the compat API for packing widgets
		-Cleanup: use compat rnd_gtk_color_t instead of GdkColor
		-Add: compat API for frame-set-child
		-Cleanup: use compat api for setting frame child when creating top window
		-Add: abstract creating scrolled windows (gtk2 requires 2 args, gtk4 requires no arg)
		-Add: abstract "get entry widget from combo-box-with-entry" into compat.h because gtk4 does this differently
		-Add: abstract adding a child to a scrolled window - gtk4 requires a specific call for it
		-Add: disable gtk2-specific tree-table workarounds for other versions of gtk
		-Add: abstract tree-table key press binding, event forwarding included
		-Fix: tree table key handler: use librnd's control key modifier to check if control is pressed for ctrl+c
		-Add: abstract copy-text-to-clipboard into compat
		-Add: abstract button child set for picture buttons
		-Add: abstract gtk window destroy: in gtk2 it's widget destroy, in gtk4 a specific window destroy call
		-Add: abstract packing paned children into compat (as gtk4 changed the functions slightly)
		-Add: dad label creation API because truncated/rotated labels are different in gtk4
		-Add: abstract window set id to compat because gtk4 doesn't have it
		-Add: abstract window resize and move - gtk4 has removed this API because of wayland
		-Add: abstract "add main vbox in the content area of a dialog box" mechanism into compat; gtk4 needs different packing
		-Add: abstract show_all(), gtk4 doesn't have that
		-Add: abstract run dialog because gtk4 doesn't have it
		-Move: old, gtk2-only, native gtk file selector from gtk common to gtk2 common - gtk4 won't have a native version at all
		-Add: abstract widget destroy (gtk4 doesn't have it)
		-Add: abstract waiting for destroy events to get delivered (gtk4 removed APIs)
		-Cleanup: move top bar theming to compat layer, hopefully gtk4 can implement it as a no-op
		-Add: abstract gtk_main_quit() (gtk4 removed the API)
		-Add: abstract button set image (not present in gtk4)
		-Add: abstract top window set child (gtk4 doesn't have containers)
		-Cleanup: replace event box with a plain box and remove container based population of it in the top window upper bar - the event box was used earlier to a theme-update trick that was disabled years ago because of risk of unreproduciable crash
		-Add: abstract box that is created only for setting the background color - in gtk2 it was an event box, but there's no such thing in gtk4
		-Cleanup: use compat layer for background color modification in top window alert section
		-Add: abstract widget set focusable
		-Add: abstract scrollbar creation for gtk4 API change
		-Add: abstract left ptr named mouse cursor
		-Add: abstract custom mouse cursor index-to-shape conversion because shape type differs between gtk2 and gtk4
		-Cleanup: remove long unused mouse cursor name defs
		-Add: abstract setting custom mouse cursor call
		-Add: abstract widget-set-cursor
		-Add: abstract cursor warp - gtk4 doesn't have that API because of their bondage&discipline approach
		-Add: abstract wt preview redraw (invalidate)
		-Fix: preview widget: use compat layer for making the widget focusable
		-Add: abstract one more level of preview expose event as it's very different in gtk4
		-Add: abstract main and quit because gtk4 had to change the API on this too
		-Add: abstract parse arguments callback: gtk app initialization changed in gtk4
		-Add: abstract low level top window creation call, gtk4 has it differently
		-Add: abstract window origin query
		-Move: top window drawing update to compat layer as gtk4 changed render mechanism
		-Change: get_origin abstraction: pass on a widget, not a window, let the version-dependent backend figure how to get the window for that
		-Add: abstract clipboard get text, it's going to be different in gtk4
		-Add: abstract beep
		-Add: abstract explicit iterate call
		-Add: abstract benchmark (gtk4 needs to do flushes differently)
		-Add: abstract opening popup menus
		-Add: abstract mod1 mask apple fix - gtk4 likely won't need it
		-Add: abstract checkbutton set
		-Add: abstract check button signal name
		-Add: abstract check button get
		-Add: abstract setting scrollbar value - gtk4 doesn't have "range" for adjustment
		-Add: abstract scrollbar getvalue
		-Cleanup: rename adj to scb because our internal API is about scrollbars, adjustment is just the gtk2 implementation
		-Fix: zoom adjustment compat API: expect a scrollbar because gtk4 won't have ranges
		-Add: workaround button minimal size and image border (in gtk4) for image buttons
		-Fix: when adding dock box (not frame), don't make it expand: the main drawing area should take all extra space
		-Fix: pack attribute dialog widgets with alignment 'start' instead of 'fill' in the non-expfill direction to match DAD alignment expectations
		-Move: gtk gl common code from gtk2 gl hid to lib_gtk_common so that it is available for gtk4 as well
		-Fix: don't include gtk2-specific header in common code
		-Cleanup: don't hardwire gtk2_gl where hid is easily available
		-Fix: remove gtk2_gl direct reference where it can be avoided
		-Cleanup: remove gtk2 hid hardwirings from the common gtk gl code
		-Move: color-to-name function from common to gtk-version-specific plugin as color type changed from gtk2 to gtk4
		-Add: abstract the whole scrollbar+adjustment creation code from top-dialog - gtk4 needs it differently to work around yet another gtk4 bug
		-Change: generalize rnd_gtk_menu_widget() into rnd_gtk_menu_popup_pre(); in gtk4 it won't return a widget as popup widgets are not yet created
		-Fix: port color literal (gtk2 uses 16 bit int, gtk4 uses float 0..1)
		-Add: unify top window scrollbar thickness on default theme
		-Fix: use portable check button get active in DAD code for bools
		-Fix: symmetric keyboard unbinding macro for gtk4 event controller
		-Fix: symmetric mouse button unbinding macro for gtk4 event controller
		-Fix: symmetric gtk window destroy unbinding macro for gtk4 event controller
		-Add: set paned position on widget creation: workaround for async widget creation (gtk4)

	[hid]
		-Add: rnd_hid_fileselect(), wrapper aroud hid->fileselect that long term will obsolete hid->fileselect()
		-Cleanup: move hid->fileselect() description comment to rnd_hid_fileselect() and mark hid->fileselect() obsolete
		-Cleanup: use rnd_hid_fileselect() instead of direct hid call

	[hid_gtk2_gl]
		-Fix: uninitialize menu on exit
		-Del: long unused subcomposite start/end calls
		-Del: remove long unused dummy functions for line cap angle and faded color
		-Cleanup: split up main and preview expose gl code, move out the common gl context initialization code into a separate function (removes code dup)
		-Cleanup: remove unused variable from crosshair rendering
		-Change: crosshair draw function replaced interactive gl functions with vertex array
		-Change: draw the background using vertex array instead of interactive GL functions
		-Change: ghid_gl_draw_bg_solid_color() shouldn't take hidlib but x1,y1, x2,y2 because it's a generic low level gl rectangle draw function really
		-Split: preview expose code into a gtk2 specific and a common (zoom-setup + gl draw) part
		-Split: gtk2-specific code from common gtk-gl code
		-Add: comment to explain why ghid_gl_set_line_cap() is empty

	[lib_hid_common]
		-Import: generic part of preferences window, including the last four tabs from pcb-rnd so thye are available in all ringdove apps
		-Cleanup: remove the temporary Rnd_ prefixes, use rnd_ for the public API
		-Fix: preferences: do the initialization with 0 app specific tabs on the first call to Preferences() action if the app did not initialize - this makes it easier and safer to use preferences dialogs for simple apps that don't have specific preferences tabs

	[lib_hid_gl]
		-Change: replace GL_QUADS with GL_TRIANGLE_FAN since GL_QUADS is deprecated
		-Change: direct-draw a rectangle using vertex array instead of interactive GL functions
		-Move: expose init and Z_NEAR from lib_gtk2_gl (this is generic gl utility code useful for any gl rendering)
		-Move: background filled rectangle draw function from gtk2_gl
		-Cleanup: use line cap enum type for line end cap instead of int to make the API self-documenting
		-Cleanup: prefix Z_NEAR to avoid namespace pollution
		-Split: low level crosshair draw moved to generic gl draw code - it would be used independently of the toolkit

	[scconfig]
		-Add: include full version string in config.h so apps can print it for easier debugging
		-Add: explicit variable for libarchdir in librnd.mak
		-Add: gtk4 detection logic
		-Fix: don't let both gtk2 and gtk4 configured as builtin; porefer gtk2 over gtk4 for now


librnd 3.0.2 (r33224)
~~~~~~~~~~~~~~~~~~~~~
	[core]
		-Fix: don't crash on NULL string in rnd_conf_print_native_field() (ConfDump() action)

	[dad]
		-Add: HATT for subdialog: allows a DAD dialog to place a subdialog in the widget tree (subdialog typically received from the caller)
		-Add: assert on subdialog can not be set()
		-Add: new, DAD based file selection dialog (default on all HIDs)

	[doc]
		-Add: user manual for the new fsd
		-Add: define what exactly the CHANGE_CB does for a tree

	[gtk]
		-Cleanup: util_watch doesn't depend on in_mouse
		-Fix: tree table: add the tree view widget directly in the scrolled window so they can interact; this way moving the cursor will automatically update scroll
		-Fix: do not omit tree table when RND_HATF_SCROLL is not set (did not set wltop)
		-Fix: uninitialized pixels in custom mouse cursor imported from xbm smaller than 24x24
		-Fix: DAD tree click release should stop gtk from double-opening the given subtree
		-Fix: more robust fix for subtree expand when the arrow is clicked: let gtk handle the arrow
		-Fix: tree table enter_cb is called only on double click or enter on a row
		-Add: implement the subdialog HATT
		-Add: implement internal DAD API for widget poke: entry selection

	[gtk4]
		-Del: comment referring to gtk3
		-Del: trunc_text custom widget for gtk3 - there's a different one for gtk4
		-Add: mark rules-hint not to be used with gtk4

	[hid]
		-Fix: describe what really rnd_hid_fsd_flags_t fields do (most of them are deprecated and have no effect)
		-Add: mark RND_HID_FSD_IS_TEMPLATE obsolete and schedule removal
		-Add: fileselect descr argument is not really used at the moment
		-Add: API for optional DAD widget poke

	[hid_gtk2_gl]
		-Fix: gdk_color_parse() doesn't handle alpha, remove it when it is present in the input color string

	[lesstif]
		-Fix: remember if popup is open and don't lose get_xy coords (crosshair coords) so that actions triggered from the right context popup won't ask for new coords
		-Fix: close the popup menu when an item is selected and mark the popup inactive after the corresponding action finished
		-Fix: tree table: call DAD CHANGE_CB on enter pressed
		-Fix: tree table: double click on entry should call change cb
		-Fix: memory handling error on HATT_STRING set()
		-Add: HATT_SUBDIALOG implementation

	[lib_hid_common]
		-Import: plus and minus xpm's from pcb-rnd (layer selector)

	[scconfig]
		-Fix: do not accept lesstif installation if it doesn't have XmEXTERNAL_HIGHLIGHT (required for picture buttons and toggle buttons)

	[script]
		-Fix: use the 'selected' callback instead of the 'changed' callback for DAD_TREE() because the API around 'changed' is not clear

librnd 3.0.1 (r32954)
~~~~~~~~~~~~~~~~~~~~~
	[build]
		-Fix: running 'make' in any plugin changes to the right source directory to rebuild that plugin

	[core]
		-Fix: change internal GUI HID load mechanism: do not autoload HID plugins, but try to selectively load only the ones that are requested by the user or preferences; when there is absolutely no preference, load them all, but make sure to load lesstif first because it is broken and order of -lXm and -lXt matters even in dynamic linking

	[dad]
		-Fix: coord spin: print values to at most 6 decimal digits to reduce rounding errors

	[doc]
		-Add: link edakrill from the -rnd box
		-Add: mention genht and fungw in INSTALL for extended user scripting

	[gtk_common]
		-Fix: implicit declaration of tool function in dlg_topwin

	[hid]
		-Fix: don't ever fall back to automatically pick a GUI hid if it's marked hidden

	[lib_gtk_common]
		-Fix: implicit declaration of tool calls in bu_menu
		-Add: center view after the initial zoom-to-extent

	[lib_hid_common]
		-Fix: Zoom() without arguments is "auto zoom" which should zoom to extent _and_ center (pan)

	[loghid]
		-Fix: do not let loghid hook itself (would lead to infinite loop)
		-Fix: sanity check on all loghid calls to avoid infinite loop (loghid calling loghid)
		-Fix: mark loghid's GUI sniffer hidden so it's never picked up as default/fallback HID

	[poly]
		-Fix: excess semicolon ruined strict C89 validity

	[scconfig]
		-Cleanup: const correctness: don't make char * const if it's malloc'd and free'd

	[tests]
		-Fix: don't mind if some files are already removed in make clean's make uninstall of the local librnd installation


librnd 3.0.0 (r32916)
~~~~~~~~~~~~~~~~~~~~~
	[action]
		-Add: API CHANGE: introduce RND_APP_PREFIX() for RND_ACT_FAIL() and other ACT macros to know the host application namespace prefix
		-Cleanup: rename from pcb_act* prefix to rnd_act* prefix for clarity and namespace

	[anyload]
		-Add: spare fields

	[conf]
		-Fix: don't crash if native node is queried before the hash is initialized
		-Fix: don't crash if app didn't specify user conf dir
		-Fix: conf ignores should be coming from the app using rnd_app.*, not hardwired in librnd
		-Cleanup: rename pcb_conf_merge_all to rnd_conf_merge_all to keep namespace clean
		-Cleanup: API CHANGE: rename RND_CFR_DEFAULTPCB to RND_CFR_DEFAULTDSG because librnd is not about PCBs only but abotu any design a CAD-like app does
		-Cleanup: fix up the symbol name of rnd_conf_pcb_hid_uninit() in internal public API (remove the _pcb from the middle, probably an earlier renaming error)
		-Add: comment to explain a status bit left-over from pcb-rnd
		-Add: spare fields in callback struct

	[core]
		-Fix: don't crash on action uninitialization if the action system was not initialized
		-Fix: API CHANGE: typo in public symbol prefix (rnd_pcphl_*)
		-Fix: use %lx for printing unsigned long on version mismatch error msg
		-Del: pcb_compat.h: it was relevant in the 2.x.x series for backward compatibility, but 3.0.0 has other breaking API changes as well
		-Del: pre-3.0.0 compatibility layers
		-Change: lib versioning scheme for detaching from pcb-rnd
		-Cleanup: API CHANGE: rename pcb_conf_internal to rnd_conf_internal to clean the namespace
		-Cleanup: rename pcb_long64_t to have rnd_ prefix
		-Cleanup: remove unused PCB_PACKAGE, rename PCB_VERSION and PCB_REVISION to RND_* for namespace purity (internal public API)
		-Cleanup: remove references to pcb from public API comments
		-Cleanup: prefix pcbhl_ with rnd_ for keeping the namespace clean
		-Cleanup: rename pcb_color_* to rnd_color_* in internal API for clarity
		-Cleanup: namespace: pcb_hid_dlg prefix changed to rnd
		-Cleanup: namespace: pcb_dad public internals to rnd_dad prefix
		-Cleanup: rename pcb_conf_* to rnd_conf_* for namespace cleanup
		-Cleanup: pcb_ -> rnd_ prefixes in actions, safe_fs, pixmap, internal hid APIs
		-Cleanup: pcb_ -> rnd_ prefixes in hidlib error init, macro of tools, macro of grid, macro of conf
		-Cleanup: PCB_ -> RND_ prefixes in PCB_OBJ_PROP
		-Cleanup: PCB_ -> RND_ prefixes in internal feature macro
		-Cleanup: rename pcb in internal APIs and comments
		-Cleanup: remove some pcb-rnd refs from anyload
		-Add: spare fields in pixmap structs, color cache and hidlib API
		-Add: rnd_coord_t spare to all struct with spare fields (rnd_coord_t size depends on configuration)
		-Add: SetGridOffs() action
		-Add: publish the prototype of rnd_pcbhl_conf_postproc() for pcb-rnd to be able to set the home dir
		-Add: install all funchash headers - pcb-rnd needs them

	[DAD]
		-Fix: don't use lable for DAD_COORD in gui actions
		-Cleanup: API CHANGE: make RND_DAD_CFG_NOLABEL the default and remove the feature macro
		-Add: spare fields in spin struct

	[doc]
		-Fix: doc link points to developer/, there's no user doc for the lib
		-Fix: refine the documentation on how menu file name is really used
		-Fix: broken link to minisvn (web svn cgi)
		-Fix: license title is not pcb-rnd but librnd
		-Del: key/menu related rules from Makefile (librnd doesn't come with a menu file)
		-Cleanup: remove $LP and $LC from packager's doc (we install only librnd, that's $P and $C)
		-Update: unix installation from pcb-rnd
		-Update: change README from pcb-rnd to librnd
		-Update: AUTHORS and INSTALL from pcb-rnd to librnd
		-Update: README with the dir layout
		-Update: html headers and main web page from pcb-rnd to librnd
		-Update: there's only one recommended init sequence now which is generic enough for all cases
		-Import: action doc from pcb-rnd for those actions that got moved from pcb-rnd to librnd
		-Add: document how spare fields are used to achieve better binary compatibility
		-Add: 'news' page
		-Add: test compilation result on IRIX
		-Add: packager's doc
		-Add: explain better why there's no windows binaries for the lib
		-Add: action/ in the dir listing
		-Add: logo, @ png for mail addresses
		-Add: change -rnd on the index page to Ringdove link collection
		-Add: mention ldconfig in INSTALL

	[gtk]
		-Fix: --help doesn't hardwire pcb-rnd
		-Cleanup: rename PCB_GTK_KEY() to RND_GTK_KEY() in the internal public API
		-Cleanup: rename PCB_WORKAROUND_* to RND_WORKAROUND_* (in internal public API) to clean the namespace
		-Cleanup: PCB_ -> RND_ prefixes in internals
		-Cleanup: PCB_ -> RND_ prefixes in preview widget
		-Cleanup: rename event coord converter macro so it doesn't have PCB in its name anymore
		-Cleanup: rename pcb_ -> rnd_ in internal APIs (pcb_gtk)
		-Cleanup: rename pcb_ -> rnd_ in internal APIs (pcb_conf_hid_gtk)
		-Cleanup: rename pcb_ -> rnd_ (file name pcb_gtk.h to rnd_gtk.h)
		-Cleanup: rename pcb_ -> rnd_ in internal APIs
		-Cleanup: rename pcb -> rnd in internal APIs
		-Cleanup: rename pcb -> rnd in internal APIs

	[hid_batch]
		-Fix: --help doesn't hardwire pcb-rnd
		-Cleanup: remove pcb terminology

	[hid_lesstif]
		-Fix: wrong FSF address in a non-unified address block in the license banner
		-Fix: invalid memory write on filling in lesstif command line arguments to other plugins in the wrong array
		-Cleanup: rename pcb_ -> rnd_ in internal APIs
		-Cleanup: rename pcb_ -> rnd_ in internal APIs
		-Cleanup: rename pcb_ -> rnd_ in internal APIs for motif box
		-Cleanup: rename pcb_ -> rnd_ in internal APIs
		-Cleanup: rename pcb_ -> rnd_ in internal APIs (pcb_x and pcb_y)
		-Cleanup: rename pcb_ -> rnd_ in internal APIs

	[hid_remote]
		-Fix: use rnd_config so that app prefix is defined for actions
		-Cleanup: rename pcb_ -> rnd_ in internal APIs

	[hidlib]
		-Fix: accept NULL for rnd_app.conf_internal, take it as if it was an empty string
		-Cleanup: code style/indentation after rnd_app refactoring
		-Cleanup: remove old/obsolete struct fields (now that we have a breaking API change for 3.0.0 anyway)
		-Change: API CHANGE: move package ver/name/url into rnd_app
		-Change: API CHANGE: move conf paths into rnd_app
		-Change: API CHANGE: move crosshair move/suspend/restore into rnd_app
		-Change: API CHANGE: move crosshair attached/marks draw into rnd_app
		-Change: API CHANGE: move expose callbacks into rnd_app
		-Change: API CHANGE: move conf_internal into rnd_app
		-Move: rnd_conf_lib_dir and rnd_conf_dot_dir into rnd_app as these need to be filled in by the app
		-Move: conf postproc hook to rnd_app
		-Add: move menu related back references to rnd_app
		-Add: explain where the API wrapper is called from
		-Add: rnd_fix_locale_and_env() is rewritten as a macro so it can perform some checks that depend on app compilation
		-Add: rnd_fix_locale_and_env() throws an error on coord bit configuration mismatch between librnd and the app
		-Add: app revision field in rnd_app for better version report
		-Add: spare fields in hid_attrib and main arg struct

	[irc]
		-Cleanup: namespace pollution: use rnd_ instead of pcb_ for internal action names
		-Cleanup: remove unnecessary pcb-rnd references, generalize for ringdove
		-Cleanup: pcb_ -> rnd_ prefixes
		-Add: when reporting version on irc, include both host application and librnd versions

	[lib_gensexpr]
		-Change: buildin by default (apps will need it)
		-Change: move package into core (would be alone in the lib_io package)

	[lib_hid_common]
		-Fix: wrong plugin name in cookie string
		-Fix: remove plugins/dialogs from the conf system on uninit
		-Fix: missing header for the plugins dialog
		-Fix: zoom with =0.1mm broke because it did not convert with unit
		-Cleanup: API CHANGE: rename pcb_* to rnd_* in public API
		-Cleanup: API CHANGE: rename PCB_GUI_NOGUI to RND_GUI_NOGUI
		-Cleanup: rename pcb -> rnd in internal APIs
		-Cleanup: const correcness
		-Import: online-help xpm from pcb-rnd
		-Import: manage plugins dialog from pcb-rnd (the plugin infra is common to all ringdove apps)
		-Add: xpm name resolution action so that non-gui app plugins don't need to depend on lib_hid_common for optional GUI

	[lib_hid_gl]
		-Cleanup: remove prototype for non-existent function

	[lib_wget]
		-Cleanup: API CHANGE: rename pcb_* symbols to rnd_* (to clean the namespace)
		-Change: buildin by default (apps will need it)
		-Change: user agent should be more generic: librnd-wget
		-Add: spare fields

	[menu]
		-Cleanup: remove pcb_ and PCB_ prefix from the internal public API in favor of rnd_ and RND_

	[poly]
		-Cleanup: rename pcb_ prefix to rnd_ in pline support, polyarea internals and poly offs
		-Cleanup: rename pcb_ prefix to rnd_ for pcb_poly_ in internal APIs
		-Cleanup: rename prefix pcbo_ to rndo_

	[safe_fs]
		-Fix: API CHANGE: rnd_file_readable() needs to get a rnd_hidlib_t * first arg so it can do the access checks later

	[scconfig]
		-Fix: need to install typed double linked genlist's .c file as well, as it's a template included by the app
		-Fix: use genlist's own make install instead of manually listing a few files
		-Fix: make sure all parts of genlist ends up in the .so, some apps will use them
		-Fix: do not let librnd-specific argument parsing leak out to apps (e.g. coord type)
		-Fix: do not crash when value is missing for --key=value custom args
		-Fix: 'make map_plugins' moves the resulting plugins.h into librnd scconfig dig - this one is not installed
		-Fix: do not hardwire PREFIX/lib in librnd.mak, use libarchdir
		-Fix: all plugins are considered hidlib plugins - if they are builtin, link them in librnd-hid.so
		-Fix: LIBRND_LIBDIR from config.h shall use libarchdir instead of hardwired /lib
		-Fix: put plugin srcs on the dep list even if they are configured with --plugin and not --buildin
		-Fix: LIBRND_PLUGIN dir set with full path from trunk to fix up deps
		-Fix: missing return value for dep resolver
		-Fix: install genht's ht.c, it's part of the public API
		-Fix: proper pointer comparison for NULL
		-Fix: install/uninstall rule: don't do anything manually for genlist, it's installed using its own Makefile
		-Fix: install doc to $(SHAREDIR)/doc/librnd3 so different versions of the lib can be installed in parallel
		-Fix: the postarg hook needs special casing for when running from librnd's configure, since there's no librnd install yet
		-Fix: move -l's at the end of the command line for building the .so files - some C compilers are sensitive to this
		-Fix: save NULL as empty string when saving fungw ldflags in plugin state
		-Cleanup: split to-be-removed header installation from core header extra installation
		-Cleanup: require template users to define $(LIBRND_LIBDIR) so templates can cross-call
		-Cleanup: remove app-specific installation paths from config.h
		-Cleanup: prefix BINDIR with RND_
		-Cleanup: move GUI hid related detectioins from public scconfig helper API into internal - ringdove apps won't need to deal with this anymore
		-Cleanup: move the coord bits logics back from public API to private - apps should use whatever librnd was configured with
		-Cleanup: remove hooks_gui.c from the public scconfig API: only librnd shoudl deal with gui details
		-Cleanup: move librnd-only help from public scconfig API to local implementation
		-Cleanup: remove unused LIBDIR_INSTALLED from Makefile.conf template
		-Del: obsolete fallback def of RND_DAD_CFG_NOLABEL that already got removed
		-Del: hidlib property of plugins: every plugin in librnd is hidlib, and no other plugin elsewhere is, no need to track this anymore; switch over central plugin list to no-hidlib syntax
		-Del: remove bison/yacc/byaccic detection, librnd doesn't have any grammar
		-Move: librnd-specific detections back from the public API to internal - apps shouldn't try to compile librnd anymore
		-Change: lib plugins that are of interest for apps are default built-in
		-Change: API CHANGE: librnd.mak doesn't depend on LIBRND_ROOT anymore (embedded checkout of librnd not supported now) but uses LIBRND_PREFIX which it also sets
		-Change: do not instal anything in /etc - host app will load from its own directory
		-Change: SHAREDIR should be $PREFIX/share/librnd3 to avoid collision with different versions
		-Change: libdir is $PREFIX/lib/librnd3 to allow multiple major versions
		-Add: install rnd_hook_detect.h, apps' hook.c depend on it
		-Add: install genregex template header, required by pcb-rnd
		-Add: install lib-like plugin header files so application plugins can depend on them
		-Add: save and install $(SHAREDIR)/plugin.state, which lists the 3state of each plugin in both scconfig importable way and shell script processable comments
		-Add: when running for an app, calculate plugin external dependencies
		-Add: mark librnd plugins external in the plugin state dump
		-Add: generate librnd.mak to have extra -I and -L for the case librnd is installed at some non-standard path
		-Add: API CHANGE: rnd_hook_postarg() needs to get librnd prefix so it can load plugin states
		-Add: export -rdynamic for tests
		-Add: save fungw ldflags in plugin state - the host app needs it in case of system installed fungw
		-Add: calculate default confdir when not specified (API CHANGE: postarg function needs to get the application name)
		-Add: install cquote in libdir/scconfig/ - apps need this to compile internal version of menu and config files
		-Add: install sccbox (for applications without scconfig)

	[script]
		-Cleanup: pcb_ -> rnd_ prefixes

	[stroke]
		-Cleanup: rename pcb_ prefix to rnd_ in internals

	[tests]
		-Fix: librnd link test gets dummy empty internal menu so it can initialize and return 0
		-Fix: librnd test: more robust uninstall
		-Cleanup: simplify live test code app initialization
		-Update: rnd_printf test doesn't need any glue layer with librnd 3.0.0 API
		-Add: librnd test: tweak plugin path so the test runs with all-plugin builds and by default use the batch hid

	[tool]
		-Add: spare fields

	[util]
		-Fix: pup list util for the packager's doc: use the right package dir
		-Import: awk_on_formats for packager's doc
