pcb-rnd 2.0.0 (r17177) ~~~~~~~~~~~~~~~~~~~~~~ -Del: old data model -Cleanup: use macro.h only where it is really needed, do not include it from central headers (reduce unnecessary dependencies) -Cleanup: remove doxygen [grid] -Add: SetValue() can double or halve the current grid -Add: extend board grid set API for explicit offset -Add: grid() action -Add: conf setting: grids_idx for remembering which grid is selected from the list -Add: helper function to create the anchored menus -Add: action to select specific grid by index -Add: initialize update_on and checked for the dynamic grid menus -Add: grid index invalidate (on custom grid setting) -Add: update the dynamic menu on gui init event -Add: update the grid dynamic menu when the config changes [menu] -Fix: make cut-to-buffer undoable by not depending on the special move buffer function -Add: new default multi-stroke menu file for both gtk and lesstif -Add: context menu (per object type) -Add: quickplace: via, line and arc -Add: submenu for displaying different subcircuit IDs -Add: extend the API so menu items can be inserted after an existing menu item (opposed to appending at the end of the menu) -Add: new default menu file for the configurable grid -Add: buffer normalization menu -Change: edit attributes of current layer uses the property editor instead of the obsolete attribute editor -Change: edit layer attributes from the popup menu uses the property editor instead of the obsolete attribute editor -Change: use propedit for editing board attributes -Rename: buffer #5 to scratchpad (the code often overwrites it as side effect of other operations) [autocrop] -Change: rewrite the whole code to use core functions instead of local reimplementation of moves; simpler logic for rounding coords -Add: do not do anything if no change is required -Add: clip polys and draw screen only once, not for each move [autoroute] -Fix: line end coord flicker that killed rubber band [conf] -Fix: hide_names description: it really hides floaters -Fix: iterator should increase the index counter -Fix: prepend list items in the reverse order so the final order of items is the same as in the file -Fix: array merging: do not overwrite non-NULL items with NULL items - this lets a config entry modify something in the middle of an array without removing the first many items -Fix: check for node type in tree traversal to avoid assert in liblihata; throw an error for invalid subtrees and remove them -Fix: buffer overrun on conf node names too long -Fix: buffer overrun on conf path too long -Change: mark [pin/pad] show_number obsolete -Cleanup: rewrite the missing node ignore mechanism so it works for whole subtrees and can be applied to both old and optional subtrees -Cleanup: remove drc and conf sections from the default boards; default config should be coming from internal and system config files so that the user can easily override them (config settings coming from the default board have the DESIGN role that is hard to override) -Add: conf_set_dry() "mkdirp" flag for auto-creating policy subtrees; conf_set() auto-creates the subtree -Add: more exact error messages on conf parse error (list and array item must be text) -Add: infrastructure for loading custom (per plugin) config files from system and user dirs -Add: remember the name of list items - on some lists, like export_xy's templates this matters -Add: publish conf file reg/unreg API [core] -Fix: change.c should include change.h to detect API mismatch -Fix: auto-via is created as a padstack to avoid depending on vias -Fix: when moving a line to another layer and an auto-via is added, use padstacks, not via -Fix: do not merge new line to an existing line if the existing line is part of a subc or has term set -Fix: do not announce which menu file has been loaded: action PrintFiles will tell -Fix: when rotating buffer, do not expect text or padstack rtree to be non-NULL - if they are NULL, just skip the administration -Fix: the actions that change layer visibility/selection should invalidate the drawing and send out layer change event to get everything redrawn -Fix: The 'Text Tool scale' key mappings were reversed with regards to + & - -Fix: do not crash in layer select action when invalid layer number is chosen -Fix: do not call route styles changed event when only the active route style is selected - the conf events will be picked up -Fix: make sure to emit the routes changed event when the routes are initialized (on load or new board creation) -Fix: when loading a footprint-as-board, set the board size to make sure the footprint fits -Fix: search: prefer padstacks that have copper shape on the right side, then padstacks that have any shape on the right side then ones with shape on the current layer and only then any other padstack over the given location -Fix: data_is_empty: because of buffers: if global lists are empty, it's enough to check layers for pure emptiness, no global side effects should be checked -Fix: don't segfault if element attr is attempted to set on a non-existing subc -Fix: clip polys only when clip inhibit decreases to 0 -Fix: pcb_chg_obj_name_query() doesn't handle dyntext floater subc parts as terminals -Fix: operation on selected objects can recurse to subcircuits if SUBC_PART is part of target type -Fix: don't execute operation twice on subc parts (by r16304) -Fix: allow rotate function to operate on subc floaters -Fix: do not let the user to select-move or select-remove subc parts (not even floaters, because parent could not be tracked over the buffer) -Fix: consider a padstack for screen search only if it has a shape on a visible layer -Fix: allow padstacks to change (global) clearance -Fix: text object: don't crash if a non-subc dyntext tries to reference parent subc -Fix: MoveToCurrentLayer on a subc part (floater) object keeps the object within the subcircuit, either by using an existing subc layer or allocating a new bound layer -Fix: make sure redo never adds new undo entries (would render the rest of the redo stack unusable) -Fix: search-by-location shouldn't find floaters when they are locked -Fix: do not find hidden floaters on click -Fix: hide floaters works on non-silk objects as well -Fix: call get_export_options() when invoking the exporter using -x, to make sure the options are initialized before the cli processor goes through them; the nogui version shouldn't throw an error, the fallback is a nop -Fix: SaveTo() with no args shouldn't segfault -Fix: SaveTo(Layout) shouldn't tolerate file name or format; when specified, it would be ignored; to avoid confusion, rather throw an error -Fix: emergency format typo - use the configured format -Fix: on footprint import always use the footprint attribute instead of the name attribute -Fix: search on padstacks: accept the padstack found if it has hole on the current layer -Fix: temporary turn off flip/solder-side-view while replacing subcircuits from ElementList(), to avoid coord flip confusion and wrong y coord of the replacement subc -Fix: freeze undo while rotating buffer to make sure nothing ends up on the undo (buffer operations are not undoable) -Fix: when moving an unselected subc with drag&drop it should never snap to any object in the original subc -Fix: when mirroring data, provide an option for mirroring text coords only without mirroring the text graphics ("onsolder" flag); this needs to be used for subc and buffer mirroring to keep text objects in place -Fix: flag_str: when converting to string in compatibility mode, permit hidename for subcircuits -Fix: 2 layer default board typos -Fix: find.c: rat vs. padstack intersection must consider whether padstack has shape on the given layer -Del: obj_all_op.h, obj_all_list.h, trunk/src/obj_all.h - include the op headers directly -Del: old data model: PCB_OBJ_* constants for the old model -Del: obsolete API: get_unit_list() -Del: increments config type (the new grid code handles these) -Del: remove mask from the ToggleView() help - mask is not a special layer anymore -Del: redundant drc settings from pcb_board_t - they are only in config now -Del: redundant board meta: poly_isle_area -Del: remove conf vs. board header redundancy: max_width and max_height are board parameters, not config -Del: default thermal style from pcb_board_t - used only by the autorouter, this should be a local setting there -Del: the line object should have no Number field - use the term attribute to indicate terminal ID instead -Cleanup: simplify the API of pcb_chg_obj_name_query() (remove type/ptr1/ptr2/ptr3) -Cleanup: move loop end macros from macro.h to obj_common.h - because it's much less general than it was originally and layers are becoming objects anyway -Cleanup: rename PCB_ANYOBJFIELDS to PCB_ANY_PRIMITIVE_FIELDS to make room for generalization (any object may be non-drawing-primitive) -Change: old data model: drc enforce line vs. padstack, while drawing, switched over to the new data model -Change: padstack search precedence: current layer has prio over side -Move: ListRotations to the oldactions plugin - this feature is redundant with the query function and the xy exporters -Add: warn and return error on copy or move to buffer with empty selection -Add: missing element->subc transition on rats patch footprint replace -Add: old data model: rewrite SaveTo(AllUnusedPins, ...) for the new data model -Add: check and warn on uninit if any of the plug chains are non-empty - such bugs can lead to uninit-crash with plugins -Add: pass on background and foreground color on dynamic menu creation -Add: ChkRst() action for route style checkbox menus -Add: net structs, pcb_layer_t, pcb_layergrp_t are now compatible with pcb_any_obj_t -Add: enable action EditGroup(attrib, key=value) -Add: virtual layer button: padstacks (pstk_on controls whether padstack shapes are drawn, not only holes) -Add: pcb api ver to avoid loading mismatching plugins -Add: pcb_chg_obj_name_query() special case: when changing a subc part dyn text that contains %a.parent.refdes%, assume it's a change on the parent subc's refdes -Add: pcb_chg_obj_name_query() won't edit subc refdes immediately on "refdes text", it asks first, giving the user a chance to change the dyntext template -Add: config setting for also drawing the bounding box when xor-drawing a text object (e.g. for move) -Add: optional, runtime HID fallback mechanism (if there is no X, the batch HID will start) -Add: helper function to print the current key sequence in a string (for status line indication) -Add: Buffer(Push) and Buffer(Pop) to let actions temporarily switch buffer then go back -Add: PasteBuffer(normalize) - to clean up after an import -Add: inline func for coord abs (portable implementation to replace labs()/llabs()) -Add: system() sets PCB_RND_BOARD_FILE_NAME; exports crosshair X, Y and current layer's name in env vars -Add: command line option for dumping all object flag names per object type -Add: action Rotate90 -Add: hid_nogui prints progress bar to stderr if verbosity level is high enough -Add: progress bar on data poly clipping after 2 seconds; poly clipping can be cancelled (at a cost of exiting pcb-rnd) -Add: assert() on invalid menu ID -Add: throw an error for any plugin conf field that is unregistered - such bugs cause segfault with dynamic loaded plugins -Add: extend the padstack mirror API so that x mirroring can be disabled [diag] -Fix: integrity: do not check more layers than what the parent has (e.g. few subc layers vs. a lot of board layers where the subc is hosted) -Fix: missing newlines at the end of error messages -Fix: respect prefix when printing lihata dump section headers -Add: integrity test on layer's parent -Add: integrity checks for object's ->type field -Add: integrity test on layer group type/parent -Add: integrity tests for non-global outline layers -Add: print comments about which section of the emitted lihata dump is for main and for plugin trees [dialogs] -Fix: padstack shape copy does not bloat the shape -Fix: padstack dialog uses real tabs instead of local button based implementation -Fix: shape gen sets clearance to 0 -Fix: flag edit prints object type in text, not in magic number -Add: padstack editor, 3rd tab: auto generate common cases -Add: padstackedit can be invoked with a selected tab open -Add: include optional prototype name in instance proto button text [distaligntext] -Cleanup: remove doxygen -Cleanup: don't repeat the file name in comment -Change: rewrite element loops to subc loops - floater text on the first level considered [doc] -Fix: use $(MAKE) instead of hardwired make -Del: old Debian list generation: we don't do custom Debian packaging anymore -Update: wishlist: data model rewrite done -Add: user manual, ui: explain multi-stroke key bindings, prepare the key tree -Add: multi-stroke key assignment: document non-leaf choices -Add: document new key tree nodes -Add: keytree flat list -Add: document what's new in lihata v5 -Add: manual page for fp2subc -Add: document lihata board v5 news: route style via proto ID -Add: document lihata v5 padstack proto name feature -Add: lihata -> html render script for the file format doc -Add: lihata board and friends file format spec -Add: technical details on the xy exporter templates -Add: mods3: explain plugin status words -Add: link mods3 tables from plugin creation howto for classes and status words -Add: document the new stroke plugin -Add: document the polystitch plugin -Add: minimalistic user documentation for the autoplace plugin -Add: minimalistic user manual for the autoroute plugin -Add: list svn mirrors, explain when the mirrors should be used [export_bom] -Fix: use the centralized footprint name lookup [export_dsn] -Fix: do not x-flip padstack placement within subc - that swaps the pads -Fix: y flip in padstack placement within subcircuit -Fix: mirror x shapes of padstacks when parent subcircuit is on the other side (freerouting dsn import bug workaround) -Fix: padstack mirrored x placement as a workaround for freerouting's dsn importer bug -Fix: heavy terminal placement within subcircuits, including proper y flip -Fix: make sure layer names are unique by prefixing group name with group ID -Workaround: subc front/back and inverted padstack layer stackup to work around a bug in freerouting.net dsn importer -Cleanup: rewrite layer support to use core data directly (also removes glib dependency) [export_dxf] -Fix: arc angles for all positive and negative deltas (simplify the code to remove bugs) [export_ipcd356] -Change: full rewrite [export_png] -Fix: in photo mode, use the slower, but more accurate line drawing method for zero-length lines [export_ps] -Fix: ps_bloat now works -Del: polygrid export option - PolyHatch() does it better [export_xy] -Fix: don't count subcircuits in int, use pcb_cardinal_t (int may be 16 bit) -Fix: use central subc footprint name mechanism -Fix: unregister conf nodes in uninit -Add: local plugin configuration for templates -Add: conf list parser for templates -Add: lihata conf version of the original templates -Add: compile and install export_xy.conf -Cleanup: terminology in template field names: subc/terminal instead of elem/pad -Cleanup: rename "elem." to "subc." and "pad." to "term." in the template for consistency -Cleanup: rename subc.name to subc.refdes and subc.desc to subc.footprint for consistency with code terminology -Cleanup: rename element_num to count for consistency in the terminology [fp_board] -Fix: C89 forbids mixed declarations and code [fp_wget] -Fix: error messages are not sent to stdout -Add: common helper function for searching the index for a footprint name -Add: gedasymbols: if path is the cookie, accept it and search for the footprint short name in the index -Add: footprint path search for edakrill [gpmi] -Fix: remove the old MAX_LAYERS+2 hack - silks are not special any more -Del: debug draw API -Update: new menu creation API -Update: plugin dependencies [gtk] -Fix: do not discriminate keypad keys -Fix: SEL -> ARR in mode button icon for consistency with the code/doc terminology -Fix: emit layer vis change event from wt_layersel on any visibility affecting changes to keep menus in sync -Fix: when removing a menu widget, also remove its action from the action list -Fix: bindings so that the route style widget is updated when the route style selection changes (from the menu or via the action) -Fix: pinout window: do not enforce window sizes too large for large footprints -Fix: coord correctness: zoom/pan coord conversion doesn't cast coords to gint -Fix: drc window reset shall remove old report widgets -Fix: coord entry: let the user change units -Fix: side-correct zoom-to-win -Fix: do not include file name for SaveTo(Layout) - it knows the file name -Fix: advanced search non-integer fields are retyped to DOUBLE from INT -Fix: allow negative integers in config pov's spinbox (e.g. subc dash_freq can be set to -1) -Fix: give focus to the drawing window before entering the main loop so key presses are handled even if the mouse cursor haven't yet entered the drawing area -Change: mouse button assignment is in sync with the default menu file -Add: option for context-sensitive popups: per object type under the cursor -Add: status line: display key sequence -Add: low level zoom action feature: zoom(x1,y1,x2,y2) and high level ZoomTo() action that doesn't try to query the new center -Add: advanced search: subc and host subc fields -Add: advanced search: subcircuit rotation and side field -Add: advanced search: padstack fields in the advanced search -Add: missing action EditLayerGroups for compatibility with lesstif [hid] -Fix: gtk or lesstif X initialization failure does not result in exit() from the HID code but returns error so that main.c has the chance to handle it later -Fix: coord correctness: set_crosshair() takes coords, not ints -Cleanup: API indentation and excess _ in argument names -Del: debug draw API - use UI layers instead -Del: radio menu support - gui logic is implemented deeper, no toolkit support required -Move: centralize SetUnits action from the lesstif and gtk hids into core -Change: pass on menu properties as a struct, not as a bunch of const char *args, to make the API easier to extend -Change: parse arg/command line API has an integer return value so HIDs are not forced to exit but can indicate if initialization fails -Add: publish the main hid config for each GUI hids so that anchored menus can be added from the outside, without the GUI hids knowing about all anchors by name -Add: API to look up and map @anchor menus -Add: API for removing menu items under an anchor -Add: remove menu subtree by lihata node (for removing under-anchored menu items) -Add: checked and update_on fields for dynamic menus -Add: background and foreground color fields in dynamic menu struct -Add: API to force a global menu checkbox update -Add: wrap pcb_gui->attribute_dialog as it may not be always available [import_dsn] -Update: load layer group id__names as exported by export_dsn [import_hpgl] -Fix: Y flip [import_ipcd356] -Add: new plugin to load terminals and netlist for test points [io_lihata] -Fix: test route style entry type before use -Fix: throw an error when a padstack references to an invalid prototype -Fix: handle buggy input: no data in subc -Fix: don't segfault if poly padstack proto shape contains invalid coordinate -Fix: when setting up new layer groups, set parent and type properly -Fix: v4: save heavy terminal thermals (and warn if saving to shapei -Fix: rotate op needs to invert angle if padstack is x-mirrored, because padstack transformation data is interpreted as "rotate first, then mirror" -Fix: for mirroring y_offs=0 does not mean "no coord change": the y coord can still be non-zero in which case it needs to be mirrored. Introduce a special y_offs value to indicate "don't mirror coords" -Add: event on creating padstacks -Add: low level function for changing prototype name [plugins] -Fix: better corner case handling for hook unregister for the case the target pointer is the head of the list -Fix: unregister all plugin hooks to avoid quit-time-segfault (dangling pointers left on the plug chains, backing structs already unmapped by dlclose) [polystitch] -Fix: pcb_coord_t correctness -Change: rewrite the core of the plugin so that it doesn't try to generate a (self-intersecting, invalid) polygon, but converts the inner polygon into a valid hole in the outer polygon -Cleanup: do not use global variables when no global state is necessary for the task [propedit] -Fix: attempt to change layer properties only on prefix match or attributes -Fix: mark layers being edited as the first step, do not trust storing the pointers -Fix: clearance value halving on set -Add: propedit(layers) and propedit(layer:id) so layer attributes can be edited -Add: accept multiple layer IDs -Add: layer id "current" means the current layer -Add: operate on layer groups -Add: operate on boards -Add: allow editing subc part padstack in loose subc mode -Add: extend loose subc editing to all subc part objects (not limited to padstack) -Add: allow editing subc parts that are freely editable (terminals, floaters or anything in loose subc mode) [query] -Fix: properly compare NULL string to empty string (they should be the same for now) -Fix: make subcircuit access recursive - subcircuit parts should be dealt with -Fix: do not segfault on uninitialized variables -Add: padstack shape accessor -Add: new field: subc (references to the direct parent subc) -Add: generalize accessing the common fields; subc field access works on parent subcircuits -Add: more sophisticated eval printout: take only coords as bools, print the value of the rest; void is always false -Add: subc rotation access -Add: access subc side (TOP or BOTTOM) [renumber] -Cleanup: remove doxygen -Cleanup: const correctness [report] -Fix: report all net lengths using pcb_message() instead of direct log writes so the user has more control -Fix: use pcb_message() instead of direct logging for more control -Fix: excess undo interfering with user's undo -Update: use the new data model for looking up net name for found objects -Cleanup: split and simplify the net name lookup code -Cleanup: get rid of DrillInfoTypePtr - use * for pointers -Cleanup: get rid of CamelCase [rtree] -Del: old rtree implementation in favor of genrtree [rubberband] -Fix: don't mix var decl with code, C89 doesn't allow that -Fix: the event PCB_EVENT_RUBBER_CONSTRAIN_MAIN_LINE was using int where it should have been using pcb_coord_t [scconfig] -Fix: use detected host cc to compile puplug utils -Fix: do not hardwire inline - use the detection from scconfig -Change: force lib_compat_help to be a builtin because core temporarily depends on it -Change: use local coord abs implementation instead of labs/llabs because llabs is not c89 and leads to feature macro hell on GNU -Del: export_dsn -> glib dependency [shape] -Fix: use tabbed widget instead of local tab implementation (works better on small screen) -Fix: don't warn on start for invalid dia [stroke] -Rewrite: new, configuration+action based stroke implementation, rewritten from scratch -Fix: gesture direction should not invert when board is flipped -Fix: coord type correctness: event coords are passed as pcb_coord_t, not as int -Fix: don't use bit shift on coords, c89 doesn't guarantee that would work on signed ints -Fix: warn only once for missing libstroke, and only if the gesture is large enough -Change: API CHANGE: stroke finish returns integer; 0 on success (gesture recognized) -Add: hack when processing mouse button release action: return 1 if stroke is enabled and gesture is recognized so that the context popup menu is not opened -Add: bind right mouse button press/release to stroke in the menu file -Add: rotation gestures -Add: stroke() action with stroke(gesture, seq) -Add: bindings for zoom in and out -Add: stopline feature, also supports poly and poly hole -Add: the config explains the dial pad idea of sequence descriptions -Add: option for warning on unknown/unconfigured sequences [subc] -Fix: const correctness: host transf can't take const subc because of the subc cache updates -Fix: when rotating all subc parts, restore undo to avoid padstack rotations getting on the undo list separately -Fix: unified handling of subc_op undo - subc size change operations are undo-batched -Fix: undo strategy: when subc-only undo/redo is done, freeze undo adds -Fix: don't let flag change of subcircuit already in buffer get on the undo list - buffer flags changes won't be undoable -Add: menu item for controlling the loose subc flag -Add: update subc when part padstack is changed -Add: configurable subc visible bbox dash frequency -Add: helper function to return the footprint name of a subc [teardrops] -Fix: c89 forbids mixed declarations and code [tool] -Fix: move: do not perform the move if dx==0 and dy==0 -Fix: dereference pointer in pcb_tool_get macro -Fix: reset crosshair bounds after placing a drag&drop move so the crosshair move is not limited -Split: define in tool files if the tool can be selected in rat drawing mode -Split: tool (un)init code into tool files -Move: pcb_crosshair_save/restore_mode to tool.[ch] as pcb_tool_save/restore [util] -Del: old, resource file based keylist -> html converter (pcb-rnd long ago switched to lht) -Add: keylist graphviz drawing for multikey combos -Add: keylist can generate a boxed html version (each box is a starting letter) -Add: keylist script uses css magic for the boxed version to get boxes float [vendor] -Fix: count total number of holes again -Fix: re-enable route style tuning -Fix: re-enable setting the current 'pen' via drill -Add: event for tuning newly placed padstacks when vendor drill mapping is enabled (replaces the stub)