Index: 1.2.8/AUTHORS =================================================================== --- 1.2.8/AUTHORS (nonexistent) +++ 1.2.8/AUTHORS (revision 15490) @@ -0,0 +1,13 @@ +pcb-rnd maintainer: Tibor 'Igor2' Palinkas +email: pcb-rnd (at) igor2.repo.hu +Chat, IRC: http://repo.hu/projects/pcb-rnd/irc.html + +An always up-to-date list of developers and contributors can be found at +http://repo.hu/cgi-bin/pcb-rnd-people.cgi + +PCB was originally written by Thomas Nau +Development was later taken over by harry eaton +The port to GTK was done by Bill Wilson +Dan McMahill converted the build system from imake to autoconf/automake. +DJ Delorie wrote the trace optimizer, added symbolic flag support and +many other improvements. Index: 1.2.8/COPYING =================================================================== --- 1.2.8/COPYING (nonexistent) +++ 1.2.8/COPYING (revision 15490) @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. Index: 1.2.8/Changelog =================================================================== --- 1.2.8/Changelog (nonexistent) +++ 1.2.8/Changelog (revision 15490) @@ -0,0 +1,1740 @@ +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 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 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: and 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: 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 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.* ### Index: 1.2.8/Changelog.1.0.x.gz =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: 1.2.8/Changelog.1.0.x.gz =================================================================== --- 1.2.8/Changelog.1.0.x.gz (nonexistent) +++ 1.2.8/Changelog.1.0.x.gz (revision 15490) Property changes on: 1.2.8/Changelog.1.0.x.gz ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: 1.2.8/Changelog.1.1.x.gz =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: 1.2.8/Changelog.1.1.x.gz =================================================================== --- 1.2.8/Changelog.1.1.x.gz (nonexistent) +++ 1.2.8/Changelog.1.1.x.gz (revision 15490) Property changes on: 1.2.8/Changelog.1.1.x.gz ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: 1.2.8/INSTALL =================================================================== --- 1.2.8/INSTALL (nonexistent) +++ 1.2.8/INSTALL (revision 15490) @@ -0,0 +1,69 @@ +1. Installation + +Run ./configure. + +Run make. + +Run make install. + +For compile-time options run ./configure --help + +2. Running from source + +cd src && ./pcb-rnd + +(Note: it is important to cd to src to run pcb-rnd from source; src/pcb-rnd +won't work unless pcb-rnd is installed). + +If this doesn't work, please refer to doc/UNIX.txt or doc-rnd/mac.txt + +-- + +PCB is organized into: + src/ a core program that deals with all of the internal + database procedures + src_plugins/ a collection of plugins + src_3rd/ third-party minilibs (dependencies, not integral parts) + pcblib/ a basic footprint library + tests/ automated tests to check whether pcb-rnd works properly + util/ utility programs like gsch2pcb-rnd + + +./configure will try to static link most plugins and disable ones that +have missing dependencies. This process can be controlled using configure +command line switches, see ./configure --help. + +After running ./configure with your selected options, run + + make + +to build pcb-rnd. You can try out the program by running + + cd src + ./pcb-rnd + +prior to installation (CWD _must_ be src/). + +To install PCB after it has been built run: + + make install + +from the top level directory. An alternative installation method +is the link-install, which places symlinks instead of copying files so +no subsequent make install is needed after a recompilation if no new +files appeared (useful for developers): + + make linstall + +-------- Summary of dependencies -------------------- +For users: + - C compiler + - make + - optional: glib and gtk if you are using the gtk frontend + - motif or lesstif if you are using the lesstif frontend + - gdlib if you are using the png HID + +For developers: + - flex + - bison + Index: 1.2.8/Makefile =================================================================== --- 1.2.8/Makefile (nonexistent) +++ 1.2.8/Makefile (revision 15490) @@ -0,0 +1,54 @@ +all: FORCE + cd src_3rd/puplug/util && $(MAKE) + cd src && $(MAKE) + cd util && $(MAKE) + cd pcblib && $(MAKE) +# cd doc && $(MAKE) + +test: FORCE + cd tests && $(MAKE) test + +clean: FORCE + cd src && $(MAKE) clean + cd util && $(MAKE) clean + cd pcblib && $(MAKE) clean +# cd doc && $(MAKE) clean + cd tests && $(MAKE) clean + cd src_3rd/sphash && $(MAKE) clean + cd src_3rd/puplug && $(MAKE) clean + cd src_3rd/libminuid && $(MAKE) clean ; true + cd src_3rd/libuundo && $(MAKE) clean ; true + +distclean: FORCE + $(MAKE) clean ; true +# cd doc && $(MAKE) distclean + cd src && $(MAKE) distclean + cd util/gsch2pcb-rnd && $(MAKE) distclean + cd src_3rd/genlist && $(MAKE) clean ; true + cd src_3rd/genregex && $(MAKE) clean ; true + cd src_3rd/genvector && $(MAKE) clean ; true + cd src_3rd/liblihata && $(MAKE) clean ; true + cd src_3rd/liblihata/genht && $(MAKE) clean ; true + cd src_3rd/qparse && $(MAKE) clean ; true + cd scconfig && $(MAKE) distclean ; true + + +install: FORCE + cd src && $(MAKE) install + cd util && $(MAKE) install + cd pcblib && $(MAKE) install + cd doc && $(MAKE) install + +linstall: FORCE + cd src && $(MAKE) linstall + cd util && $(MAKE) linstall + cd pcblib && $(MAKE) linstall + cd doc && $(MAKE) linstall + +uninstall: FORCE + cd src && $(MAKE) uninstall + cd util && $(MAKE) uninstall + cd pcblib && $(MAKE) uninstall + cd doc && $(MAKE) uninstall + +FORCE: Index: 1.2.8/Makefile.conf.in =================================================================== --- 1.2.8/Makefile.conf.in (nonexistent) +++ 1.2.8/Makefile.conf.in (revision 15490) @@ -0,0 +1,26 @@ +print [@# generated by ./configure, do not modify + +# Compatibility with autotools on DESTDIR - Debian really wants this +# Still keep install_root as well, because that has a better name +Install_root=$(install_root)$(DESTDIR) + +# prefix is @/local/prefix@ +DOCDIR=$(Install_root)@/local/prefix@/share/doc/pcb-rnd +LIBDIR=$(Install_root)@/local/prefix@/lib/pcb-rnd +BINDIR=$(Install_root)@/local/prefix@/bin +ETCDIR=$(Install_root)/etc +DATADIR=$(Install_root)@/local/prefix@/share/pcb-rnd +MAN1DIR=$(Install_root)@/local/prefix@/share/man/man1 +RM=@/host/fstools/rm@ +CP=@/host/fstools/cp@ +LN=@/host/fstools/ln@ +MKDIR=@/host/fstools/mkdir@ +SCCBOX=$(ROOT)/scconfig/sccbox +EXE=@/target/sys/ext_exe@ + + +# The installation directoried to be used from within binaries (with +# install_root/DESTDIR removed) +LIBDIR_INSTALLED=@/local/prefix@/lib/pcb-rnd + +@] Index: 1.2.8/README =================================================================== --- 1.2.8/README (nonexistent) +++ 1.2.8/README (revision 15490) @@ -0,0 +1,28 @@ +pcb-rnd is a modular PCB layout editor. + +It is hosted at http://repo.hu/projects/pcb-rnd +Soruce code: svn://repo.hu/pcb-rnd/trunk + +For installing the release refer to the file 'INSTALL'. +For additional information read the manual (doc-orig/pcb.pdf) + +If you are updating you may wish to read the ChangeLog + +Contact: + email: pcb-rnd (a) igor2.repo.hu + chat & IRC: http://repo.hu/projects/pcb-rnd/irc.html + + +Pcb-rnd was forked from gEDA/PCB in 2013 +------------------------------------------------------------------------- + COPYRIGHT + +PCB is covered by the GNU General Public License. See the individual +files for the exact copyright notices. + + Contact addresses for paper mail and Email: + harry eaton + 6697 Buttonhole Court + Columbia, MD 21044 + haceaton@aplcomm.jhuapl.edu + Index: 1.2.8/Release_notes =================================================================== --- 1.2.8/Release_notes (nonexistent) +++ 1.2.8/Release_notes (revision 15490) @@ -0,0 +1,18 @@ +pcb-rnd 1.2.8 +~~~~~~~~~~~~~ + +This release switches over the whole code base to use the new data model +(padstacks, subcircuits) instead of the old, now obsolete model (vias, +pins, pads, elements). When using alien file formats, conversion forth and +back is done automatically, on the fly, during load and save. + +The local rtree implementation has been replaced with genrtree. This makes +it much easier to share the rtree code among projects, decreases the +maintenance burden. Unlike the local rtree implementation, genrtree +has unit tests. + +The new rtree API features loop iterators, which allows the caller to +have much simpler and more readable code, without callback functions and +context structs. + +The rest of the development focused on fixing bugs. Index: 1.2.8/config.h.in =================================================================== --- 1.2.8/config.h.in (nonexistent) +++ 1.2.8/config.h.in (revision 15490) @@ -0,0 +1,254 @@ +print [@ /***** Generated by scconfig - DO NOT EDIT *****/ + +/* Source: config.h.in; to regenerate run ./configure */ + +#ifndef PCB_CONFIG_H +#define PCB_CONFIG_H + +/****************************************************************************/ +/* Static defines to enable extra features on some systems; once we get + testers on those systems, we can remove them and see if scconfig figured + everything. */ + +/* Enable extensions on AIX 3, Interix. */ +#ifndef _ALL_SOURCE +# define _ALL_SOURCE 1 +#endif +/* Enable threading extensions on Solaris. */ +#ifndef _POSIX_PTHREAD_SEMANTICS +# define _POSIX_PTHREAD_SEMANTICS 1 +#endif +/* Enable extensions on HP NonStop. */ +#ifndef _TANDEM_SOURCE +# define _TANDEM_SOURCE 1 +#endif +/* Enable general extensions on Solaris. */ +#ifndef __EXTENSIONS__ +# define __EXTENSIONS__ 1 +#endif + +/****************************************************************************/ +/* Package properties */ + +/* Name of package */ +#define PCB_PACKAGE "pcb" + +/* Name of this program's gettext domain */ +#define GETTEXT_PACKAGE "pcb" + +/****************************************************************************/ +/* These ones are already autodetected by scconfig */ +@] + +print {\n\n/* Macro to add a funciton attribute to suppress "function unused" for static inline functions declared in .h files */\n} +print_ternary ?cc/func_attr/unused/presents {#define PCB_FUNC_UNUSED __attribute__((unused))} {#define PCB_FUNC_UNUSED} + +print {\n#define PCB_INLINE static inline PCB_FUNC_UNUSED\n\n} + +print {\n\n/* Wether setenv() works */\n} +print_ternary ?libs/env/setenv/presents {#define PCB_HAVE_SETENV 1} {/* #undef PCB_HAVE_SETENV */} + +print {\n\n/* Wether usleep() works */\n} +print_ternary ?libs/time/usleep/presents {#define PCB_HAVE_USLEEP 1} {/* #undef PCB_HAVE_USLEEP */} + +print {\n\n/* Wether win32 Sleep() works */\n} +print_ternary ?libs/time/Sleep/presents {#define PCB_HAVE_WSLEEP 1} {/* #undef PCB_HAVE_WSLEEP */} + +print {\n\n/* Define to 1 if you have the `snprintf' function. */\n} +print_ternary ?libs/snprintf {#define HAVE_SNPRINTF 1} {/* #undef HAVE_SNPRINTF */} + +print {\n\n/* Define to 1 if you have the `vsnprintf' function. */\n} +print_ternary ?libs/vsnprintf {#define HAVE_VSNPRINTF 1} {/* #undef HAVE_VSNPRINTF */} + +print {\n\n/* Define to 1 if you have the `getcwd' function. */\n} +print_ternary ?libs/fs/getcwd/presents {#define HAVE_GETCWD 1} {/* #undef HAVE_GETCWD */} + +print {\n\n/* Define to 1 if you have the `_getcwd' function. */\n} +print_ternary ?libs/fs/_getcwd/presents {#define HAVE__GETCWD 1} {/* #undef HAVE__GETCWD */} + +print {\n\n/* Define to 1 if you have the `getwd' function. */\n} +print_ternary ?libs/fs/_getwd/presents {#define HAVE_GETWD 1} {/* #undef HAVE_GETWD */} + +print {\n\n/* Define to 1 if you have the header file. */\n} +print_ternary ?libs/gui/gd/presents {#define HAVE_GD_H 1} {/* #undef HAVE_GD_H */} + +print {\n\n/* Define to 1 if you have the `gdImageGif' function. */\n} +print_ternary ?libs/gui/gd/gdImageGif/presents {#define HAVE_GDIMAGEGIF 1} {/* #undef HAVE_GDIMAGEGIF */} + +print {\n\n/* Define to 1 if you have the `gdImageJpeg' function. */\n} +print_ternary ?libs/gui/gd/gdImageJpeg/presents {#define HAVE_GDIMAGEJPEG 1} {/* #undef HAVE_GDIMAGEJPEG */} + +print {\n\n/* Define to 1 if you have the `gdImagePng' function. */\n} +print_ternary ?libs/gui/gd/gdImagePng/presents {#define HAVE_GDIMAGEPNG 1} {/* #undef HAVE_GDIMAGEPNG */} + +print {\n\n/* Define to 1 if you have the `getpwuid' function. */\n} +print_ternary ?libs/userpass/getpwuid/presents {#define HAVE_GETPWUID 1} {/* #undef HAVE_GETPWUID */} + +print {\n\n/* Define to 1 if you have the `rint' function. */\n} +print_ternary ?libs/math/rint/presents {#define HAVE_RINT 1} {/* #undef HAVE_RINT */} + +print {\n\n/* Define to 1 if you have the `round' function. */\n} +print_ternary ?libs/math/round/presents {#define HAVE_ROUND 1} {/* #undef HAVE_ROUND */} + +print {\n\n/* Wrapper for S_ISLNK(x); always return 0 if S_ISLNK doesn't exist */\n} +switch ?/target/libs/fs/stat/macros/S_ISLNK + case {^$} print {#define WRAP_S_ISLNK(x) 0}; end; + default print [@#define WRAP_S_ISLNK(x) @/target/libs/fs/stat/macros/S_ISLNK@(x)@]; end; +end; + +print {\n\n/* Define to 1 if Xinerama is available */\n} +print_ternary ?libs/gui/xinerama/presents {#define HAVE_XINERAMA 1} {/*#undef HAVE_XINERAMA */} + +print {\n\n/* Define to 1 if Xrender is available */\n} +print_ternary ?libs/gui/xrender/presents {#define HAVE_XRENDER 1} {/*#undef HAVE_XRENDER */} + +print {\n\n/* Define to 1 if translation of program messages to the user's native language is requested. */\n} +print_ternary ?/local/pcb/want_nls {#define ENABLE_NLS 1} {/*#undef ENABLE_NLS */} + +print {\n\n/* Define to 1 if we should use windows api for dynamic linking. */\n} +print_ternary ?libs/LoadLibrary/presents {#define USE_LOADLIBRARY 1} {/* #undef USE_LOADLIBRARY */} + +print {\n\n/* Define to 1 if we should use mkdtemp for creating temp files. */\n} +print_ternary ?libs/fs/mkdtemp/presents {#define HAVE_MKDTEMP 1} {/* #undef HAVE_MKDTEMP */} + +print {\n\n/* Define to 1 if you have the `realpath' function. */\n} +print_ternary ?libs/fs/realpath/presents {#define HAVE_REALPATH 1} {/* #undef HAVE_REALPATH */} + +print {\n\n/* Select which mechanism to use for running child processes. */\n} +print_ternary ?/target/libs/proc/wait/presents {#define USE_FORK_WAIT 1} {/* #undef USE_FORK_WAIT */} +print {\n} +print_ternary ?/target/libs/proc/_spawnvp/presents {#define USE_SPAWNVP 1} {/* #undef USE_SPAWNVP */} + +print {\n\n/* Select which mechanism to use for creating a directory. */\n} +print_ternary ?/target/libs/fs/mkdir/presents {#define USE_MKDIR 1} {/* #undef USE_MKDIR */} +print {\n} +print_ternary ?/target/libs/fs/_mkdir/presents {#define USE__MKDIR 1} {/* #undef USE__MKDIR */} +print [@ +#define MKDIR_NUM_ARGS 0@?/target/libs/fs/_mkdir/num_args@@?/target/libs/fs/mkdir/num_args@ +@] + +print {\n\n/* Define whether we have specific signals. */\n} +print_ternary ?signal/names/SIGSEGV/presents {#define PCB_HAVE_SIGSEGV 1} {/* #undef PCB_HAVE_SIGSEGV */} +print {\n} +print_ternary ?signal/names/SIGABRT/presents {#define PCB_HAVE_SIGABRT 1} {/* #undef PCB_HAVE_SIGABRT */} +print {\n} +print_ternary ?signal/names/SIGINT/presents {#define PCB_HAVE_SIGINT 1} {/* #undef PCB_HAVE_SIGINT */} +print {\n} +print_ternary ?signal/names/SIGHUP/presents {#define PCB_HAVE_SIGHUP 1} {/* #undef PCB_HAVE_SIGHUP */} +print {\n} +print_ternary ?signal/names/SIGTERM/presents {#define PCB_HAVE_SIGTERM 1} {/* #undef PCB_HAVE_SIGTERM */} +print {\n} +print_ternary ?signal/names/SIGQUIT/presents {#define PCB_HAVE_SIGQUIT 1} {/* #undef PCB_HAVE_SIGQUIT */} +print {\n} + +print [@ + +/* The host "triplet" - it's really a pair now: machine-os */ +#define HOST "@sys/sysid@" + +/* Directory separator char */ +#define PCB_DIR_SEPARATOR_C '@sys/path_sep@' + +/* Directory separator string */ +#define PCB_DIR_SEPARATOR_S "@sys/path_sep@" + +/* Search path separator string */ +#define PCB_PATH_DELIMETER ":" + +/****************************************************************************/ +/* These are static; they are kept "just in case", for further porting */ + +/* C89 has atexit() */ +#define HAS_ATEXIT 1 + +/* C89 has this */ +#define HAVE_UNISTD_H 1 + +/* Define to 1 if you have the `canonicalize_file_name' function. + It's a GNU extension, assume we don't have it and fall back to + realpath() */ +/* #define HAVE_CANONICALIZE_FILE_NAME 1 */ +/* Define if canonicalize_file_name is not declared in system header files. */ +/* #undef NEED_DECLARATION_CANONICALIZE_FILE_NAME */ + +/****************************************************************************/ +/* Paths */ + +#define PCB_PREFIX "@/local/prefix@" +#define PCBSHAREDIR PCB_PREFIX "/share/pcb-rnd" +#define PCBLIBDIR PCB_PREFIX "/lib/pcb-rnd" + +#define BINDIR PCB_PREFIX "/bin" + +/* Relative path from bindir to exec_prefix */ +#define BINDIR_TO_EXECPREFIX ".." + +/* Version number of package */ +#define PCB_VERSION "@/local/version@" +#define PCB_REVISION "@/local/revision@" + + +/* Define to 1 if you have the `dmalloc' library (-ldmalloc); + (memory debugging without valgrind) */ +@] + +print_ternary libs/sul/dmalloc/presents {#define HAVE_LIBDMALLOC 1} {/*#undef HAVE_LIBDMALLOC */} + +print [@ +/* +The documentation says it's not necessary to include dmalloc.h. +Pros: getting source line info +Cons: can't include from here, needs to be included from the bottom of the #include list from each file +#ifdef HAVE_LIBDMALLOC +#include +#endif +*/ + +@?/local/pcb/include_stdint@ + +/* Coordinate type and properties, as detected by scconfig */ +typedef @/local/pcb/coord_type@ pcb_coord_t; +#define COORD_MAX @/local/pcb/coord_max@ +#define coord_abs @/local/pcb/coord_abs@ + +/* Other autodetected types */ +typedef @/local/pcb/long64@ pcb_long64_t; + +/* the dot-dir: where to save user config under ther user's home; it's used + as ~/DOT_PCB_RND/ */ +#define DOT_PCB_RND "@/local/pcb/dot_pcb_rnd@" + +/* ./configure --workaround requests: */ +@?/local/pcb/workaround_defs@ + +/* Make sure to catch usage of non-portable functions in debug mode + This is in here only because config.h should be included from every source + file. */ +#ifndef NDEBUG +# undef strdup +# undef strndup +# undef snprintf +# undef round +# undef strcasecmp +# define strdup never_use_strdup__use_pcb_strdup +# define strndup never_use_strndup__use_pcb_strndup +# define snprintf never_use_snprintf__use_pcb_snprintf +# define round never_use_round__use_pcb_round +# define strcasecmp never_use_strcasecmp__use_pcb_strcasecmp +# ifndef PCB_SAFE_FS +# undef fopen +# undef popen +# undef system +# undef remove +# undef rename +# define fopen never_use_fopen__use_pcb_fopen +# define popen never_use_popen__use_pcb_popen +# define system never_use_system__use_pcb_system +# define remove never_use_remove__use_pcb_remove +# define rename never_use_rename__use_pcb_rename +# endif + +#endif + +#endif +@] Index: 1.2.8/configure =================================================================== --- 1.2.8/configure (nonexistent) +++ 1.2.8/configure (revision 15490) @@ -0,0 +1,4 @@ +#!/bin/sh +cd scconfig +make +./configure "$@" Property changes on: 1.2.8/configure ___________________________________________________________________ Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: 1.2.8/data/Makefile =================================================================== --- 1.2.8/data/Makefile (nonexistent) +++ 1.2.8/data/Makefile (revision 15490) @@ -0,0 +1,64 @@ +# This Makefile is a plain old hand written one; all configuration settings +# are included from ../Makefile.conf which is scconfig generated + +theme = hicolor + +app_icon = pcb + +mime_icons = \ + application-x-pcb-layout \ + application-x-pcb-footprint \ + application-x-pcb-netlist \ + application-x-gerber \ + application-x-excellon + +app_icon_files = \ + $(app_icon:%=%-48.png) \ + $(app_icon:%=%.svg) +# $(app_icon:%=%-16.png) +# $(app_icon:%=%-22.png) +# $(app_icon:%=%-24.png) +# $(app_icon:%=%-32.png) + +mime_icon_files = \ + $(mime_icons:%=%-16.png) \ + $(mime_icons:%=%-22.png) \ + $(mime_icons:%=%-24.png) \ + $(mime_icons:%=%-32.png) \ + $(mime_icons:%=%-48.png) \ + $(mime_icons:%=%.svg) + +mime_icon_sources = \ + $(mime_icons:%=%-16.svg) \ + $(mime_icons:%=%-22.svg) \ + $(mime_icons:%=%-32.svg) \ + $(mime_icons:%=%-48.svg) + +theme_icons = \ + $(mime_icon_files:%=mimetypes,%) \ + $(app_icon_files:%=apps,%) + +all: + +install_: + ./icon-theme-installer \ + -t $(theme) \ + -m "$(MKDIR)" \ + -s `pwd` \ + -d x \ + -b "$(themedir)" \ + -x "$(CPC)" \ + -i $(theme_icons) + +install: + $(MAKE) install_ CPC="$(CP)" + +linstall: + $(MAKE) install_ CPC="$(LN)" + +uninstall: + $(RM) $(DOCDIR)/examples/tut1.pcb + +include ../Makefile.conf +themedir=$(DATADIR)/icons/$(theme) + Index: 1.2.8/data/README =================================================================== --- 1.2.8/data/README (nonexistent) +++ 1.2.8/data/README (revision 15490) @@ -0,0 +1,56 @@ + +PCB +------------------------------------------------------------------------------ + +README for icon data + +This file describes where the various icons came from and their license. + +The PCB layout and gerber icons and mime registration data were contributed +by Tomaz Solc, and subsequently modified by Peter Clifton, including +creation of an excellon icon file with a ruler element taken from +Tomaz's gerber icon. The footprint and netlist icons were drawn by +Peter Clifton. + +The page outline featured in all the above icons is from the GNOME icon +theme's text-x-generic icon by Jakub Steiner. + +The icons are licensed under the GPL2 license. + +Scalable versions: (128x128 canvas for the "hicolor" fallback theme). +These were scaled up from the 48x48 pixel targeted version. + +application-x-excellon.svg +application-x-gerber.svg +application-x-pcb-footprint.svg +application-x-pcb-layout.svg +application-x-pcb-netlist.svg + +Pixel targeted varients: + +application-x-excellon-{16,22,32,48}.svg +application-x-gerber-{16,22,32,48}.svg +application-x-pcb-footprint-{16,22,32,48}.svg +application-x-pcb-layout-{16,22,32,48}.svg +application-x-pcb-netlist-{16,22,32,48}.svg + + +PNG versions of the above icons were exported from Inkscape. The 24x24 pixel +versions are copied from the 22x22 version, with a 1 pixel border added: + +application-x-excellon-{16,22,24,32,48}.png +application-x-gerber-{16,22,24,32,48}.png +application-x-pcb-footprint-{16,22,24,32,48}.png +application-x-pcb-layout-{16,22,24,32,48}.png +application-x-pcb-netlist-{16,22,24,32,48}.png + +The script "regen_files" will re-export the SVG drawings to PNG and also +regenerate the windows icon file. + +The PCB application icons were created by Peter Clifton, based upon the +Gnome "text-editor" icon created by Lapo Calamandrei. The PCB specific +additions are from the mime-type icons by Tomaz Solc. +These icons are licensed under the GPL2 license. + +pcb.svg +pcb-48.png Index: 1.2.8/data/application-x-excellon-16.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: 1.2.8/data/application-x-excellon-16.png =================================================================== --- 1.2.8/data/application-x-excellon-16.png (nonexistent) +++ 1.2.8/data/application-x-excellon-16.png (revision 15490) Property changes on: 1.2.8/data/application-x-excellon-16.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: 1.2.8/data/application-x-excellon-16.svg =================================================================== --- 1.2.8/data/application-x-excellon-16.svg (nonexistent) +++ 1.2.8/data/application-x-excellon-16.svg (revision 15490) @@ -0,0 +1,1271 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Excellon file + + + + + + + Peter Clifton, Jakub Steiner + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: 1.2.8/data/application-x-excellon-22.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: 1.2.8/data/application-x-excellon-22.png =================================================================== --- 1.2.8/data/application-x-excellon-22.png (nonexistent) +++ 1.2.8/data/application-x-excellon-22.png (revision 15490) Property changes on: 1.2.8/data/application-x-excellon-22.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: 1.2.8/data/application-x-excellon-22.svg =================================================================== --- 1.2.8/data/application-x-excellon-22.svg (nonexistent) +++ 1.2.8/data/application-x-excellon-22.svg (revision 15490) @@ -0,0 +1,1571 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Excellon file + + + + + + + Peter Clifton, Tomaz Solc, Jakub Steiner + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: 1.2.8/data/application-x-excellon-24.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: 1.2.8/data/application-x-excellon-24.png =================================================================== --- 1.2.8/data/application-x-excellon-24.png (nonexistent) +++ 1.2.8/data/application-x-excellon-24.png (revision 15490) Property changes on: 1.2.8/data/application-x-excellon-24.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: 1.2.8/data/application-x-excellon-32.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: 1.2.8/data/application-x-excellon-32.png =================================================================== --- 1.2.8/data/application-x-excellon-32.png (nonexistent) +++ 1.2.8/data/application-x-excellon-32.png (revision 15490) Property changes on: 1.2.8/data/application-x-excellon-32.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: 1.2.8/data/application-x-excellon-32.svg =================================================================== --- 1.2.8/data/application-x-excellon-32.svg (nonexistent) +++ 1.2.8/data/application-x-excellon-32.svg (revision 15490) @@ -0,0 +1,1406 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Excellon file + + + + + + + Peter Clifton, Tomaz Solc, Jakub Steiner + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: 1.2.8/data/application-x-excellon-48.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: 1.2.8/data/application-x-excellon-48.png =================================================================== --- 1.2.8/data/application-x-excellon-48.png (nonexistent) +++ 1.2.8/data/application-x-excellon-48.png (revision 15490) Property changes on: 1.2.8/data/application-x-excellon-48.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: 1.2.8/data/application-x-excellon-48.svg =================================================================== --- 1.2.8/data/application-x-excellon-48.svg (nonexistent) +++ 1.2.8/data/application-x-excellon-48.svg (revision 15490) @@ -0,0 +1,1283 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Excellon file + + + + + + + Peter Clifton, Tomaz Solc, Jakub Steiner + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: 1.2.8/data/application-x-excellon.svg =================================================================== --- 1.2.8/data/application-x-excellon.svg (nonexistent) +++ 1.2.8/data/application-x-excellon.svg (revision 15490) @@ -0,0 +1,1289 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Excellon file + + + + + + + Peter Clifton, Tomaz Solc, Jakub Steiner + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: 1.2.8/data/application-x-gerber-16.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: 1.2.8/data/application-x-gerber-16.png =================================================================== --- 1.2.8/data/application-x-gerber-16.png (nonexistent) +++ 1.2.8/data/application-x-gerber-16.png (revision 15490) Property changes on: 1.2.8/data/application-x-gerber-16.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: 1.2.8/data/application-x-gerber-16.svg =================================================================== --- 1.2.8/data/application-x-gerber-16.svg (nonexistent) +++ 1.2.8/data/application-x-gerber-16.svg (revision 15490) @@ -0,0 +1,543 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Gerber file + + + + + + + Peter Clifton, Tomaz Solc, Jakub Steiner + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: 1.2.8/data/application-x-gerber-22.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: 1.2.8/data/application-x-gerber-22.png =================================================================== --- 1.2.8/data/application-x-gerber-22.png (nonexistent) +++ 1.2.8/data/application-x-gerber-22.png (revision 15490) Property changes on: 1.2.8/data/application-x-gerber-22.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: 1.2.8/data/application-x-gerber-22.svg =================================================================== --- 1.2.8/data/application-x-gerber-22.svg (nonexistent) +++ 1.2.8/data/application-x-gerber-22.svg (revision 15490) @@ -0,0 +1,608 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Gerber file + + + + + + + Peter Clifton, Tomaz Solc, Jakub Steiner + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: 1.2.8/data/application-x-gerber-24.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: 1.2.8/data/application-x-gerber-24.png =================================================================== --- 1.2.8/data/application-x-gerber-24.png (nonexistent) +++ 1.2.8/data/application-x-gerber-24.png (revision 15490) Property changes on: 1.2.8/data/application-x-gerber-24.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: 1.2.8/data/application-x-gerber-32.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: 1.2.8/data/application-x-gerber-32.png =================================================================== --- 1.2.8/data/application-x-gerber-32.png (nonexistent) +++ 1.2.8/data/application-x-gerber-32.png (revision 15490) Property changes on: 1.2.8/data/application-x-gerber-32.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: 1.2.8/data/application-x-gerber-32.svg =================================================================== --- 1.2.8/data/application-x-gerber-32.svg (nonexistent) +++ 1.2.8/data/application-x-gerber-32.svg (revision 15490) @@ -0,0 +1,544 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Gerber file + + + + + + + Peter Clifton, Tomaz Solc, Jakub Steiner + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: 1.2.8/data/application-x-gerber-48.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: 1.2.8/data/application-x-gerber-48.png =================================================================== --- 1.2.8/data/application-x-gerber-48.png (nonexistent) +++ 1.2.8/data/application-x-gerber-48.png (revision 15490) Property changes on: 1.2.8/data/application-x-gerber-48.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: 1.2.8/data/application-x-gerber-48.svg =================================================================== --- 1.2.8/data/application-x-gerber-48.svg (nonexistent) +++ 1.2.8/data/application-x-gerber-48.svg (revision 15490) @@ -0,0 +1,707 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Gerber file + + + + + + + Peter Clifton, Tomaz Solc, Jakub Steiner + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: 1.2.8/data/application-x-gerber.svg =================================================================== --- 1.2.8/data/application-x-gerber.svg (nonexistent) +++ 1.2.8/data/application-x-gerber.svg (revision 15490) @@ -0,0 +1,712 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Gerber file + + + + + + + Peter Clifton, Tomaz Solc, Jakub Steiner + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: 1.2.8/data/application-x-pcb-footprint-16.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: 1.2.8/data/application-x-pcb-footprint-16.png =================================================================== --- 1.2.8/data/application-x-pcb-footprint-16.png (nonexistent) +++ 1.2.8/data/application-x-pcb-footprint-16.png (revision 15490) Property changes on: 1.2.8/data/application-x-pcb-footprint-16.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: 1.2.8/data/application-x-pcb-footprint-16.svg =================================================================== --- 1.2.8/data/application-x-pcb-footprint-16.svg (nonexistent) +++ 1.2.8/data/application-x-pcb-footprint-16.svg (revision 15490) @@ -0,0 +1,554 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + PCB footprint + + + + + + + Peter Clifton, Jakub Steiner + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: 1.2.8/data/application-x-pcb-footprint-22.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: 1.2.8/data/application-x-pcb-footprint-22.png =================================================================== --- 1.2.8/data/application-x-pcb-footprint-22.png (nonexistent) +++ 1.2.8/data/application-x-pcb-footprint-22.png (revision 15490) Property changes on: 1.2.8/data/application-x-pcb-footprint-22.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: 1.2.8/data/application-x-pcb-footprint-22.svg =================================================================== --- 1.2.8/data/application-x-pcb-footprint-22.svg (nonexistent) +++ 1.2.8/data/application-x-pcb-footprint-22.svg (revision 15490) @@ -0,0 +1,573 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + PCB footprint + + + + + + + Peter Clifton, Jakub Steiner + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: 1.2.8/data/application-x-pcb-footprint-24.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: 1.2.8/data/application-x-pcb-footprint-24.png =================================================================== --- 1.2.8/data/application-x-pcb-footprint-24.png (nonexistent) +++ 1.2.8/data/application-x-pcb-footprint-24.png (revision 15490) Property changes on: 1.2.8/data/application-x-pcb-footprint-24.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: 1.2.8/data/application-x-pcb-footprint-32.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: 1.2.8/data/application-x-pcb-footprint-32.png =================================================================== --- 1.2.8/data/application-x-pcb-footprint-32.png (nonexistent) +++ 1.2.8/data/application-x-pcb-footprint-32.png (revision 15490) Property changes on: 1.2.8/data/application-x-pcb-footprint-32.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: 1.2.8/data/application-x-pcb-footprint-32.svg =================================================================== --- 1.2.8/data/application-x-pcb-footprint-32.svg (nonexistent) +++ 1.2.8/data/application-x-pcb-footprint-32.svg (revision 15490) @@ -0,0 +1,2302 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + PCB footprint + + + + + + + Peter Clifton, Jakub Steiner + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: 1.2.8/data/application-x-pcb-footprint-48.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: 1.2.8/data/application-x-pcb-footprint-48.png =================================================================== --- 1.2.8/data/application-x-pcb-footprint-48.png (nonexistent) +++ 1.2.8/data/application-x-pcb-footprint-48.png (revision 15490) Property changes on: 1.2.8/data/application-x-pcb-footprint-48.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: 1.2.8/data/application-x-pcb-footprint-48.svg =================================================================== --- 1.2.8/data/application-x-pcb-footprint-48.svg (nonexistent) +++ 1.2.8/data/application-x-pcb-footprint-48.svg (revision 15490) @@ -0,0 +1,674 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + PCB footprint + + + + + + + Peter Clifton, Jakub Steiner + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: 1.2.8/data/application-x-pcb-footprint.svg =================================================================== --- 1.2.8/data/application-x-pcb-footprint.svg (nonexistent) +++ 1.2.8/data/application-x-pcb-footprint.svg (revision 15490) @@ -0,0 +1,680 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + PCB footprint + + + + + + + Peter Clifton, Jakub Steiner + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: 1.2.8/data/application-x-pcb-layout-16.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: 1.2.8/data/application-x-pcb-layout-16.png =================================================================== --- 1.2.8/data/application-x-pcb-layout-16.png (nonexistent) +++ 1.2.8/data/application-x-pcb-layout-16.png (revision 15490) Property changes on: 1.2.8/data/application-x-pcb-layout-16.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: 1.2.8/data/application-x-pcb-layout-16.svg =================================================================== --- 1.2.8/data/application-x-pcb-layout-16.svg (nonexistent) +++ 1.2.8/data/application-x-pcb-layout-16.svg (revision 15490) @@ -0,0 +1,1333 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + PCB layout + + + + + + + Peter Clifton, Tomaz Solc, Jakub Steiner + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: 1.2.8/data/application-x-pcb-layout-22.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: 1.2.8/data/application-x-pcb-layout-22.png =================================================================== --- 1.2.8/data/application-x-pcb-layout-22.png (nonexistent) +++ 1.2.8/data/application-x-pcb-layout-22.png (revision 15490) Property changes on: 1.2.8/data/application-x-pcb-layout-22.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: 1.2.8/data/application-x-pcb-layout-22.svg =================================================================== --- 1.2.8/data/application-x-pcb-layout-22.svg (nonexistent) +++ 1.2.8/data/application-x-pcb-layout-22.svg (revision 15490) @@ -0,0 +1,1423 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + PCB layout + + + + + + + Peter Clifton, Tomaz Solc, Jakub Steiner + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: 1.2.8/data/application-x-pcb-layout-24.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: 1.2.8/data/application-x-pcb-layout-24.png =================================================================== --- 1.2.8/data/application-x-pcb-layout-24.png (nonexistent) +++ 1.2.8/data/application-x-pcb-layout-24.png (revision 15490) Property changes on: 1.2.8/data/application-x-pcb-layout-24.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: 1.2.8/data/application-x-pcb-layout-32.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: 1.2.8/data/application-x-pcb-layout-32.png =================================================================== --- 1.2.8/data/application-x-pcb-layout-32.png (nonexistent) +++ 1.2.8/data/application-x-pcb-layout-32.png (revision 15490) Property changes on: 1.2.8/data/application-x-pcb-layout-32.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: 1.2.8/data/application-x-pcb-layout-32.svg =================================================================== --- 1.2.8/data/application-x-pcb-layout-32.svg (nonexistent) +++ 1.2.8/data/application-x-pcb-layout-32.svg (revision 15490) @@ -0,0 +1,1362 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + PCB layout + + + + + + + Peter Clifton, Tomaz Solc, Jakub Steiner + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: 1.2.8/data/application-x-pcb-layout-48.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: 1.2.8/data/application-x-pcb-layout-48.png =================================================================== --- 1.2.8/data/application-x-pcb-layout-48.png (nonexistent) +++ 1.2.8/data/application-x-pcb-layout-48.png (revision 15490) Property changes on: 1.2.8/data/application-x-pcb-layout-48.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: 1.2.8/data/application-x-pcb-layout-48.svg =================================================================== --- 1.2.8/data/application-x-pcb-layout-48.svg (nonexistent) +++ 1.2.8/data/application-x-pcb-layout-48.svg (revision 15490) @@ -0,0 +1,1341 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + PCB layout + + + + + + + Peter Clifton, Tomaz Solc, Jakub Steiner + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: 1.2.8/data/application-x-pcb-layout.svg =================================================================== --- 1.2.8/data/application-x-pcb-layout.svg (nonexistent) +++ 1.2.8/data/application-x-pcb-layout.svg (revision 15490) @@ -0,0 +1,1346 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + PCB layout + + + + + + + Peter Clifton, Tomaz Solc, Jakub Steiner + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: 1.2.8/data/application-x-pcb-netlist-16.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: 1.2.8/data/application-x-pcb-netlist-16.png =================================================================== --- 1.2.8/data/application-x-pcb-netlist-16.png (nonexistent) +++ 1.2.8/data/application-x-pcb-netlist-16.png (revision 15490) Property changes on: 1.2.8/data/application-x-pcb-netlist-16.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: 1.2.8/data/application-x-pcb-netlist-16.svg =================================================================== --- 1.2.8/data/application-x-pcb-netlist-16.svg (nonexistent) +++ 1.2.8/data/application-x-pcb-netlist-16.svg (revision 15490) @@ -0,0 +1,530 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + PCB netlist + + + + + + + Peter Clifton, Jakub Steiner + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: 1.2.8/data/application-x-pcb-netlist-22.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: 1.2.8/data/application-x-pcb-netlist-22.png =================================================================== --- 1.2.8/data/application-x-pcb-netlist-22.png (nonexistent) +++ 1.2.8/data/application-x-pcb-netlist-22.png (revision 15490) Property changes on: 1.2.8/data/application-x-pcb-netlist-22.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: 1.2.8/data/application-x-pcb-netlist-22.svg =================================================================== --- 1.2.8/data/application-x-pcb-netlist-22.svg (nonexistent) +++ 1.2.8/data/application-x-pcb-netlist-22.svg (revision 15490) @@ -0,0 +1,567 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + PCB netlist + + + + + + + Peter Clifton, Jakub Steiner + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: 1.2.8/data/application-x-pcb-netlist-24.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: 1.2.8/data/application-x-pcb-netlist-24.png =================================================================== --- 1.2.8/data/application-x-pcb-netlist-24.png (nonexistent) +++ 1.2.8/data/application-x-pcb-netlist-24.png (revision 15490) Property changes on: 1.2.8/data/application-x-pcb-netlist-24.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: 1.2.8/data/application-x-pcb-netlist-32.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: 1.2.8/data/application-x-pcb-netlist-32.png =================================================================== --- 1.2.8/data/application-x-pcb-netlist-32.png (nonexistent) +++ 1.2.8/data/application-x-pcb-netlist-32.png (revision 15490) Property changes on: 1.2.8/data/application-x-pcb-netlist-32.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: 1.2.8/data/application-x-pcb-netlist-32.svg =================================================================== --- 1.2.8/data/application-x-pcb-netlist-32.svg (nonexistent) +++ 1.2.8/data/application-x-pcb-netlist-32.svg (revision 15490) @@ -0,0 +1,1310 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + PCB netlist + + + + + + + Peter Clifton, Jakub Steiner + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: 1.2.8/data/application-x-pcb-netlist-48.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: 1.2.8/data/application-x-pcb-netlist-48.png =================================================================== --- 1.2.8/data/application-x-pcb-netlist-48.png (nonexistent) +++ 1.2.8/data/application-x-pcb-netlist-48.png (revision 15490) Property changes on: 1.2.8/data/application-x-pcb-netlist-48.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: 1.2.8/data/application-x-pcb-netlist-48.svg =================================================================== --- 1.2.8/data/application-x-pcb-netlist-48.svg (nonexistent) +++ 1.2.8/data/application-x-pcb-netlist-48.svg (revision 15490) @@ -0,0 +1,451 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + PCB netlist + + + + + + + Peter Clifton, Jakub Steiner + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: 1.2.8/data/application-x-pcb-netlist.svg =================================================================== --- 1.2.8/data/application-x-pcb-netlist.svg (nonexistent) +++ 1.2.8/data/application-x-pcb-netlist.svg (revision 15490) @@ -0,0 +1,459 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + PCB netlist + + + + + + + Peter Clifton, Jakub Steiner + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: 1.2.8/data/icon-theme-installer =================================================================== --- 1.2.8/data/icon-theme-installer (nonexistent) +++ 1.2.8/data/icon-theme-installer (revision 15490) @@ -0,0 +1,183 @@ +#!/bin/sh + +# icon-theme-installer +# Copyright (C) 2006 Novell, Inc. +# Written by Aaron Bockover +# Licensed under the MIT/X11 license +# +# Modified by Peter Clifton to allow icons with numerals in the filename +# +# This script is meant to be invoked from within a Makefile/Makefile.am +# in the install-data-local and uninstall-data sections. It handles the +# task of properly installing icons into the icon theme. It requires a +# few arguments to set up its environment, and a list of files to be +# installed. The format of the file list is critical: +# +# , +# +# apps,music-player-banshee.svg +# apps,music-player-banshee-16.png +# apps,music-player-banshee-22.png +# +# is the icon theme category, for instance, apps, devices, +# actions, emblems... +# +# must have a basename in the form of: +# +# proper-theme-name[-]. +# +# Where should be either nothing, which will default to scalable +# or \-[0-9]{2}, which will expand to x. For example: +# +# music-player-banshee-16.png +# +# The here is -16 and will expand to 16x16 per the icon theme spec +# +# What follows is an example Makefile.am for icon theme installation: +# +# --------------- +# theme=hicolor +# themedir=$(datadir)/icons/$(theme) +# theme_icons = \ +# apps,music-player-banshee.svg \ +# apps,music-player-banshee-16.png \ +# apps,music-player-banshee-22.png \ +# apps,music-player-banshee-24.png \ +# apps,music-player-banshee-32.png +# +# install_icon_exec = $(top_srcdir)/build/icon-theme-installer -t $(theme) -s $(srcdir) -d "x$(DESTDIR)" -b $(themedir) -m "$(mkinstalldirs)" -x "$(INSTALL_DATA)" +# install-data-local: +# $(install_icon_exec) -i $(theme_icons) +# +# uninstall-hook: +# $(install_icon_exec) -u $(theme_icons) +# +# MAINTAINERCLEANFILES = Makefile.in +# EXTRA_DIST = $(wildcard *.svg *.png) +# --------------- +# +# Arguments to this program: +# +# -i : Install +# -u : Uninstall +# -t : Theme name (hicolor) +# -b : Theme installation dest directory [x$(DESTDIR)] - Always prefix +# this argument with x; it will be stripped but will act as a +# placeholder for zero $DESTDIRs (only set by packagers) +# -d : Theme installation directory [$(hicolordir)] +# -s : Source directory [$(srcdir)] +# -m : Command to exec for directory creation [$(mkinstalldirs)] +# -x : Command to exec for single file installation [$(INSTALL_DATA)] +# : All remainging should be category,filename pairs + +while getopts "iut:b:d:s:m:x:" flag; do + case "$flag" in + i) INSTALL=yes ;; + u) UNINSTALL=yes ;; + t) THEME_NAME=$OPTARG ;; + d) INSTALL_DEST_DIR="`echo $OPTARG | sed 's;^x;;'`" ;; + b) INSTALL_BASE_DIR=$OPTARG ;; + s) SRC_DIR=$OPTARG ;; + m) MKINSTALLDIRS_EXEC=$OPTARG ;; + x) INSTALL_DATA_EXEC=$OPTARG ;; + esac +done + +shift `expr $OPTIND - 1` + +if test "x$INSTALL" = "xyes" -a "x$UNINSTALL" = "xyes"; then + echo "Cannot pass both -i and -u" + exit 1 +elif test "x$INSTALL" = "x" -a "x$UNINSTALL" = "x"; then + echo "Must path either -i or -u" + exit 1 +fi + +if test -z "$THEME_NAME"; then + echo "Theme name required (-t hicolor)" + exit 1 +fi + +if test -z "$INSTALL_BASE_DIR"; then + echo "Base theme directory required [-d \$(hicolordir)]" + exit 1 +fi + +#if test ! -x `echo "$MKINSTALLDIRS_EXEC" | cut -f1 -d' '`; then +# echo "Cannot find '$MKINSTALLDIRS_EXEC'; You probably want to pass -m \$(mkinstalldirs)" +# exit 1 +#fi + +#if test ! -x `echo "$INSTALL_DATA_EXEC" | cut -f1 -d' '`; then +# echo "Cannot find '$INSTALL_DATA_EXEC'; You probably want to pass -x \$(INSTALL_DATA)" +# exit 1 +#fi + +if test -z "$SRC_DIR"; then + SRC_DIR=. +fi + +for icon in $@; do + size=`echo $icon | sed -n 's/.*-\([0-9]*\).*/\1/p'` + category=`echo $icon | cut -d, -f1` + build_name=`echo $icon | cut -d, -f2` + install_name=`echo $build_name | sed 's/-[0-9]\+//g'` + install_name=`basename $install_name` + + if test -z $size; then + size=scalable; + else + size=${size}x${size}; + fi + + install_dir=${INSTALL_DEST_DIR}${INSTALL_BASE_DIR}/$size/$category + install_path=$install_dir/$install_name + + if test "x$INSTALL" = "xyes"; then + echo "Installing $size $install_name into $THEME_NAME icon theme" + + $MKINSTALLDIRS_EXEC $install_dir || { + echo "Failed to create directory $install_dir" + exit 1 + } + + $INSTALL_DATA_EXEC $SRC_DIR/$build_name $install_path || { + echo "Failed to install $SRC_DIR/$build_name into $install_path" + exit 1 + } + + if test ! -e $install_path; then + echo "Failed to install $SRC_DIR/$build_name into $install_path" + exit 1 + fi + else + if test -e $install_path; then + echo "Removing $size $install_name from $THEME_NAME icon theme" + + rm $install_path || { + echo "Failed to remove $install_path" + exit 1 + } + fi + fi +done + +if test "x$INSTALL" = "xyes"; then + gtk_update_icon_cache_bin="`(which gtk-update-icon-cache || echo /opt/gnome/bin/gtk-update-icon-cache)2>/dev/null`" + gtk_update_icon_cache_bin="${GTK_UPDATE_ICON_CACHE_BIN:-$gtk_update_icon_cache_bin}" + + gtk_update_icon_cache="$gtk_update_icon_cache_bin -f -t $INSTALL_BASE_DIR" + + if test -z "$INSTALL_DEST_DIR"; then + if test -x $gtk_update_icon_cache_bin; then + echo "Updating GTK icon cache" + $gtk_update_icon_cache + else + echo "*** Icon cache not updated. Could not execute $gtk_update_icon_cache_bin" + fi + else + echo "*** Icon cache not updated. After install, run this:" + echo "*** $gtk_update_icon_cache" + fi +fi + Property changes on: 1.2.8/data/icon-theme-installer ___________________________________________________________________ Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: 1.2.8/data/pcb-48.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: 1.2.8/data/pcb-48.png =================================================================== --- 1.2.8/data/pcb-48.png (nonexistent) +++ 1.2.8/data/pcb-48.png (revision 15490) Property changes on: 1.2.8/data/pcb-48.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: 1.2.8/data/pcb.desktop =================================================================== --- 1.2.8/data/pcb.desktop (nonexistent) +++ 1.2.8/data/pcb.desktop (revision 15490) @@ -0,0 +1,10 @@ +[Desktop Entry] +Version=1.0 +Name=pcb-rnd PCB Designer +GenericName=PCB Design +Comment=Create and edit printed circuit board designs +Type=Application +Exec=pcb-rnd %f +Icon=pcb +MimeType=application/x-pcb-layout;application/x-pcb-footprint; +Categories=Engineering;Electronics; Index: 1.2.8/data/pcb.svg =================================================================== --- 1.2.8/data/pcb.svg (nonexistent) +++ 1.2.8/data/pcb.svg (revision 15490) @@ -0,0 +1,1070 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + Lapo Calamandrei + + + + Text editor + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: 1.2.8/data/pcb.xml =================================================================== --- 1.2.8/data/pcb.xml (nonexistent) +++ 1.2.8/data/pcb.xml (revision 15490) @@ -0,0 +1,40 @@ + + + + + PCB layout + + + + + + + + PCB footprint + + + + + + + + PCB netlist + + + + + Gerber file + + + + + + + + Excellon drill file + + + + + + Index: 1.2.8/data/pcb_icon.ico =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: 1.2.8/data/pcb_icon.ico =================================================================== --- 1.2.8/data/pcb_icon.ico (nonexistent) +++ 1.2.8/data/pcb_icon.ico (revision 15490) Property changes on: 1.2.8/data/pcb_icon.ico ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: 1.2.8/data/regen_files =================================================================== --- 1.2.8/data/regen_files (nonexistent) +++ 1.2.8/data/regen_files (revision 15490) @@ -0,0 +1,165 @@ +#!/bin/sh +# + +CONVERT=${CONVERT:-convert} +COMPOSITE=${COMPOSITE:-composite} +INKSCAPE=${INKSCAPE:-inkscape} +PPMTOWINICON=${PPMTOWINICON:-ppmtowinicon} + +do_inkscape=yes +do_convert=yes +do_winicon=yes + +usage() { +cat << EOF + +$0 -- Regenerate desktop icon files and windows icon files + +Options + + --help Displays this message and exits + + --skip-png Skips the regeneration of the .png file(s) + + --skip-winicon Skips the regneration of the Windows icon file(s) + +EOF + +} + +while test $# -ne 0 ; do + case $1 in + --help) + usage + exit 0 + ;; + + --skip-png) + do_inkscape=no + shift + ;; + + --skip-winicon) + do_convert=no + do_winicon=no + shift + ;; + + -*) + echo "$0: Unknown option $1" + usage + exit 1 + ;; + + *) + break + ;; + esac +done + +if test $? -ne 0 ; then + usage + exit 1 +fi + +## +## Export the SVG graphics +## + +# see if we have inkscape +if test $do_inkscape = yes ; then +${INKSCAPE} --version 2>&1 >/dev/null +if test $? -ne 0 ; then + echo "\"${INKSCAPE} --version\" failed." + echo "Make sure that inkscape is installed and functional on your system." + echo "Skipping the SVG -> PNG conversion." + do_inkscape=no +fi +fi + +if test $do_inkscape = yes ; then + echo "Export SVG graphics to png..." + + for r in 16 22 24 32 48 ; do + case ${r} in + 24) + x=-1 + y=23 + rs=22 + ;; + *) + x=0 + y=${r} + rs=${r} + ;; + esac + for f in *-${rs}.svg ; do + fb=`basename ${f} ${rs}.svg` + p="${fb}${r}.png" + echo "${f} -> ${p}" + ${INKSCAPE} --export-png=${p} --export-area=${x}:${x}:${y}:${y} ${f} + done + done +fi + +## +## Generate the windows icon file +## + +app_icon="application-x-pcb-layout" + +if test $do_convert = yes ; then +# see if we have ImageMagick +${CONVERT} --version 2>&1 >/dev/null +if test $? -ne 0 ; then + echo "\"${CONVERT} --version\" failed." + echo "Make sure that ImageMagick is installed and functional on your system." + echo "Skipping the PNG -> PPM conversion." + do_convert=no +fi +fi + +if test $do_convert = yes ; then +echo "Creating windows pbm mask files..." +${CONVERT} -channel matte -separate +matte ${app_icon}-48.png - | + ${CONVERT} -threshold 65534 -negate - 48_mask.pbm +${CONVERT} -channel matte -separate +matte ${app_icon}-32.png - | + ${CONVERT} -threshold 65534 -negate - 32_mask.pbm +${CONVERT} -channel matte -separate +matte ${app_icon}-16.png - | + ${CONVERT} -threshold 65534 -negate - 16_mask.pbm + +echo "Creating windows ppm flattened files..." +${CONVERT} -flatten -colors 16 ${app_icon}-48.png 48_16.ppm +${CONVERT} -flatten -colors 256 ${app_icon}-48.png 48_256.ppm +${CONVERT} -flatten -colors 16 ${app_icon}-32.png 32_16.ppm +${CONVERT} -flatten -colors 256 ${app_icon}-32.png 32_256.ppm +${CONVERT} -flatten -colors 16 ${app_icon}-16.png 16_16.ppm +${CONVERT} -flatten -colors 256 ${app_icon}-16.png 16_256.ppm +fi + +# see if we have netpbm +if test $do_winicon = yes ; then +${PPMTOWINICON} --version 2>&1 >/dev/null +if test $? -ne 0 ; then + echo "\"${PPMTOWINICON} --version\" failed." + echo "Make sure that netpbm is installed and functional on your system." + echo "Skipping the pbm -> windows icon conversion." + do_winicon=no +fi +fi + +if test $do_winicon = yes ; then +echo "Creating windows icon file..." +${PPMTOWINICON} -output pcb_icon.ico -andpgms\ + 48_16.ppm 48_mask.pbm 48_256.ppm 48_mask.pbm\ + 32_16.ppm 32_mask.pbm 32_256.ppm 32_mask.pbm\ + 16_16.ppm 16_mask.pbm 16_256.ppm 16_mask.pbm +fi + +rm -f \ + 48_16.ppm 48_256.ppm 48_mask.pbm\ + 32_16.ppm 32_256.ppm 32_mask.pbm\ + 16_16.ppm 16_256.ppm 16_mask.pbm + +echo "All done" + Property changes on: 1.2.8/data/regen_files ___________________________________________________________________ Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: 1.2.8/data/x-excellon.desktop =================================================================== --- 1.2.8/data/x-excellon.desktop (nonexistent) +++ 1.2.8/data/x-excellon.desktop (revision 15490) @@ -0,0 +1,8 @@ +[Desktop Entry] +Encoding=UTF-8 +Comment=Excellon drill file +MimeType=application/x-excellon +Type=MimeType +Icon=application-x-excellon +Patterns=*.cnc +X-KDE-IsAlso=text/plain Index: 1.2.8/data/x-gerber.desktop =================================================================== --- 1.2.8/data/x-gerber.desktop (nonexistent) +++ 1.2.8/data/x-gerber.desktop (revision 15490) @@ -0,0 +1,8 @@ +[Desktop Entry] +Encoding=UTF-8 +Comment=Gerber file +MimeType=application/x-gerber +Type=MimeType +Icon=application-x-gerber +Patterns=*.gbr +X-KDE-IsAlso=text/plain Index: 1.2.8/data/x-pcb-footprint.desktop =================================================================== --- 1.2.8/data/x-pcb-footprint.desktop (nonexistent) +++ 1.2.8/data/x-pcb-footprint.desktop (revision 15490) @@ -0,0 +1,8 @@ +[Desktop Entry] +Encoding=UTF-8 +Comment=PCB footprint +MimeType=application/x-pcb-footprint +Type=MimeType +Icon=application-x-pcb-footprint +Patterns=*.fp +X-KDE-IsAlso=text/plain Index: 1.2.8/data/x-pcb-layout.desktop =================================================================== --- 1.2.8/data/x-pcb-layout.desktop (nonexistent) +++ 1.2.8/data/x-pcb-layout.desktop (revision 15490) @@ -0,0 +1,8 @@ +[Desktop Entry] +Encoding=UTF-8 +Comment=PCB layout +MimeType=application/x-pcb-layout +Type=MimeType +Icon=application-x-pcb-layout +Patterns=*.pcb +X-KDE-IsAlso=text/plain Index: 1.2.8/data/x-pcb-netlist.desktop =================================================================== --- 1.2.8/data/x-pcb-netlist.desktop (nonexistent) +++ 1.2.8/data/x-pcb-netlist.desktop (revision 15490) @@ -0,0 +1,8 @@ +[Desktop Entry] +Encoding=UTF-8 +Comment=PCB netlist +MimeType=application/x-pcb-netlist +Type=MimeType +Icon=application-x-pcb-netlist +Patterns=*.net +X-KDE-IsAlso=text/plain Index: 1.2.8/doc/Autostyle.html =================================================================== --- 1.2.8/doc/Autostyle.html (nonexistent) +++ 1.2.8/doc/Autostyle.html (revision 15490) @@ -0,0 +1,16 @@ + + + + + + + +
Main + News + Doc & pool + Support + People + Events & timeline + pcb-rnd [pcb-rnd logo] +
+ Index: 1.2.8/doc/Autostyle.sh =================================================================== --- 1.2.8/doc/Autostyle.sh (nonexistent) +++ 1.2.8/doc/Autostyle.sh (revision 15490) @@ -0,0 +1,77 @@ +#!/bin/sh + +autostyle() +{ + awk -v "template=$1" -v "root=$ROOT" ' + BEGIN { + while((getline < template) > 0) { + if (parse_auto(RES, $0)) { + if (RES["action"] == "begin") + curr = RES["ID"] + else + reset_curr = 1 + } + if (curr != "") + AUTO[curr] = AUTO[curr] var_subs($0) "\n" + if (reset_curr) { + curr = "" + reset_curr = 0 + } + } + } + + function var_subs(s) + { + gsub("[$]ROOT[$]", root, s) + return s + } + + function parse_auto(RES, line ,tmp) + { + if (!(line ~ ".*", "", line) + line = tolower(line) + tmp = line + sub("[ \t].*$", "", tmp) + RES["ID"] = tmp + tmp = line + sub("^[^ \t]*[ \t]*", "", tmp) + RES["action"] = tmp + return 1 + } + + { + if (parse_auto(RES, $0)) { + if (RES["action"] == "begin") + skip = 1 + else if (RES["action"] == "end") { + printf("%s", AUTO[RES["ID"]]) + skip = 0 + } + next + } + } + + (!skip) { print $0 } + + ' +} + +for html in $* +do + case $html in + Autostyle.html) ;; + *) + mv $html $html.tmp + autostyle "Autostyle.html" < $html.tmp > $html + if test $? = 0 + then + rm $html.tmp + else + echo "Failed on $html, keeping the original version." + mv $html.tmp $html + fi + esac +done Property changes on: 1.2.8/doc/Autostyle.sh ___________________________________________________________________ Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: 1.2.8/doc/Makefile =================================================================== --- 1.2.8/doc/Makefile (nonexistent) +++ 1.2.8/doc/Makefile (revision 15490) @@ -0,0 +1,64 @@ +MENU_RES=../src/pcb-menu-gtk.lht ../src/pcb-menu-lesstif.lht +MENU_RES_MKEY=../src/pcb-menu-mkey.lht +KEYLIST=../util/keylist.sh +DEBLIST=../util/devhelpers/deblist.sh +ROOT=.. + +all: keys.html keys_mkey.html features/debian_list.html + ROOT="" ./Autostyle.sh *.html + ROOT="../" ./Autostyle.sh features/*.html + +include ../Makefile.conf + +keys.html: $(MENU_RES) $(KEYLIST) + $(KEYLIST) $(MENU_RES) > keys.html + +keys_mkey.html: $(MENU_RES_MKEY) $(KEYLIST) + $(KEYLIST) $(MENU_RES_MKEY) > keys_mkey.html + +install_main: + $(SCCBOX) $(HOW) *.html *.txt TODO $(DOCDIR)/ + +install: + $(SCCBOX) mkdir -p "$(DOCDIR)" + cd man && $(MAKE) install + cd user && $(MAKE) install + cd tutorials && $(MAKE) install + cd security && $(MAKE) install + cd conf && $(MAKE) install + cd developer && $(MAKE) install + $(MAKE) install_main HOW="install -f -d" + +linstall: + cd man && $(MAKE) linstall + cd user && $(MAKE) linstall + cd tutorials && $(MAKE) linstall + cd security && $(MAKE) linstall + cd conf && $(MAKE) linstall + cd developer && $(MAKE) linstall + $(MAKE) install_main HOW="install -f -l -d" + +uninstall: + cd man && $(MAKE) uninstall + cd user && $(MAKE) uninstall + cd tutorials && $(MAKE) uninstall + cd security && $(MAKE) uninstall + cd conf && $(MAKE) uninstall + cd developer && $(MAKE) uninstall + $(MAKE) install_main HOW="install -f -u -d" + +clean: + cd man && $(MAKE) clean + cd user && $(MAKE) clean + cd tutorials && $(MAKE) clean + cd security && $(MAKE) clean + cd conf && $(MAKE) clean + cd developer && $(MAKE) clean + +distclean: + cd man && $(MAKE) distclean + cd user && $(MAKE) distclean + cd tutorials && $(MAKE) distclean + cd security && $(MAKE) distclean + cd conf && $(MAKE) distclean + cd developer && $(MAKE) distclean Index: 1.2.8/doc/README =================================================================== --- 1.2.8/doc/README (nonexistent) +++ 1.2.8/doc/README (revision 15490) @@ -0,0 +1,12 @@ +pcb-rnd documentation: work in progress. + +Most notable subdirectories: + conf/ documentation of the configuration system + developer/ documentation for developers + devlog/ random thoughts and articles + man/ UNIX manual pages + resources/ logos, screenshots, artwork + security/ notifications about security-critical bugs + tutorials/ my-first-board tutorials + user/ user reference manual + Index: 1.2.8/doc/TODO =================================================================== --- 1.2.8/doc/TODO (nonexistent) +++ 1.2.8/doc/TODO (revision 15490) @@ -0,0 +1,377 @@ +0. For the upcoming release =============================================================================== ++ feature req: show grid in both mm and mil in the status bar [report:smilie] ++ BUG: shape editor dialog: catch layer change and regen the shape [report: SQ6POG] ++ BUG: missing subc snap: + + polygon pad center snap [report: jg] + + subc centroid/origin snap [report: jg] ++ BUG: wrong unit picked on save: bugfiles/wrong_unit.lht; load, save as, compare the coords of the two pad objects; no rounding error but picked mil instead of mm or um; happens on negative coords; see also: pcb-rnd@1253 [report: Karl] ++ BUG: the padstack editor's prototype tab doesn't have an input field for the local clearance [report: jg] ++ BUG: bug_files/jg1_subc.lht: insert from from library ('i') and get an invalid color reg [report: jg] ++ BUG: can't rotate polygon [report: sam] ++ BUG: autorouter assert: bug_files/autorouter.lht [report: barjac] ++ doc: explain the library path -> pool node lib_path_conf [report: Karl] ++ BUG: parametric footprint dialog: do not regen the footprint while the user is editing - revise the timer code [report: sam] + +> if not enough, need to reset the timer in lib_param_chg() ++ BUG: CLI: '-x gerber A.lht --gerberfile=haha' works but '-x gerber --gerberfile=haha A.lht' does not [report: jg] ++ BUG: lesstif layer selector doesn't work on silk and mask and paste (composite layers) [report: Karl] ++ BUG: lesstif: invalidate_all() on config change colors [report: Karl] ++ BUG: lhtpers table save bug: take bug_files/lhtpers_ta.lht, insert a new point on the bottom edge, save, contour table is ruined by lhtpers [report: gpaubert] ++ BUG: import .pcb into buffer: bottom side subcircuits or padstacks end up on top: bug_files/maskbug.pcb and maskbug2.pcb (more mini) [report: Vuokko] +- BUG: make test in tests/conf broke [report: igor2] +- BUG: make test in tests/pcbflags broke [report: igor2] + +2. For later releases =============================================================================== +SUBC: element removal: + - cleanup: remove the parallel PCB_TYPE_* enum and maybe all the type/ptr1/ptr2/ptr3 mess too + - remove Line->Number and *->Number: we use ->term + - "thermal recipe" so a padstack thermal can be put in a subc and it is change with the layer binding [report: jg] + - convert pcblib to subcircuits: + - revise the value attribute - should be empty by default + - change square and octagon (flag based) + - hidename + - after removing pads, remove fillrect from hid - only pads used that; revise the rest of the drawing calls + - BUG: require unique refdes: remove feauture + - remove ToggleHideName() +- autocrop: + - rewrite to use pcb_data_move + - make sure pcb_data_move does one full poly clipping, the way autocrop does +- lihata v5: + - BUG: heavy terminal thermals are lost in 'save as' bug_files/ppclr.lht [report: igor2] + - revise thermal format for all objects: heavy terminals and padstacks + - write.c: build_thermal for heavy terminals + - read.c: parse_thermal_heavy already does this right + - throw out meta/cursor and friends + - add attributes to layer groups + - add attributes to layers + - store thermal on a layer name basis instead of layer ID (padstack) + - remove elements, pins, pads + - warn for saving attribute intnoconn in v4 + - save layer color + - add a subtree where random plugins can store their stuff - probably in a form of an attribute list +- layer color rewrite: + - depends on lihata v5 layer color save/load + - grep for layer TODO, hardwired layer colors + - always use thestored per layer color + - use the config color only if a new layer is created or loaded without known color + - BUG: if a new silk layer is inserted before the top silk, it gets the wrong color (when objects are drawn) and even ruins the original top silk's object color [report: Vuokko] +- find.c rewrite: + - a new "report(NetLength)" should not care about netlists but depend on find.c only + - BUG: GTK layers: move the layer+selected color change from the preferences menu to the layer popup (but this should probably live in gui-config.h) [report: Ade]: + - netlist rewrite + - when no netlist is loaded, new rats can't be drawn [report: agaran] +- DRC rewrite: extend the DRC window to be a generic location list (or rather rewrite with DAD!) + - buttons to select one or all items or all items including locked + - io infra for save incompatibility note with DRC list + - import sch. shouldn't select elements to be removed but put them on a drc list + - display number of items at top of drc window + - export to file + - BUG: DRC hilight: for each drc error, have two groups of objects with different color highlight. SetThing assumes there will be only 1 object; this was broken in the original design [report: Igor2] +- BUG: Rotate a subc and then undo. The undo operation only affects one padstack leaving the rest of the subc unchanged. [report: Ade] +- BUG: revert r15462, get conf_set do this automatically; conf_set_dry will need a create arg [report: igor2] +- BUG: revert r15464, fix conf merge bug: + - the bug is in conf_merge_patch_list() conf.c:607@r15463 + - if we are adding a prepend list, inserting one by one, going from the first to the last of the list is a bad idea: the prepend list has a1;a2;a3, then we insert them in this order ending up as a3;a2;a1 + - get the loop go backward if we are in prepend +- BUG: revert r15465, fix conf merge bug +- BUG: GL: When a padstack is selected, both the padstack and the padstack mark are drawn in the selection colour. The mark becomes invisible because the GL HID does not support XOR. [report: Ade] +- BUG: GTK: "Edit->Edit attributes of->layout" dialog does not close with WM decoration [report:celem] + - This dialog needs a scrolled window. => extend the attribute dialog both in gtk and lesstif to make scrollable window and rewrite this dialog using DAD, in the dialogs plugin + - Lesstif HID does not have this dialog => implement it, using DAD + - Default keyboard focus on "OK" button ? (allow closing the dialog with keyboard) +- BUG: pressing 'b' for back side on a floater refdes text doesn't send it to the back [report: igor2] +- BUG: place 1206 on top; switch to bottom; turn off top copper; press 'n' over the pad - still can rename, even tho pad is invisible! [report: igor2] +- BUG: broken input on lihata padstack proto id shouldn't casue an assert: bug_files/id05.pcb [report: a l3x] +- BUG: changing grid with 'g' uses mil increments when mm grid is activated [wojciechk8] + -> this will be handled in the big increments rewrite (with Richard) +- feature: xy exporter should have the templates in config, not in hardwired C; maybe make it a hash (per output name) [report: celem] +- BUG: subc terminals should be drawn at the end [report: Ade] +- BUG: when DRC sizes are saved in user conf, they are overridden from the default.pcb -> should be fixed by removing these from pcb_board_t [report: Alain] + Reason: pcb_board_t Bloat, Shrink, minWid, minSlk, minDrill, minRing -> remove them, use values from the config system instead +- BUG: rewrite layer undo; take it out from old_undo; layer del breaks on undo: can't save where it was added before. Consider the whole layer move and -1 business obsolete and rather add a separate insert and remove call? + - BUG: add new layer in main window, pcb-rnd issues pcb_warning yet action is placed on undo stack [report: Miloh] +- BUG: lhtpers indentation: bug_files/lhtpers_ins/; breakpoint in pers_table.c:34 and debug why the newline is getting in [report: Igor2] +- BUG: 'n' on a dyntext (e.g. refdes text) should edit the text, not the term of the text [report: igor2] +- BUG: advanced search doesn't deal with subc parts; do this after element removal using the new rtree loops? +- BUG: after the old model removal: undo bug, ML#1130 [report: miloh] +- BUG: Rubberband move line endpoints ignores connected arc endpoints. [Fixing:Ade] +- BUG?: Far-side silk text can be selected and moved when the mouse is over front-side subcircuit. (but this is what we had with elements too! -> search.c configuration) bug_files/farsilk.lht [report: Ade] +- BUG: RTT/arc_sizes.lht - unable to move arcs which have different width and height [report: Ade] - rewrite pcb_is_point_on_arc() elliptical case at the bottom +- BUG: --gui gtk2_gl pcb-rnd library preview pane is black ( doWindows(library) ) [report: Miloh] +- BUG: dsn export: 2 pin thru-hole rotation bug [report: celem] +- BUG: text rotations not quite right in eagle binary format layouts. See bug_files/tvbgone3-brd-in-eagle.png. Seems 180 and 270ccw rotation are rendered as upright an 90ccw rotation. Hmm. [erich] +- BUG: eagle binary library load fails with assert when pad dimension == 0, drill != zero. Bug arises from uninitiliased st.ms_width minimum feature width DRC value. This does not manifest in XML load as it initiliased to default value of 10mil before the DRC block is read, and updated if specified in the DRC block. There is no DRC block in an eagle binary library, so a decision has to be made wrt to where a default minimum feature size is to be referred to, so that the pad/hole reading code can apply it when pad dimension is not specified at line 824 in read.c. If dimension is not present, but drill is, read.c correctly applies the DRC derived rv_pad_top at line 818 dia = eagle_get_attrc(st, subtree, "diameter", drill * (1.0+st->rv_pad_top*2.0)); Planned changes to rectangle parsing to geenrate copper rectangles, not four lines, will alter +/- eliminate the need for the rectangle read routine to have ms_width available pre DRC read. See bug_files/e-motoren.lbr. [report: Erich] +- BUG: valgrind shows memory leaks relating to binary load. See bug_files/e-motoren.lbr [report: erich] +- BUG: User places a 'tall' part from current default part libs(DB25F.fp), moves cursor over the part on the main window, open pinout dialog (shift-d) -- dialog opens partially offscreen, cannot be resised. x220 with 1360x768 screen [report: Miloh] +- BUG: on loading bug_files/diode.lbr, pcb-rnd's clipping polygon out of existence routine seems to go into a non terminating loop [report: erich]. +- BUG: ratlines are not updated after subc rotate [wojciechk8] +- BUG: ChangeSize() doesn't work on floaters if only a floater is selected [report: wojciechk8] +- BUG: ChangeClearSize() results in 2x specified clearance for padstacks in subc [report: wojciechk8] + -> bug_files/ps_clearance.lht, select subc, :ChangeClearSize(selected, 10 mil) +- BUG: changing clearance to polygon with 'k' on padstack should have priority over lines [report: wojciechk8] + -> bug_files/ps_clearance.lht, press 'k' on the left padstack -> the line changes clearance instead of the padstack +- BUG: undo 'k' on subc, padstacks are undone separatly [report: wojciechk8] + -> bug_files/ps_clearance.lht, press 'k' on subc, undo -> only one padstack is affected +- BUG: changing clearance to polygon with 'k' on "via padstacks" doesn't work (ChangeClearSize() neither) [report: wojciechk8] + -> bug_files/via_clearance.lht +- BUG: run DRC() action multiple times - duplicated entries are added to the list [report: wojciechk8] +- feature: when moving text, also xor-draw the bounding box (should be a config option!) use case: moving refdes texts; easier to line them up with bbox [report: al3x] +- autocrop bug: copper lines become invisible [report: wojciechk8] + -> should use central data move instead of local implementation + -> bug_files/redrawbug1.lht, run autocrop() +- BUG: gtk2_gl: RTT/arc_sizes.lht - arc corner case render bug [report: Wed] +? BUG: DRC preview windows don't show all padstacks after a shift-tab or ctrl-tab flip - bug_files/drc1.lht [report: Igor2] + -> the bug is still there - the problem with preview widget was that it exposed the correct part of the board, but was showing the opposite side. The patch changed expose area, but the viewport is wrong (see bug_files/drc2.lht). Before the patch there would be only the blue line shown in DRC preview, because it touches the proper DRC error area. [wojciechk8] +? BUG: macrofab xy: 5 mil offset [report: celem] + -> pcb-rnd seems to do everything properly, no idea why macrofab distorts the result +- BUG: undo operation while drawing a multiple segment line doesn't change segment attached to the crosshair [report:wojciechk8] + - tool_line.c depends on pcb_undo()'s return value; can be fixed only when the old undo system is removed +- BUG: autorouter mismatched line ends: place two horizontal 1206's in a horizontal row; rat line connect the two outer pads; get it autorouter: the result will be an U shaped track to avoid the inner pads; the amrs of the U don't end where the horizontal line starts; this breaks the rubber band mode for moving the horizontal segment [report: celem] +- feature: lesstif does not allow "save as" in non alien format [report: erich] +- key rewrite: (base key swap bug (q<->a, y<->z)) + - for (punctuation): learn key for non-US users + - lesstif code upgrade for the new API + - menu file fixup on punctuation in lesstif +- buffer: break up padstack, just like breaking up subcircuits +- feature: extedit: when editing subc with pcb, save configuration and load it in the external pcb-rnd so that grid sizes and other settings are preserved [report: jg] +- vendor: be able to load multiple vendor files (project spec for skips, central for vendor) [report: celem] +- feature: property editor should deal with flags +- subc feature: figure how to do in-place edition of subc, e.g. moving refdes text +- DEL: retire the nelma plugin - nelma is unfinished and not maintained +- feautres/cleanup: hid: + - "erase" color: + - pcb_pad_clear_callback() -> hopefully drawn on negative mask only (check this) + - holes_after should be set to 1 everywhere, then removed -> breaks gerber + - holes should be drawn below silk and mask (maybe this could be a config setting) +- feature: fp_wget cache dir configurable [report: agaran] +- feature in subc/term: + - new terminal attribute: "do not connect to the same subc copper" (agaran's coil example) +- update /usr/share/pcb-rnd/default.pcb to default lihata + - after switch, update doc/conf and doc/user references to conf settings from .pcb to .lht as needed +- HID: option for using a fixed background color for the preview widget renders; using the user configured one goes wrong when it's set to dark [report: Alain] +- fontsel: ttf import? +- library window: allow long tags and long location text to split +- undo on new layer from right-click menu in gtk layersel doesn't work +- gtk layersel feature requests: + - consider to provide a config setting for making open-group-name horizontal [report: istankovic] +- layer rewrite: + - catch the layer change signal from polygons and reclip; Evan's test case: + draw a line on a layer and a poly on another and change whether they are in + the same layer group + - Layer group changes are not marked in the title bar; Evan's test case: + make any change in the layer group screen, return to the main screen, no * will be added in the title bar in front of the file name. +- GTK Preferences->User PoV->Layers : Hit 'v' to "zoom fit" the preview [report: Alain] + - allow GTK to handle keys in preview + - use the zoompan engine for the zooming. Modifiy API if necessary +- check gpmi when pcb-rnd is fully linstalled - broken symlinks? +- multi-key: display state on the gui +- cleanup/rewrite resources: + - load/swap menus (TODO#1) + - gpmi: + - hid: hid_destroy (pair of hid_create) + - cleanup on unload: remove menus +- conf: + - remove CFN_INCREMENTS, test if saving increments from preferences works + - config pov: change prio + - gtk preferences: check what takes 131 megs of VIRT ram (on top); destroy the dialog structures when closed + - gtk preferences: poly isle area widget missing from the sizes tab + - BUG: default layer names from the user config are ignored + - fp_fs_search: kill anything that gets ':' separated string as path list, get a config list instead + - switch the lesstif HID over from attribs to conf + - remove redundancy: don't store values in the PCB struct that are in the design conf + - increments are not really implemented +- Menu cleanup: see pool node menu_reorg +- Mark cleanup + - see pool node mark_cleanup + - mark bug - ortho shouldn't use it, it should use last point (crosshair.X2); make sure nothing else abuses it [James] +- unravel the undo code + - grid size change should be undoable? [report:Evan] + - maybe other conf settings too? +- pcb_act_Attributes -> this could be handled by the property editor maybe? but what about layout attributes and the lesstif hid? +- layer group rewrite: + - remove PCB_MAX_LAYERGRP and PCB_MAX_LAYER and make them dynamic + - make the color config dynamic too; invent color for new layers +- layers for top and bottom soldermask, if not present in loaded eagle file, i.e. tvbgone3.brd, do not export on creating gerbers, and cannot be added easily to layout via layer prefs, since ability to add a soldermask group is lacking [erich]. +- eagle XML import fails on polygon import reported by miloh, test file alien_formats/eagle/OSHW_XML_examples/eagle_polygon_crash.brd [report: erich], due to input file containing an invalid polygon: a self intersecting poly in line 156 - consider handling "width"? +- eagle rectangle parsing should generate a rectangular feature, not a four line rectangular outline [erich] +- eagle XML wire elements need to have "curve" attribute processed, if present. i.e. arcs. Can see translate2geda for hints [report: erich] +- eagle binary format appended text block needs to be parsed and the text strings allocated to ASCII-127 references in preceding text blocks [erich] +- eagle binary format v3 and libraries do not have a DRC block specifying restring or minimum feature widths. Binary loader should add a DRC block in these cases to the tree with the minimum settings needed for padstacks and features to load sensibly. [erich]. +- layer groups from config (e.g. CLI) is ignored +- layer rewrite: central menu buttons + - lesstif needs to remember the widgets via lb->w in menu.c + - rewrite the central code for callbacks? +- io_pcb: new, optional "layer tag" field in mainline's file format +- biggish revamp of the export menu. The whole GUI is clearly designed for the case of only a very few exporters and we now have a lot. + - unify how output files are accessed/checked: confirmation on overwrite +- fp_board: extend the API so that the element can be presented without saving to a file +- cleanup: remove mnemonic from the menu system + - check the central code and struct fields + - remove "m=" fields from the menu lihata files +- SUBC missing features: + - manual layer binding (reuse csect?) +- core lib splitup: + - gsch2pcb: generalize plugin/buildin loading for external tools, check if gsch2pcb can work from plugins +- res/menu: + - search for vendor in the hid plugins, there should be no trace of it (vendor should register its in submenus with anchors) + - re-add dynamic menus after a gui change: + - either remember dynamic menus in a separate list so they can be rebuilt + - or provide hooks and let plugins deal with it + - gpmi: auto-remove menus by cookie (TODO#2) + - load new res on the fly (replace the menu system): + - low level reload code (re-add the dynamic menus too!) + - action to reload if file name is known + - gui load dialog with tags listed +- decide about exporter policy: + - png exports selection (even in not-as-shown), others don't + - extend png hid attribs with a flag for this, maybe do the same for others + - document the decision in "hacking" +- reduce + - export_bom: rewrite the string list code using htsp and/or lists + - hash in hid_attrib.c? + - nelma and gcode both invent .png name locally + - get rid of gcode/lists.h, and vector.[ch] (autorouter) + - vendordrill + - search for /units, replace it with pcb-printf something + - add round down + - replace ignore_refdes, ignore_value and ignore_descr with genvector + - mods: + - gpmi (and other buildins/plugins) not showing up in the about box +- self contained + + PrintFiles: print where the actual files are coming from, including if the font came from embedded/internal + - dialog box version + - project specific menus from extra lihata files - maybe from project.lht +- vendor drill plugin: + - check if we want to keep vendor name +- dir rename trunk/pcblib/tru-hole should handle make correctly and not walk on existing web services or user installs +- Lihata persistent save: + - flag compatibility: save unknown, string-flags as loaded by io_pcb + - ind: FONTS: second font indents incorrectly + - ind: indentation bug in inline struct therm: closing } is preceded by indentation whitespace for some reason + - keep numeric format: test all + - keep unknown subtrees + - doc/user/02_model/src/obj_arc.lht: Open/Save : Font section is embedded. Once manually removed, the file shows many diffs w.r.t original. Lihata V1 file. [report: Alain] +- query & advanced search + - search expr wizard should pick up the expression from the button when clicked + - field accessors: + - pad area + - pin area + - line (and pad) length and length^2 + - make a run on a large board, speed test, with -O0 and -O3: + - iteration speed (a simple @) + - eval speed (a simple @ with a lot of constants in an expr) + - geo speed + - regex and string cmp match speed vs. select by name +- feature plugins: + - autocrop doesnt undo (new layout, add some -maskmanaul content, autocrop(), & undo: gui view shifts, board size unchanged [report: Miloh] + - distalign doesn't work with subc ( align() and distribute()) [report:Miloh] + - distalign pcb_crosshair option doesn't work as a reference point [report:Miloh] + - can't undo after boardflip(), (ERROR: Attempt to pcb_undo() with Serial == 0) [report:Miloh] +- feature req: padstack edit swap shapes - low level for a "solder mask defined pad" [report: ehennes] +- BUG: segfault when loading kicad_pcb in work/alien_formats/A20*.kicad_pcb gdb at http://scififaster.net/kicad_pcb_gdb.txt - see bug_files/A20-minimal.kicad_pcb [report: miloh flag: erichvk_] + +3. Long term =============================================================================== + + +GTK2: + - next_gui: keep them open, hide + +GTK3: + + overlapping objects (e.g. 2 fat lines crossing on silk) are darker on the overlap; we need uniform color + + mouse scroll wheel doesn't work in cross section + - zoom hangs: press 'z' on the drawing area -> hang + + xor draw fails after 'i' library footprint placement; in fail mode there's no xor outline of buffer; drawing a line fixes it + - elliptic arc rendering + - layer selector vertical layer group name truncation + - main window resize scroll bar warnings + - component draw "flicker", depending on pan: http://igor2.repo.hu/tmp/gtk3_bug1a.jpg http://igor2.repo.hu/tmp/gtk3_bug1a.jpg + - missing grid points: http://igor2.repo.hu/tmp/gtk3_bug2.png + +Eagle binary: + - padstack clearances for element pins will rely on connectivity to other polygons layer by layer defined in the netlist + - need to refine naming of library (.lbr) elements in loaded .lbr files; any text names in the binary tree, if starting with ASCII 127, sequentially reference strings in the text block which comes immediately after the board/design tree. In later eagle binary versions, the text block seems to become a node of the tree, but a node of arbitrary length, not 24 bytes, with length of block still encoded in first few bytes. + - need to add support for non top silk (tPlace), tDocu and top copper text in read.c + - layouts, once loaded, have issue where deselection of elements only deselects element pins/pads. click-drag of element or saving the layout to .lht and reloading fixes the deselection issue. Example FTSH.... library file for a header exhibits this behaviour. + +CLEANUP #7: the big object split +- remove pcb_obj_type_t from const.h - use obj_any.h instead + + +FEATURES +- BUILD: menuconfig and a config file for scconfig +- menu item for export of multiple selected layout elements to discrete .fp files + +4. Low prio =============================================================================== +- CAM: + - split gerber and drill file generation (make gerber depend on drill, for backward compatibility) + - export_gerber: add a true gerber drill output + - make the drill exporter sort drills by attributes, an user configured table telling which drill (by attribute) ends up in which file + - invent a generic API for both the drill attrib config table and gerber suffixes + - implement a CAM plugin that can drive multiple exporters with all options configured + - remove the gerber->drill dep and ask users to use the CAM instead + - move the hackish gerber layer suffix functions into CAM configs +- BUG: main.c: SIGPIPE - detect it (needed for popen) +- advanced grid settings: + - keep two lists of preferred grid sizes, one in mil, one in mm + - generate the grid selection menu from those lists + - action to step up and down among those predefined grid sizes + - make sure it is possible to edit the lists in preferences +- libstroke: zoom +- improve locking: + - consider a move-only lock + - when thermal and some other operations are applied on a locked element, indicate it +- Erich's gtk lag report: press 's' a lot then move the mouse - 's' ends up in the new loc! +- the TAB bug: (over ssh -X) press tab for a good 15 seconds; release; it won't work again for a fraction of a second +- bug: rubberband_orig: draw a 90 deg arc, a 45 deg line that ends in the endpoints of the arc; enable rubber band, move the arc: only one endpoint of the line is moved [fixing:Ade] +- bug: redrawbug1: grap c1, the diagonal trace gets drawn over U1's silk - it's redrawn because of the overlapping bounding box with C1, while U1 has no overlap [report:Evan] +- bug: draw overlapping lines, a short fully under a long; click on the short, it gets selected but it's not visible because the long hides it [report:Evan] +- bug: layer menu: the bottom silk screen icon color changes from gray-black to brown when any layer is selected. [report:Evan] +- GTK "save as" dialog: there should be an "auto" or "guess by extension" option in the save dialog format +- insert drag&drop strangeness (mainline too): + insert should just insert a new point and stop there, not starting a drag&drop + move; the new point should be marked somehow (e.g. green-find one half of the + object, like arc split does) lines can be inserted mostly only in all-dir-line + which is strange +- missing rotate polygon (mainline too) +- zoom in too deep onto board edge and the implicit outline rectangle behaves strangely [report:Evan] +- scconfig: check if it picks up settings from env vars (for a gentoo build) +- replace mkdtemp() with something safer +- display net names on pins, vias (and maybe tracks?) when zoomed in enough +- DRC should warn for thin poly hair +- rotate shaped vias don't rotate the shape (is via rotated at all?) +- new examples + - blinking led with parametric footprints + - example of nonetlist: 1206 jumpers and logos +- In-line help needs update/re-structuration + - +- rethink/rewrite the action/change infrastructure - too many void *ptr1 + pointers, too many code duplication +- double sided board, poly on both layers; grab existing lines on one layer and + move then around. If all layers are visible, redraw of the far side layer + is slow and causes flickering elements from that layer until the front is + redrawn. Maybe we should have less flushes? +- gpmi: + - dialog: attribute dialog: mini parser from text + - fix debug draw in the gtk hid + - ACTE_action(): coords should not be int but Coord + - get timers to work +- dmalloc: #include from the bottom from each file. Is this a good idea?! +- win32 port {large} + - clean up central Makefile.in rules: + - remove cat, sed, grep where possible, use scconfig instead +- arc bug: draw an arc with one end out of the drawing area; it will be jumpy and can not be placed properly + -> AttachForCopy() calls SetCrosshairRange() that then sets crosshair max* which + limits the arc to move freely. Problem: this is not arc-specific, this happens with any buffer copy! going for no-design-limit is probably better +- while drawing a line, the temporary outline should reflect the layer color +- push&shove + - keep 45-deg knee when grabbing a point for drag&drop in non-all-dir +- --dump-actions shows gpmi paths ( is this related? it looks unexpected to me) +- unify gui invocation options: pcb-rnd --help gtk_[gdk|gl] and pcb-rnd --help lesstif both show and use different input methods [report:miloh] +- consider allowing negative Delta to be specified in CTRL-E property inspector +- consider a simple all in one function to create a default layer stackup for static/predictable layer formats being imported, to simplify importer coding +- trace length calculator: + - click a line or arc or via + - start a search in two directions mapping lines, arcs and vias connected (green-highlight them, marking them found) + - stop at the first junction (anywhere where more than 2 objects are connected) + - stop at polygons + - display the number of vias and net trace length along the found objects +- miter bug; miter crosses SMT pads under certain conditions [report: celem/miloh] Index: 1.2.8/doc/TODO.cleanup =================================================================== --- 1.2.8/doc/TODO.cleanup (nonexistent) +++ 1.2.8/doc/TODO.cleanup (revision 15490) @@ -0,0 +1,10 @@ +- rename: + - XORDraw* + - conf_* +- centralize pcb_gui->attribute_dialog() +- remove pcb board Zoom/x/y, move the drc stuff to config +- remove obsolete APIs: + get_unit_list() +- remove 'require unique refdes' +- remove the polygrid feature from the pos exporter - use the poly hatch instead +- move the GetXY action to central Index: 1.2.8/doc/TODO.user =================================================================== --- 1.2.8/doc/TODO.user (nonexistent) +++ 1.2.8/doc/TODO.user (revision 15490) @@ -0,0 +1,9 @@ +- TEST: + - smartdisperse + - compare to 1.2.4; term changes + - test subcircuits + - autoplace (compare to 1.2.4; term changes) + - autoroute (compare to 1.2.4; term changes) + - pcb_pstk_shape_hole_break(): min ring DRC rules on padstack, especially with asymmetric (non-centered) shapes + - test advanced search with padstacks + - query on subc Index: 1.2.8/doc/UNIX.txt =================================================================== --- 1.2.8/doc/UNIX.txt (nonexistent) +++ 1.2.8/doc/UNIX.txt (revision 15490) @@ -0,0 +1,31 @@ +State on UNIX systems +~~~~~~~~~~~~~~~~~~~~~ + +Source releases starting from 1.1.2 should compile and run out-of-the-box +on old UNIX systems, such as IRIX. Does NOT require any GNU installed. + +Requirements: + - x11 and motif (for the GUI) + - an awk implementation that supports gsub(), e.g. nawk + +1. If your C compiler does not support #warning, run a script to patch + the source: + + # cwd is the root of the distribution + util/workarounds/unwarn_all.sh + + This will take a while and will modify a lot of .c files. + +2. ./configure + +3. make + +Considerations listed in ../INSTALL apply. + +The above procedure has been tested on IRIX 5.3 on IP22. + +Expected compilation times [minute:second]: + +./configure compile, -O0 compile -O3 system +------------------------------------------------------------------------------- +1:55 7:40 14:27 IRIX 5.3, IP22 @ 100 MHz Index: 1.2.8/doc/conf/Makefile =================================================================== --- 1.2.8/doc/conf/Makefile (nonexistent) +++ 1.2.8/doc/conf/Makefile (revision 15490) @@ -0,0 +1,27 @@ +ROOT=../.. +CFDIR=$(DOCDIR)/conf + + +all: + +install_all: + $(SCCBOX) mkdir -p $(CFDIR)/tree + $(SCCBOX) $(HOW) *.html *.png $(CFDIR)/ + $(SCCBOX) $(HOW) tree/*.html $(CFDIR)/tree/ + + +install: + $(MAKE) install_all HOW="install -f -d" + +linstall: + $(MAKE) install_all HOW="install -f -l -d" + +uninstall: + $(MAKE) install_all HOW="install -u" + +clean: + +distclean: + + +include $(ROOT)/Makefile.conf Index: 1.2.8/doc/conf/groups.html =================================================================== --- 1.2.8/doc/conf/groups.html (nonexistent) +++ 1.2.8/doc/conf/groups.html (revision 15490) @@ -0,0 +1,122 @@ + + + + pcb-rnd - config groups + + + +

The new config system in pcb-rnd

+

grouping - flat vs. tree

+The original settings and HID attribute system in pcb were both flat: +basically a list of type:key=val triplets. All settings in a few big bags; +which bag sometimes doesn't depend on some logical categorizing, but +historical reasons (e.g. which part of the code needs the given setting). +

+This works well for a small amount of settings but lack of categories or +hierarchy (or sets or groups) makes it harder to understand what setting does +what and orients users to just accept defaults. After a while it also +makes programmers think twice before adding a new setting, increasing the +crowd in a bag. This in turn results in a less configurable +system. +

+Introducing a hierarchy of settings can solve these problems by grouping +and categorizing settings. If the user is interested in how footprints are +searched, they can ignore the settings the editor/ subtree has. It is also +easier to save and reload selectively: when the hierarchy is done right, +closely related settings end up in the same category (thus the same subtree). +Thus saving or loading a subtree can fully save or restore a property of the +program, even if that property is affected by multiple settings. + +

pcb-rnd config tree

+The config tree, the full tree is, something that exists in memory. Actual +config files often contain only a subset of the tree. Multiple config files +(e.g. system level, user level, settings from the .pcb file) are loaded and +merged to form the final config tree. The hierarchy of the tree is represented +by setting groups, which are like directories on a file system. Actual settings +are always leaves of the tree, placed in a specific group at any level (just +like in file systems). A full path to a setting is written like a +path on a file system: group1/group2/item, where group1 and group2 are +names of setting groups and item is the name of the setting. Note: unlike +with real file systems, the leading slash (representing the root) is omitted. +

+Details/constraints: +A valid path unambiguously identifies a setting (or a setting group). Settings +and groups always have exactly one parent (except for the root group that +has no parent). There is only one root of the config tree. +

+The main groups in the logical tree are: + +

+ +
(root)   (config root) +
|       +
+- rc run control (program startup) +
|       +
|   |   +
|   +- path paths automatically set up by the program at startup - do not specify these +
|       +
+- design some default settings of a new design; minimum/maximum value of some design settings +
|       +
+- editor how the pcb editor behaves - independent of HIDs or the GUI +
|   |   +
|   +- increments_mm interactive increment/decrement steps when active unit is mm +
|   |   +
|   +- increments_mil interactive increment/decrement steps when active unit is mil +
|   |   +
|   +- view default view parameters +
|       +
+- appearance how the GUI looks like - common to all GUI HIDs +
|   |   +
|   +- color layer colors, GUI colors, misc design colors +
|   |   +
|   +- pinout pin label properties +
|   |   +
|   +- messages message window properties +
|   |   +
|   +- misc non-GUI settings handled by the GUI HIDs +
|       +
+- plugins dynamic subtree for various plugin settings +
|   |   +
|   +- foo all settings of the imaginary foo plugin are registered in this group +
|       +
+- utils dynamic subtree for various plugin settings +
  |   +
  +- bar all settings of the imaginary bar utility are registered in this group +
+
+ +

dynamic subtrees

+ +The plugins/ and utils/ subtree are dynamic, which means their contents +are not defined by core pcb. +

+In plugins/ each plugin should create a group for its own settings. What +this subtree should contain depends on what plugins are actually loaded. +The benefit of this approach is that plugins can use the central config +infrastructure instead of inventing their own config files. This makes +user's life easier on many levels: single config syntax to learn; uniform +GUI (gtk HID's preferences window) to change all settings; uniform way to +save/restore parts of the settings. +

+The utils/ subtree is very similar in all aspects except that it is for +external utility programs. Utils that are closely related to pcb-rnd, such +as gsch2pcb-rnd, should work from the same configuration. +If they already load the +pcb-rnd config files it's easier to keep their settings in the same tree, +in the same format. +

+Pcb-rnd doesn't generate warning for unrecognized settings in dynamic subtrees. +This lets the user configure plugins that are not always loaded and let util +settings sit in their subtree. + +

what happens to all these settings

+ +After loading all config files they are merged: if the same setting is +described in multiple files, the higher priority wins or if the setting is +a list (e.g. library search paths) the items are merged in a final list. +At this point the full logical config tree is built. Next the textual values +from the logical tree are converted into binary (native C values like +"long int" or "double") and are saved in C variables for the code to +access them directly. + + Index: 1.2.8/doc/conf/index.html =================================================================== --- 1.2.8/doc/conf/index.html (nonexistent) +++ 1.2.8/doc/conf/index.html (revision 15490) @@ -0,0 +1,83 @@ + + + + pcb-rnd - config system + + + +

The new config system in pcb-rnd

+

Why, what was wrong with the old one?

+The old config system had several limitations that would have been +hard to fix keeping the original design: +
    +
  • config settings were specified in a flat list - no grouping +
  • the core had a rather static system - HIDs or plugins couldn't extend it, thus they had to invent their own config files +
  • ... this led to a variety of configuration formats; using one format not always because it was better suited for the task, but for historical reasons +
  • ... this also led to a collection of config files - again not always split by boundaries of settings, but often by arbitrary boundaries of code +
  • the old system didn't support lists or arrays well +
  • it didn't have a coherent concept of how settings from different sources would override each other +
  • ... this resulted in the rigid structure that most of the settings could come from only one place (e.g. if it's an user setting, the design won't be able to override it) +
+ +

What the new system offers

+
    +
  • unified format: lihata ... +
  • ... more future proof: generic markup language - easier to extend without having to worry about breaking the syntax +
  • ... the configuration is represented in a tree, grouped by the nature of settings +
  • ... there are arrays and lists +
  • ... a config file can overwrite a list or prepend/append to it (e.g. design-level config prepending an extra library path keeping system set paths as well) +
  • there are different sources of configuration, e.g. system-wise, user-wise, project-wise, etc. +
  • the user has the power to change default config priority per setting; e.g. normally design config overrides user config, but it's possible to mark a setting from user config so strong that it overrides even the setting read from the .pcb file +
  • the way settings are stored is flexible and extensible so that a plugin can define their subtree of settings +
  • ... since the API even makes it easier to access such settings (vs. parsing your own config file), plugins will tend to use the unified config format/system instead of inventing their own +
  • ... the GUI (gtk's preferences dialog) thus can automatically handle the new settings +
  • ... plugins don't have to implement actions to set/toggle/query their settings for the menu system, there are generic config set/toggle/query actions the menu config can use +
  • ... plugins also get the multi-source, priority-based config mechanism +
  • ... which also means plugin settings can be automatically saved as user setting, project setting or even design setting +
  • all these are true for all kind of settings, be them GUI preferences, paths, layer colors, grid settings; there should be no exception +
+ +

How to get started

+ + + +

But isn't this more complicated for the user?

+Hopefully not much. There are a few extra features, like +multiple sources with levels that did not +exist in pcb and lists with prepend/append. Some of these +features present in other software so users should be comfortable with the ideas. +The learning curve is probably compensated by the more orthogonal system. +The syntax is also geared for simplicity and easy use with text editors. +Finally, the new preferences dialog in the GTK HID and config actions help +the user to explore how settings got used from all the config sources. There's +an intended layering in complexity: simple things can be done easily without +having to understand the whole system. +

+All in all, the extra features the user needs to learn is comparable with +the old customs that he/she can forget. + +

And did it make the code more complicated?

+The size of the code did not change much after the initial config rewrite. +The new system has new features, some of which brought in a few hundred lines of +code, but a similar amount of old code could be removed. What came in is +infrastructure, what had to go was a bunch of repetitive config parsing, +boolean-setting-accessor-action code. This means on the long run, the more +settings are added, the more the new system pays back. +

+Read access, which is far the most common way to use the config in the +code (e.g. if (setting == true) { }) is very similar to the old Settings +system. Write access needs to go through a function call API, but this +is usually a single call per setting (instead of directly modifying a +variable). +

+For plugin programmers, the new system makes life much easier as they can +plug their settings in. + + + + Index: 1.2.8/doc/conf/index_prog.html =================================================================== --- 1.2.8/doc/conf/index_prog.html (nonexistent) +++ 1.2.8/doc/conf/index_prog.html (revision 15490) @@ -0,0 +1,14 @@ + + + + pcb-rnd - config programmer's index + + + +

The new config system in pcb-rnd

+

Programmer's documentation

+ +TODO + + + Index: 1.2.8/doc/conf/index_user.html =================================================================== --- 1.2.8/doc/conf/index_user.html (nonexistent) +++ 1.2.8/doc/conf/index_user.html (revision 15490) @@ -0,0 +1,99 @@ + + + + pcb-rnd - config for users + + + +

The pcb-rnd config system

+

User documentation

+As of 1.1.0, pcb-rnd switched to a lihata based configuration system. +The purpose of this document is to describes the basic system design going into +enough details to provide the user with full control over the configuration. +The other side, how the system is implemented is described in the + programmer's manual and there is also a +checklist to assist plugin programmers. + +

Architecture: data flows, merging, dispatching

+The final configuration is a collection of values for + all known settings, arranged in a tree. The config +tree is a theoretical concept; different representations of the tree are +actually built runtime, in-memory. Pcb-rnd code, plugins and utilities +are constantly reading these in-memory representations to decide how to +carry out their tasks. +

+Config settings are imported from multiple sources: from different files, +from environment variables, from command line arguments, from the opened (.pcb +or .lht) files on load. Any source can define any part of the config tree. +When the configuration is processed, each source is read into a temporary +tree and then all the temporary trees are merged into the final +config tree. The following diagram demonstrates all configuration +related data flows. +

+[diagram] +

+The leftmost column of nodes are the sources. (Note: paths mentioned there are +the default paths, for reference, it is possible to change them compile-time.) +Along the black arrows, from left to right, each source is imported into a +tree representing a role: the role or +purpose of the source. The next +step is following the red arrows in two steps: +
    +
  • first merge all the role trees into a flat list; this determines the value of each setting; +
  • then dispatch the values to the right component of the code. +
+Some components may change some of the settings run-time. The trivial example +is the GUI (hid_gtk on this diagram) that provides menus and dialog boxes for +the user to change settings. Such a change is always fed back (blue arrow) +to the design role tree directly, from where the new value is again merged +and dispatched along the red arrows. Changes in the design role are saved +with the .pcb file (thus the bidirectional black arrow between the source and +the in-memory tree for the design role). Occasionally the user wants to +save parts of the setting as a project setting or +as an user setting - in this case, along the dashed blue lines, the +corresponding project or user roles are modified. This again results in updating +the hash and the binary representation; these roles also have +bidirectional black arrows and their changes are also saved in the original +source. + +

Merge details

+In the new system it is up to the user to decide what settings are +system-level and what settings are user- or project-level. This is possible +because any source can define any setting. In the merging step (red arrows +between roles and the hash) it may turn out that there are overlaps (multiple +sources defining value for the same setting) or blind spots (no source +sets a given item). + +

overlaps

+Each setting in each source has a priority. The +priority can be defined in the source, or if it is not defined, each source +inherits a fallback default priority. The fallback is designed to provide +the intuitive order: cli > design > project > user > system. +

+When multiple sources are describing a value for the same setting, +priority decides the final value. Most settings are scalar: +a single integer, string or a single "yes/no" or "on/off" value (e.g. +the background color or whether polygons are thin-drawn). For scalars +the rule is simple: the higher priority value wins and all lower priority +values are discarded when putting the values into the hash. More +details: how different roles and priorities +can be used with scalars. + +

+There are some settings that are represented as an array or list of +values. They are described in a lihata list item ("li:") in the config +files and are generally called lists in this document. How lists +are merged is controlled by the merging policy, which can be +in each source, just like the priority is set. Check out the +list merging section for more details. + +

blind spots

+At the end the code does need a value for each setting, so in the final +render (after the hash) every setting must have a value. To avoid blind spots, +values not initialized, there is a built-in configuration file, compiled into +the executable. This file is loaded into role CFR_INTERNAL, and has +the lowest priority. This configuration file contains the default value for +all settings. + + + Index: 1.2.8/doc/conf/lists.html =================================================================== --- 1.2.8/doc/conf/lists.html (nonexistent) +++ 1.2.8/doc/conf/lists.html (revision 15490) @@ -0,0 +1,133 @@ + + + + pcb-rnd - config lists + + + +

The new config system in pcb-rnd

+

Lists and arrays

+ +Non-scalar settings are arrays or lists. Arrays can be explicitly indexed + +The default policy is always overwrite. +

+There are three active policies: overwrite, prepend and append. +When dealing with lists: +

    +
  • step 1: the output list is reset to empty +
  • step 2: all sources that describe the list are sorted by priority +
  • step 3: sources are applied in order +
+Step 3 is straight-forward: if policy is overwrite, reset the output +list and copy the source's list into the output list. If policy is +prepend (or append), keep the current output list and prepend +(or append) the list provided by the source. +

+In practice this means the user can replace, prepend or append ordered lists +from various sources. A common example is setting the library search paths. + +

examples

+ +

simple overwrite

+Config sources (ordered by priority): + +
role priority policy content +
system 200 overwrite A,B,C +
user 400 overwrite (not defined) +
project 600 overwrite D,E +
+

Merge iterations: + +
step description output list after executing this step remarks +
0. reset the output (empty)   +
1. apply system A,B,C   +
2. apply user A,B,C "not defined" doesn't mean "empty", so the list is not deleted - no change +
3. apply project D,E replace the original output because of the overwrite policy +
+

Example scenario: the project is restricted to local footprint libs; this setup +makes sure no system or user configuration injects external footprint paths. + +

empty overwrite

+Config sources (ordered by priority): + +
role priority policy content +
system 200 overwrite A,B,C +
user 400 overwrite (not defined) +
project 600 overwrite defined to be an empty list +
+

Merge iterations: + +
step description output list after executing this step remarks +
0. reset the output (empty)   +
1. apply system A,B,C   +
2. apply user A,B,C "not defined" doesn't mean "empty", so the list is not deleted - no change +
3. apply project (empty) replace the original output because of the overwrite policy +
+ +

prepend

+Config sources (ordered by priority): + +
role priority policy content +
system 200 overwrite A,B,C +
user 400 prepend (not defined) +
project 600 prepend D,E +
+

Merge iterations: + +
step description output list after executing this step remarks +
0. reset the output (empty)   +
1. apply system A,B,C   +
2. apply user A,B,C "not defined" doesn't mean "empty", so the list is not deleted - no change +
3. apply project D,E,A,B,C   +
+

Example scenario: the project has its own footprint libs with two paths; these +should be searched before system and user paths, still, system path is also +kept so stock footprints can be found. +

+This is better than hardwiring A,B,C in the project's list: A, B and C may +depend on the installation on a given system. A project file has no idea +about how the system is installed but it is assumed system installation +and the system configuration file are consistent. + +

append

+Config sources (ordered by priority): + +
role priority policy content +
system 200 overwrite A,B,C +
user 400 append (not defined) +
project 600 append D,E +
+

Merge iterations: + +
step description output list after executing this step remarks +
0. reset the output (empty)   +
1. apply system A,B,C   +
2. apply user A,B,C "not defined" doesn't mean "empty", so the list is not deleted - no change +
3. apply project A,B,C,D,E   +
+

Example scenario: the project has its own footprint libs with two paths; these +should be searched after system and user paths. This means the local footprint +lib has lower priority than the stock footprints. See system-dependent +installation remarks in the previous point. + + +

prepend+append

+Config sources (ordered by priority): + +
role priority policy content +
system 200 overwrite A,B,C +
user 400 prepend X,Y,Z +
project 600 append D,E +
+

Merge iterations: + +
step description output list after executing this step remarks +
0. reset the output (empty)   +
1. apply system A,B,C   +
2. apply user X,Y,Z,A,B,C   +
3. apply project X,Y,Z,A,B,C,D,E   +
+ + + Index: 1.2.8/doc/conf/merging.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: 1.2.8/doc/conf/merging.png =================================================================== --- 1.2.8/doc/conf/merging.png (nonexistent) +++ 1.2.8/doc/conf/merging.png (revision 15490) Property changes on: 1.2.8/doc/conf/merging.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: 1.2.8/doc/conf/noextend.html =================================================================== --- 1.2.8/doc/conf/noextend.html (nonexistent) +++ 1.2.8/doc/conf/noextend.html (revision 15490) @@ -0,0 +1,67 @@ + + + + pcb-rnd - old config + + + +

The OLD config system in pcb-rnd

+

If the config system is too static

+ +This document describes the old situation, focusing on drawbacks for +a purpose: to give a hint on why some of the design decisions are made +the way they are, in the new conf system. + +

Settings, preferences, colors, and...

+The core implemented a so called Settings. It was a flat list of items, +each bound to a C variable. There was a bunch of metadata attached to +the items: name, type, description. Generic code could query or change +the value of any setting, the C code could read and write them directly +too. The content is saved to ~/.pcb/settings. +

+On the downside, the actual items this system knew about was pretty much +static, hardwired in core. A plugin could not register its own settings. +Multiple parallel methods were present in the code to overcome this +limitation: +

    +
  • HID attributes: another way to describe name-type-metadata lists; this + was used to pass on some rc-like parameters to the GUI HIDs. It's also the + main API to describe export parameters for the export HIDs. However, + HID attributes is not well suited for saving plugin (or HID) user + preferences, it is more about a per action configuration. + +
  • The gtk HID also saved its own settings to a separate file called + ~/.pcb/preferences. + +
  • Some gtk HID settings didn't quiet fit in the preferences - the color + scheme can be saved in another file, usually under ~/.pcb/colors + +
  • A random plugin could either use the HID attributes to get a limited + service or like the gtk HID did, had to implement its own save-restore of + persistent settings. +
+ +

Meta-drawbacks

+This also introduced a more subtle drawback: the configuration was now +scattered into different files, randomly (looking from the +user's point of view). In other words, the actual structure did not reflect +some logical grouping, but mostly historical or source code organizational +reasons. +

+In turn, this also limited (again somewhat randomly) what settings can be +stored system-wise, user-wise, or on project or design level. +

+Finally, handling of file search paths was not very sophisticated. There +was the system and user configuration that reflected where the stock +library or the user's generic library were installed. And then +there was the per-project local footprint libs that had to be somehow +added too. +

+There was a hardwired way of handling the situation where multiple set +of paths were specified. In practice it was usually possible to get this +to work for the simpler cases, but it was not powerful enough to express +things like "use all system and user libraries first, then the project's local +library" vs. "the project's local library has priority over system libraries". + + + Index: 1.2.8/doc/conf/plugin_chk.html =================================================================== --- 1.2.8/doc/conf/plugin_chk.html (nonexistent) +++ 1.2.8/doc/conf/plugin_chk.html (revision 15490) @@ -0,0 +1,14 @@ + + + + pcb-rnd - config plugin checklist + + + +

The new config system in pcb-rnd

+

Plugin programmer's checklist

+ +TODO + + + Index: 1.2.8/doc/conf/prio.html =================================================================== --- 1.2.8/doc/conf/prio.html (nonexistent) +++ 1.2.8/doc/conf/prio.html (revision 15490) @@ -0,0 +1,27 @@ + + + + pcb-rnd - config priorities + + + +

The new config system in pcb-rnd

+

Priorities

+ +Priority is an integer property of each config root. +Syntax-wise it is part of the name of the config +root. In the lihata config file it is either specified or omitted. When +omitted, a role dependent default value is +used. The default values are chosen in an intuitive way, thus most +commonly the priority value is omitted. +

+For scalar settings, the highest priority +value determines the final value of a setting after the merge. If there +is a tie, role decides: the role closer to the CLI is stronger. +

+For lists and arrays, priority determines the +order of merge, which changes the order of items in the final list as +config roots prepend and append items. + + + Index: 1.2.8/doc/conf/scalars.html =================================================================== --- 1.2.8/doc/conf/scalars.html (nonexistent) +++ 1.2.8/doc/conf/scalars.html (revision 15490) @@ -0,0 +1,61 @@ + + + + pcb-rnd - config scalars + + + +

The new config system in pcb-rnd

+

Scalars

+ +Scalar settings have only one value after the merge. The only policy +available is overwrite - this policy is applied regardless of the +current policy setting. + +

examples

+ +

simple overwrite

+Config sources: + +
role priority policy content +
system 200 overwrite A +
user 400 overwrite (not defined) +
project 600 overwrite Q +
+

+Merge iterations: + +
step description output list after executing this step remarks +
0. reset the output (empty)   +
1. apply system A   +
2. apply user A "not defined" doesn't mean "empty", so the list is not deleted - no change +
3. apply project Q replace the original output because of the overwrite policy +
+

Example scenario: system default overridden by a project setting. + +

user-forced value

+Config sources append: + +
role priority policy content +
system 200 overwrite A +
user 650 overwrite E +
project 600 overwrite Q +
+

+Merge iterations: + +
step description output list after executing this step remarks +
0. reset the output (empty)   +
1. apply system A   +
2. apply project Q   +
3. apply user E   +
+

Example scenario: user preference enforced: even if the project file would use +'Q' for the given setting, the user prefers 'E'. This affects runtime +(the value of the setting after the merge, in other words how pcb-rnd works), +but does not change the project configuration. This allows the given user to +always use 'E' for the given setting while lets other users working on the +same project use the value set in the project file. + + + Index: 1.2.8/doc/conf/sources.html =================================================================== --- 1.2.8/doc/conf/sources.html (nonexistent) +++ 1.2.8/doc/conf/sources.html (revision 15490) @@ -0,0 +1,78 @@ + + + + pcb-rnd - config sources + + + +

The new config system in pcb-rnd

+

Sources

+There are different sources of configuration settings. These are +different configuration files, sometimes located on the file system. +The full list of config sources is: + + +
role default
setting
prio
location presence remarks +
internal + 100 + (compiled into the executable) + always + the ultimate fallback; allows pcb-rnd even if no other configuration file is found + + +
system + 200 + /usr/share/pcb-rnd/pcb-conf.lht + recommended + should hold system and installation specific settings, e.g. path to the system-wise installed footprint library + +
default.pcb + 300 + /usr/share/pcb-rnd/default.pcb + deprecated + pcb editable defaults + +
user + 400 + ~/.pcb-rnd/pcb-conf.lht + recommended + store user preferences, user's common footprint lib path, etc; this is the first file the user can modify (even from the GUI) + +
environment + 500 + environment variables (TODO) + occasional + inject the same (temporary) settings in multiple pcb-rnd sessions without having to change config files + +
project + 600 + project.lht in the project directory + optional + local project settings - useful for large projects with multiple design (.pcb) files + +
design + 700 + saved in the design (.pcb) file + optional, common + per design deviation from the user+system config + +
cli + 800 + command line argument + occasional + inject/change a setting for a single session; useful in batch/automated processing +
+ +

+Pcb-rnd reads them all, then merges all settings into a master binary +representation. If a setting is specified in multiple sources, the one +with the higher priority wins, except for lists where it is also possible +to prepend/append items. Default priorities are designed to result +precedence in an intuitive way (e.g. design settings overwrite user settings). +However, priority can be changed per setting, resulting +in weak settings ("use this value if it was not already set") or strong settings +("I always want to use mincut, so I enable it from my user's config with high +priority and a version controlled project setting can not turn it off") + + + Index: 1.2.8/doc/conf/src/Makefile =================================================================== --- 1.2.8/doc/conf/src/Makefile (nonexistent) +++ 1.2.8/doc/conf/src/Makefile (revision 15490) @@ -0,0 +1,2 @@ +../merging.png: merging.dot + dot -Tpng merging.dot > ../merging.png \ No newline at end of file Index: 1.2.8/doc/conf/src/merging.dot =================================================================== --- 1.2.8/doc/conf/src/merging.dot (nonexistent) +++ 1.2.8/doc/conf/src/merging.dot (revision 15490) @@ -0,0 +1,103 @@ +digraph g { + rankdir=LR; + + subgraph cluster_memtree { + label="in-memory lihata trees" + bgcolor=grey + rank=same + CFR_INTERNAL [label="CFR_INTERNAL\nultimate fallback"] + CFR_SYSTEM [label="CFR_SYSTEM\nsystem level configuration"] + CFR_DEFAULTPCB [label="CFR_DEFAULTPCB"] + CFR_USER [label="CFR_USER\nuser level configuration"] + CFR_ENV [label="CFR_ENV"] + CFR_PROJECT [label="CFR_PROJECT\nproject level configuration"] + CFR_DESIGN [label="CFR_DESIGN"] + CFR_CLI [label="CFR_CLI"] + } + + subgraph cluster_fields { + label="string -> conf_native_t hash" + bgcolor=grey + conf_fields [label="conf_fields\ncentral hash\nof all\nknown settings"] + } + + subgraph cluster_native { + label="native C structures\nper module" + bgcolor=grey + conf_core [label="conf_core\npcb-rnd core settings"] + conf_hid_gtk [label="conf_hid_gtk\nthe hid_gtk plugin's settings"] + conf_mincut [label="conf_mincut\nthe mincut plugin's settings"] + conf_report [label="conf_report\nthe report plugin's settings"] + conf_other [label="...\nother plugin's settings"] + } + + CFR_INTERNAL -> conf_fields [color=red] + CFR_SYSTEM -> conf_fields [color=red] + CFR_DEFAULTPCB -> conf_fields [color=red] + CFR_USER -> conf_fields [color=red] + CFR_ENV -> conf_fields [color=red] + CFR_PROJECT -> conf_fields [color=red] + CFR_DESIGN -> conf_fields [color=red] + CFR_CLI -> conf_fields [color=red] + + +# CFR_INTERNAL -> CFR_SYSTEM +# CFR_SYSTEM -> CFR_DEFAULTPCB +# CFR_DEFAULTPCB -> CFR_USER +# CFR_USER -> CFR_ENV +# CFR_ENV -> CFR_PROJECT +# CFR_PROJECT -> CFR_DESIGN +# CFR_DESIGN -> CFR_CLI + + conf_fields -> conf_core [color=red] + conf_fields -> conf_hid_gtk [color=red] + conf_fields -> conf_mincut [color=red] + conf_fields -> conf_report [color=red] + conf_fields -> conf_other [color=red] + + + + subgraph cluster_files { + label="config files" + bgcolor=grey + lht_system [label="/usr/share/pcb-rnd/pcb-conf.lht" shape=hexagon] + pcb_default [label="/usr/share/pcb-rnd/default.pcb" shape=hexagon] + project [label="./project.lht" shape=hexagon] + lht_user [label="~/.pcb-rnd/pcb-conf.lht" shape=hexagon] + } + + subgraph cluster_exec_env { + label="execution environment" + bgcolor=grey + env [label="environmental variables"] + cli [label="command line arguments\ne.g. -c or\npluginspecific args"] + } + + lht_internal [label="hardwired\nin the\nexecutable"] + design [label="settings\nin the\n.pcb file" shape=hexagon] + + lht_internal -> CFR_INTERNAL [label="program startup"] + lht_system -> CFR_SYSTEM [label="loaded at startup"] + pcb_default -> CFR_DEFAULTPCB [label="loadad in CreateNewPCB()"] + lht_user -> CFR_USER [label="loaded at startup" dir=both] + env -> CFR_ENV [label="built at startup"] + project -> CFR_PROJECT [label="loaded when a\nnew .pcb or project\nis loaded" dir=both] + design -> CFR_DESIGN [label="extracted when loading a design" dir=both] + cli -> CFR_CLI [label="built during\ncommand line argument\nparsing"] + + + hid_gtk [label="the GTK HID"] + + conf_core -> hid_gtk [weight=100] + conf_hid_gtk -> hid_gtk + + hid_gtk -> CFR_DESIGN [color=blue weigth=0] + hid_gtk -> CFR_PROJECT [color=blue weigth=0 style=dashed] + hid_gtk -> CFR_USER [color=blue weigth=0 style=dashed] + + + editor [label="core:\nediting pcb"] + conf_core -> editor [weight=100] + editor -> CFR_DESIGN [color=blue weigth=0] + +} \ No newline at end of file Index: 1.2.8/doc/conf/syntax.html =================================================================== --- 1.2.8/doc/conf/syntax.html (nonexistent) +++ 1.2.8/doc/conf/syntax.html (revision 15490) @@ -0,0 +1,53 @@ + + + + pcb-rnd - config syntax + + + +

The new config system in pcb-rnd

+

Config file syntax

+ +The config file syntax is lihata. +Most users don't need to understand most of the syntax, just follow the +patterns seen in the examples. A few thumb of rules: +
    +
  • structural nodes usually start with a ha: or li: prefix; which one needs to be used is pretty much tied to the node name; thus casual users don't need to care about what they are for, just remember them as part of the name +
  • non-structural nodes are usually given in the form of name = value; use braces around the value if it contains any non-alphanumeric, non-whitespace character +
  • list and array members should better be braced +
  • list and array separator should be semicolon (not comma) +
+ +

config root syntax

+

+A pcb-rnd config file, (or document for short) has a single root +node whose name must be li:pcb-rnd-conf-v1 - this is the signature of the +document. It is a flat list of one or more config root/ subtrees. +TODO: is this really a list or a hash? +

+Each config root is a partial description of the + config tree (which is the logical +configuration of all possible settings). Config roots have a policy and +a priority attached. This is done in the name +of the config root, which must be of the form of policy-priority, +e.g. "overwrite-300" or "append-125". The priority part (with the dash) +can be omitted (and then the per role default priority is used), e.g. +"overwrite" or "append" are valid config root names. +

+Under the config root, a tree of sections (hashes) and setting values +(text nodes) are built. These structures and values are in 1:1 +correspondence with the config tree. Excess +(unknown) keys are considered a warning (except in the plugin/ and +utils/ subtrees). Missing keys or missing subtrees is normal because a config +root can be partial. +

+TODO: examples + +

list syntax

+TODO: list syntax + +

in project files

+TODO + + + Index: 1.2.8/doc/conf/tree/CFN_BOOLEAN.html =================================================================== --- 1.2.8/doc/conf/tree/CFN_BOOLEAN.html (nonexistent) +++ 1.2.8/doc/conf/tree/CFN_BOOLEAN.html (revision 15490) @@ -0,0 +1,8 @@ + + +

pcb-rnd conf tree

+

type: boolean

+Boolean value: true or false. Most often used for determining whether a +feature or a (display mode) is enabled. +

+Example values: true, false, on, off, yes, no, 1, 0. Index: 1.2.8/doc/conf/tree/CFN_COLOR.html =================================================================== --- 1.2.8/doc/conf/tree/CFN_COLOR.html (nonexistent) +++ 1.2.8/doc/conf/tree/CFN_COLOR.html (revision 15490) @@ -0,0 +1,9 @@ + + +

pcb-rnd conf tree

+

type: color

+A color description. Use the "webcolor" format: #rrggbb, where +rr, gg and bb are 2 digit hexadecimal values for red, green and blue +components. +

+Example values: #ff0000 for red, #555555 for grey. Index: 1.2.8/doc/conf/tree/CFN_COORD.html =================================================================== --- 1.2.8/doc/conf/tree/CFN_COORD.html (nonexistent) +++ 1.2.8/doc/conf/tree/CFN_COORD.html (revision 15490) @@ -0,0 +1,10 @@ + + +

pcb-rnd conf tree

+

type: coord

+A coordinate: size, distance, spacing. A decimal number with an unit. Unit +can be metric (e.g. mm, cm, m) or imperial (e.g. mil). +

+Example values: 1.5mm, 15 mil + + Index: 1.2.8/doc/conf/tree/CFN_INCREMENTS.html =================================================================== --- 1.2.8/doc/conf/tree/CFN_INCREMENTS.html (nonexistent) +++ 1.2.8/doc/conf/tree/CFN_INCREMENTS.html (revision 15490) @@ -0,0 +1,8 @@ + + +

pcb-rnd conf tree

+

type: increments

+A collection of coordinates representing an increment configuration. +

+TODO + Index: 1.2.8/doc/conf/tree/CFN_INTEGER.html =================================================================== --- 1.2.8/doc/conf/tree/CFN_INTEGER.html (nonexistent) +++ 1.2.8/doc/conf/tree/CFN_INTEGER.html (revision 15490) @@ -0,0 +1,10 @@ + + +

pcb-rnd conf tree

+

type: integer

+A decimal integer value without unit. The value might be stored in a +32 bit integer; safe range is approximately -2^31 .. 2^31. +

+Example values: 4, 1500, 2545343, -6 + + Index: 1.2.8/doc/conf/tree/CFN_LIST.html =================================================================== --- 1.2.8/doc/conf/tree/CFN_LIST.html (nonexistent) +++ 1.2.8/doc/conf/tree/CFN_LIST.html (revision 15490) @@ -0,0 +1,10 @@ + + +

pcb-rnd conf tree

+

type: list

+An ordered list of strings. +

+Example values: +

+li:{ foo; bar; {foo/bar/with-punctuation}; 123}
+
Index: 1.2.8/doc/conf/tree/CFN_REAL.html =================================================================== --- 1.2.8/doc/conf/tree/CFN_REAL.html (nonexistent) +++ 1.2.8/doc/conf/tree/CFN_REAL.html (revision 15490) @@ -0,0 +1,9 @@ + + +

pcb-rnd conf tree

+

type: real

+A decimal numeric value without unit. +

+Example values: 3.141592654, 5, -12, 0 + + Index: 1.2.8/doc/conf/tree/CFN_STRING.html =================================================================== --- 1.2.8/doc/conf/tree/CFN_STRING.html (nonexistent) +++ 1.2.8/doc/conf/tree/CFN_STRING.html (revision 15490) @@ -0,0 +1,13 @@ + + +

pcb-rnd conf tree

+

type: string

+Text value. +

+Example values: +

+foo
+bar
+{long text with / punctuation?}
+
+ Index: 1.2.8/doc/conf/tree/CFN_UNIT.html =================================================================== --- 1.2.8/doc/conf/tree/CFN_UNIT.html (nonexistent) +++ 1.2.8/doc/conf/tree/CFN_UNIT.html (revision 15490) @@ -0,0 +1,9 @@ + + +

pcb-rnd conf tree

+

type: unit

+Name of a unit. +

+Example values: mm, cm, m, mil + + Index: 1.2.8/doc/conf/tree/appearance.html =================================================================== --- 1.2.8/doc/conf/tree/appearance.html (nonexistent) +++ 1.2.8/doc/conf/tree/appearance.html (revision 15490) @@ -0,0 +1,10 @@ + +

pcb-rnd conf tree

+

subtree: appearance

+ +
node name type flags description +
rat_thickness coord 0 +
mark_size coord 0 relative marker size +
layer_alpha real 0 alpha value for layer drawing +
drill_alpha real 0 alpha value for drill drawing +
Index: 1.2.8/doc/conf/tree/appearance_color.html =================================================================== --- 1.2.8/doc/conf/tree/appearance_color.html (nonexistent) +++ 1.2.8/doc/conf/tree/appearance_color.html (revision 15490) @@ -0,0 +1,35 @@ + +

pcb-rnd conf tree

+

subtree: appearance/color

+ +
node name type flags description +
black color 0 +
white color 0 +
background color 0 background and cursor color ... +
crosshair color 0 different object colors +
cross color 0 +
via color 0 +
via_selected color 0 +
pin color 0 +
pin_selected color 0 +
pin_name color 0 +
element color 0 +
element_nonetlist color 0 +
subc color 0 +
subc_selected color 0 +
subc_nonetlist color 0 +
padstackmark color 0 color of the center mark cross for padstacks +
rat color 0 +
invisible_objects color 0 +
invisible_mark color 0 +
element_selected color 0 +
rat_selected color 0 +
connected color 0 +
off_limit color 0 +
grid color 0 +
layer color 0 +
layer_selected color 0 +
warn color 0 +
mask color 0 +
paste color 0 +
Index: 1.2.8/doc/conf/tree/appearance_loglevels.html =================================================================== --- 1.2.8/doc/conf/tree/appearance_loglevels.html (nonexistent) +++ 1.2.8/doc/conf/tree/appearance_loglevels.html (revision 15490) @@ -0,0 +1,14 @@ + +

pcb-rnd conf tree

+

subtree: appearance/loglevels

+ +
node name type flags description +
debug_tag string 0 log style tag of debug messages +
debug_popup boolean 0 whether a debug line should pop up the log window +
info_tag string 0 log style tag of info messages +
info_popup boolean 0 whether an info line should pop up the log window +
warning_tag string 0 log style tag of warnings +
warning_popup boolean 0 whether a warning should pop up the log window +
error_tag string 0 log style tag of errors +
error_popup boolean 0 whether an error should pop up the log window +
Index: 1.2.8/doc/conf/tree/appearance_messages.html =================================================================== --- 1.2.8/doc/conf/tree/appearance_messages.html (nonexistent) +++ 1.2.8/doc/conf/tree/appearance_messages.html (revision 15490) @@ -0,0 +1,7 @@ + +

pcb-rnd conf tree

+

subtree: appearance/messages

+ +
node name type flags description +
char_per_line integer 0 width of an output line in characters (used by separator drawing in find.c) +
Index: 1.2.8/doc/conf/tree/appearance_misc.html =================================================================== --- 1.2.8/doc/conf/tree/appearance_misc.html (nonexistent) +++ 1.2.8/doc/conf/tree/appearance_misc.html (revision 15490) @@ -0,0 +1,7 @@ + +

pcb-rnd conf tree

+

subtree: appearance/misc

+ +
node name type flags description +
volume integer 0 the speakers volume -100..100 +
Index: 1.2.8/doc/conf/tree/appearance_padstack.html =================================================================== --- 1.2.8/doc/conf/tree/appearance_padstack.html (nonexistent) +++ 1.2.8/doc/conf/tree/appearance_padstack.html (revision 15490) @@ -0,0 +1,8 @@ + +

pcb-rnd conf tree

+

subtree: appearance/padstack

+ +
node name type flags description +
cross_thick integer 0 cross thickness in pixels - 0 means disable crosses +
cross_size coord 0 cross size in word coords - size of one arm of the cross (minus the hole radius) +
Index: 1.2.8/doc/conf/tree/appearance_pinout.html =================================================================== --- 1.2.8/doc/conf/tree/appearance_pinout.html (nonexistent) +++ 1.2.8/doc/conf/tree/appearance_pinout.html (revision 15490) @@ -0,0 +1,12 @@ + +

pcb-rnd conf tree

+

subtree: appearance/pinout

+ +
node name type flags description +
name_length integer 0 +
zoom real 0 +
offset_x coord 0 X offset of origin +
offset_y coord 0 Y offset of origin +
text_offset_x coord 0 X offset of text from pin center +
text_offset_y coord 0 Y offset of text from pin center +
Index: 1.2.8/doc/conf/tree/design.html =================================================================== --- 1.2.8/doc/conf/tree/design.html (nonexistent) +++ 1.2.8/doc/conf/tree/design.html (revision 15490) @@ -0,0 +1,28 @@ + +

pcb-rnd conf tree

+

subtree: design

+ +
node name type flags description +
via_thickness coord 0 +
via_drilling_hole coord 0 +
line_thickness coord 0 +
clearance coord 0 +
max_width coord 0 +
max_height coord 0 +
alignment_distance coord 0 default drc size +
bloat coord 0 default drc size +
shrink coord 0 +
min_wid coord 0 +
min_slk coord 0 +
min_drill coord 0 +
min_ring coord 0 +
text_scale integer 0 text scaling in % +
text_font_id integer 0 +
poly_isle_area real 0 polygon min area +
default_layer_name string 0 +
fab_author string 0 Full name of author for FAB drawings +
initial_layer_stack string 0 deprecated. +
groups string 0 string with layergroups +
routes string 0 string with route styles +
paste_adjust coord 0 Adjust paste thickness +
Index: 1.2.8/doc/conf/tree/editor.html =================================================================== --- 1.2.8/doc/conf/tree/editor.html (nonexistent) +++ 1.2.8/doc/conf/tree/editor.html (revision 15490) @@ -0,0 +1,56 @@ + +

pcb-rnd conf tree

+

subtree: editor

+ +
node name type flags description +
grid_unit unit 0 select whether you draw in mm or mil +
grid coord 0 grid in pcb-units +
increments_mm increments 0 increments (size deltas) when drawing in mil +
increments_mil increments 0 increments (size deltas) when drawing in mil +
zoom real 0 default zoom +
mode integer 0 currently active mode +
buffer_number integer 0 number of the current buffer +
clear_line boolean 0 new lines/arc clear polygons. +
clear_polypoly boolean 0 new polygons clear polygons. +
full_poly boolean 0 new polygons are full polygons. +
unique_names boolean 0 force unique names +
snap_pin boolean 0 snap to pins and pads +
snap_offgrid_line boolean 0 Snap to certain off-grid points along a line. +
marker_snaps boolean 0 marker snaps to grid or snap points, as any other click +
highlight_on_point boolean 0 Highlight if crosshair is on endpoints. +
show_solder_side boolean 0 mirror output +
save_last_command boolean 0 the command entry editline always starts with the last command entered by user in the current session +
line_refraction integer 0 value for line lookahead setting +
save_in_tmp boolean 0 emergency save unsaved PCB data (despite the user clicks don't save) when: user starts a new PCB; user quits pcb-rnd. Does not affect the on-crash emergency save. +
draw_grid boolean 0 draw grid points +
all_direction_lines boolean 0 enable lines to all directions +
rubber_band_mode boolean 0 move, rotate use rubberband connections +
rubber_band_keep_midlinedir boolean 0 keep line direction when a middle line is moved +
swap_start_direction boolean 0 change starting direction after each click +
show_drc boolean 0 show drc region on crosshair +
auto_drc boolean 0 when set, PCB doesn't let you place copper that violates DRC. +
show_number boolean 0 pinout shows number +
orthogonal_moves boolean 0 move items orthogonally. +
reset_after_element boolean 0 reset connections after each element while saving all connections +
auto_place boolean 0 flag which says we should force placement of the windows on startup +
lock_names boolean 0 lock down text so they can not be moved or selected +
only_names boolean 0 lock down everything else but text so only text objects can be moved or selected +
thin_draw boolean 0 if set, objects on the screen are drawn as outlines (lines are drawn as center-lines). This lets you see line endpoints hidden under pins, for example. +
thin_draw_poly boolean 0 if set, polygons on the screen are drawn as outlines. +
wireframe_draw boolean 0 if set, lines and arcs on the screen are drawn as outlines. +
local_ref boolean 0 use local reference for moves, by setting the mark at the beginning of each move. +
check_planes boolean 0 when set, only polygons and their clearances are drawn, to see if polygons have isolated regions. +
hide_names boolean 0 when set, element names are not drawn. +
description boolean 0 obsolete - DO NOT USE - kept for compatibility +
name_on_pcb boolean 0 obsolete - DO NOT USE - kept for compatibility +
subc_id string 0 subcircuit ID template for diplaying the subcircuit label on the subcircuit layer; default to displaying the refes, if empty; syntax if the same as for DYNTEXT +
fullscreen boolean 0 hide widgets to make more room for the drawing +
move_linepoint_uses_route boolean 0 Moving a line point calculates a new line route. This allows 45/90 line modes when editing lines. +
auto_via boolean 0 when drawing traces and switching layers or when moving an object from one layer to another, try to keep connections by automatically inserting vias. +
route_radius real 0 temporary: route draw helper's arc radius at corners (factor of the trace thickness) +
click_time integer 0 default time for click expiration, in ms +
enable_stroke boolean 0 Enable libstroke gestures on middle mouse button when non-zero +
live_routing boolean 0 autorouter shows tracks in progress +
beep_when_finished boolean 0 flag if a signal should be produced when searching of connections is done +
undo_warning_size integer 0 warn the user when undo list exceeds this amount of kilobytes in memory +
Index: 1.2.8/doc/conf/tree/editor_selection.html =================================================================== --- 1.2.8/doc/conf/tree/editor_selection.html (nonexistent) +++ 1.2.8/doc/conf/tree/editor_selection.html (revision 15490) @@ -0,0 +1,8 @@ + +

pcb-rnd conf tree

+

subtree: editor/selection

+ +
node name type flags description +
disable_negative boolean 0 selection box behaviour: disable the negative-direction selection - any selection box will select only what's fully within the box +
symmetric_negative boolean 0 selection box behaviour: when set, the selection direction is considered negative only if the box has negative size in the X direction +
Index: 1.2.8/doc/conf/tree/editor_view.html =================================================================== --- 1.2.8/doc/conf/tree/editor_view.html (nonexistent) +++ 1.2.8/doc/conf/tree/editor_view.html (revision 15490) @@ -0,0 +1,8 @@ + +

pcb-rnd conf tree

+

subtree: editor/view

+ +
node name type flags description +
flip_x boolean 0 view: flip the board along the X (horizontal) axis +
flip_y boolean 0 view: flip the board along the Y (vertical) axis +
Index: 1.2.8/doc/conf/tree/rc.html =================================================================== --- 1.2.8/doc/conf/tree/rc.html (nonexistent) +++ 1.2.8/doc/conf/tree/rc.html (revision 15490) @@ -0,0 +1,31 @@ + +

pcb-rnd conf tree

+

subtree: rc

+ +
node name type flags description +
verbose integer 0 +
quiet integer 0 print only errors on stderr +
backup_interval integer 0 time between two backups in seconds; 0 means disabled (no backups) +
brave string 0 brave mode flags: when non-empty, enable various experimental (unstable) features - useful for testers +
font_command string 0 file name template; if not empty, run this command and read its output for loading the font; %f is the file name +
file_command string 0 file name template; if not empty, run this command and read its output for loading a pcb file; %f is the file name, %p is the conf setting rc.file_path +
file_path string 0 +
library_shell string 0 +
library_search_paths list 0 +
emergency_name string 0 file name template for emergency save anonymous .pcb files (when pcb-rnd crashes); optional field: %ld --> pid; must be shorter than 240 characters. Don't do emergency save if this item is empty. +
emergency_format string 0 if set, use this format for the backups; if unset, use the default format +
backup_name string 0 file name template for periodic backup anonymous .pcb files; optional fields: %P --> pid +
backup_format string 0 if set, use this format for the backups; if unset or set to 'original', use the original format +
save_command string 0 command to pipe the pcb, footprint or buffer file into, when saving (makes lihata persist impossible) +
keep_save_backups boolean 0 a copy is made before a save operation overwrites an existing file; if this setting is true, keep the copy even after a successful save +
default_font_file list 0 name of default font file (list of names to search) +
default_pcb_file list 0 +
script_filename string 0 PCB Actions script to execute on startup +
action_string string 0 PCB Actions string to execute on startup +
rat_path string 0 +
rat_command string 0 file name template; if not empty, run this command and read its output for loading a rats; %f is the file name, %p is the rc.rat_path conf setting +
preferred_gui list 0 if set, try GUI HIDs in this order when no GUI is explicitly selected +
save_final_fallback_fmt string 0 when a new file is created (by running pcb-rnd with the file name) there won't be a known format; pcb-rnd will guess from the file name (extension) but eventhat may fail. This format is the final fallback that'll be used if no other guessing mechanism worked. The user can override this by save as. +
save_fp_fmt string 0 when saving a buffer element/subcircuit, prefer this format by default +
have_regex boolean 0 whether we have regex compiled in +
Index: 1.2.8/doc/conf/tree/rc_path.html =================================================================== --- 1.2.8/doc/conf/tree/rc_path.html (nonexistent) +++ 1.2.8/doc/conf/tree/rc_path.html (revision 15490) @@ -0,0 +1,13 @@ + +

pcb-rnd conf tree

+

subtree: rc/path

+ +
node name type flags description +
prefix string 0 e.g. /usr/local +
lib string 0 e.g. /usr/lib/pcb-rnd +
bin string 0 e.g. /usr/bin +
share string 0 e.g. /usr/share/pcb-rnd +
home string 0 user's home dir, determined run-time +
exec_prefix string 0 exec prefix path (extracted from argv[0]) +
design string 0 directory path of the current design, or if the current design doesn't have a file name yet +
Index: 1.2.8/doc/conf/tree/temp.html =================================================================== --- 1.2.8/doc/conf/tree/temp.html (nonexistent) +++ 1.2.8/doc/conf/tree/temp.html (revision 15490) @@ -0,0 +1,7 @@ + +

pcb-rnd conf tree

+

subtree: temp

+ +
node name type flags description +
rat_warn boolean 0 rats nest has set warnings +
Index: 1.2.8/doc/contrib.html =================================================================== --- 1.2.8/doc/contrib.html (nonexistent) +++ 1.2.8/doc/contrib.html (revision 15490) @@ -0,0 +1,70 @@ + + + + + pcb-rnd - contribution + + + + + + + + + +
Main + News + Doc & pool + Support + People + Events & timeline + pcb-rnd [pcb-rnd logo] +
+ + +

pcb-rnd - contribution

+ +If you are interested to help out, please contact me using + the live chat (CET daytime) or mail to: +pcb-rnd (at) igor2.repo.hu. + +

Contributing as a user

+Using pcb-rnd in production and just reporting bugs is already a huge contribution. +

+More dedicated users can join in scheduled, systematic testing. Such testing +is split up into independent chunks that each can be done in an hour. +

+Even more dedicated users can join developing the documentation. +

+None of the above requires or assumes any programming skill. + +

Contributing as a developer

+ +The project is lead in an autocratic way by Igor2. + +Developer freedom taken away: +
    +
  • the basic concept of pcb-rnd is set and won't change +
  • the toolchain is chosen, and won't change; the usual hot topics: svn, scconfig, C. +
  • don't add code that restricts usability for others; add code that increases usability for some; thus prefer to add code in plugins! +
+

+Developer freedom promptly granted: +

    +
  • svn commit access from day 0 +
  • work together in trunk/, not alone in a branch +
  • pcb-rnd has a strong plugin support; want to implement a strange/controversial feature? In a plugin, almost anything goes +
  • especially in plugins, work on whatever you want, even if noone else needs that feature +
+

+Coding style/indentation: there's an unified style +in core and core plugins. If you work on those parts, try to stick to it. If you +are working on a new plugin, it's still the preferred style but you can use +a different style. However, the rule is that if someone else starts hacking +that part too, he is allowed to convert the code to the unified format; but +unified format can not be converted to anything else. So it's a one way +process which long term grants unified style while not demotivates a plugin +developer by forcing a style on him in the early, "when the bulk of the code +is written" phase. + + Index: 1.2.8/doc/datasheet.html =================================================================== --- 1.2.8/doc/datasheet.html (nonexistent) +++ 1.2.8/doc/datasheet.html (revision 15490) @@ -0,0 +1,78 @@ + + + + pcb-rnd - datasheet + + + + + + + + + + +
Main + News + Doc & pool + Support + People + Events & timeline + pcb-rnd [pcb-rnd logo] +
+ + +

pcb-rnd - datasheet

+ + + + + + + + + + + + +
layout characteristics + multiple layers (16 copper, compile time tunable limit) +
smd and through-hole components +
solder mask, paste, assembly drawings +
board size up to 2x2 meter at nanometer precision +
arbitrary amount of routing styles +
Design Rule Checker +
board file formats + lihata (native), geda/PCB's .pcb, KiCad's s-expr kicad_pcb +
other native formats + geda/PCB's .fp for footprints (native) +
import formats + gEDA/gaf sch, gEDA/gaf netlist, dsn, edif +
export formats + gerber, png, ps, svg, bom, xy, bboard, dsn, gcode, ipcd356, lpr, nelma, kicad old pcb format +
UI options + gtk2, lesstif (motif), batch (automated processing) +
configurable menus, keyboard and mouse actions +
footprint library + parametric footprints written in any programming language +
optionally per system, per user, per project libs +
footprints from local files +
footprints from the web (gedasymbols.org) +
scripting + embedded scripting using libgpmi (awk, python, lua, tcl, ruby, perl, php, scheme, lisp) +
layout helpers + basic autorouter, basic autoplace, place objects in aligned grid, + asymmetric pin shapes, back annotation tracking, + trace puller, teardrops +
understands internal connections in footprints +
query mini-language for finding and selecting objects by rules +
misc + flexible configuration system +
support for small screen (800x600) +
strong support for automated processing +
modularity (most code implemented in plugins) +
slim code, reduced external dependency, portability +
+ + + Index: 1.2.8/doc/developer/Makefile =================================================================== --- 1.2.8/doc/developer/Makefile (nonexistent) +++ 1.2.8/doc/developer/Makefile (revision 15490) @@ -0,0 +1,28 @@ +ROOT=../.. +DEVDIR=$(DOCDIR)/developer + +all: + +install_all: + $(SCCBOX) mkdir -p $(DEVDIR)/alien_formats $(DEVDIR)/ddrc $(DEVDIR)/hid_gtk3 $(DEVDIR)/hid_remote $(DEVDIR)/mods3 + $(SCCBOX) $(HOW) alien_formats/*.txt $(DEVDIR)/alien_formats/ + $(SCCBOX) $(HOW) ddrc/*.txt $(DEVDIR)/ddrc/ + $(SCCBOX) $(HOW) hid_gtk3/*.html hid_gtk3/*.png $(DEVDIR)/hid_gtk3/ + $(SCCBOX) $(HOW) hid_remote/*.html hid_remote/*.svg $(DEVDIR)/hid_remote/ + $(SCCBOX) $(HOW) mods3/*.html mods3/*.png $(DEVDIR)/mods3/ + +install: + $(MAKE) install_all HOW="install -f -d" + +linstall: + $(MAKE) install_all HOW="install -f -l -d" + +uninstall: + $(MAKE) install_all HOW="install -u" + +clean: + +distclean: + + +include $(ROOT)/Makefile.conf Index: 1.2.8/doc/developer/alien_formats/hyp.txt =================================================================== --- 1.2.8/doc/developer/alien_formats/hyp.txt (nonexistent) +++ 1.2.8/doc/developer/alien_formats/hyp.txt (revision 15490) @@ -0,0 +1,630 @@ +A serias of mails sent by Koen to Igor2: + +-- + +The BOARD section comes after the header. The board section provides +enough information to draw the board outline. +The BOARD section corresponds to the pcb-rnd "outline" layer. The syntax +looks like this: + +{BOARD + (PERIMETER_SEGMENT X1=x1 Y1=y1 X2=x2 Y2=y2) + (PERIMETER_ARC X1=x1 Y1=y1 X2=x2 Y2=y2 XC=xc YC=yc R=r) +} + +PERIMETER_SEGMENT is a straight line from (x1, y1) to (x2, y2). +PERIMETER_ARC is a counterclockwise circle arc (x1, y1) to (x2, y2) with +center (xc, yc) and radius r. +x1, y1. x2, y2, xc, yc, and r are in the unit you chose in the UNITS +statement (cm or inch). +The example above shows only two, but a BOARD section typically has many +PERIMETER_SEGMENT and PERIMETER_ARC statements. + +Test the correct orientation for the arc: counterclockwise. +You can mix the PERIMETER_SEGMENT and PERIMETER_ARC any way you want. +The order does not matter. Just print one PERIMETER_SEGMENT or +PERIMETER_ARC per line. + + +-- + + +The STACKUP section defines all layers, both copper and dielectric. This +is an example of a two-sided board: + +{STACKUP + (SIGNAL T=0.003500 L="component") + (DIELECTRIC T=0.160000 L="dielectric layer 1") + (SIGNAL T=0.003500 L="solder") +} + +The above corresponds to 35um copper on 1.6mm FR4. + +Apart from SIGNAL and DIELECTRIC, there's a third type of copper layer, +PLANE, not shown here. The difference between SIGNAL and PLANE is that a +SIGNAL layer is empty by default, unless you draw something on it, while +a PLANE layer is full of copper by default. This can be used for power +and ground planes. + +The thickness T is in cm, as that is the UNIT you chose. + +The STACKUP is where you can define the properties of the material. Most +common are the bulk resistivity of the copper (BR=), or the dielectric +constant of the dielectric (ER=). + (SIGNAL T=0.000700 BR=resistivity L="component") + (DIELECTRIC T=0.002000 ER=epsilon L="dielectric layer 1") +If you don't say anything, the values default to copper on FR4, which is +what most people want. + +Look at the layer name. This is the first time we have to print a +string. +Hyperlynx will accept many strings without double quotes, but if the +string contains characters like } or ) you may have a problem. +To avoid these problems, always print a string between double quotes +(""). +eg. LAYER="Component" +If the string contains a double quote, print two double quotes. +e.g "This is a ""string"" with double quotes." + +Give all layers a name. If you don't choose a name, Hyperlynx will +choose a name for you, and it probably won't be what you want. + +-- + +A hyperlynx file looks something like this: +- header +- board outline +- stackup: definition of all layers of the board, both copper and +dielectric +- devices: parts list. +- padstack: definition of the shape of vias, pins and pads +- net: definition of all copper. A 'net' is connected copper. + - straight lines + - arcs + - polygons + - vias: references a padstack. + - pins and pads: each pin or pad references a padstack and a device. + + - unrouted segments +- footer + +I'd split this in different functions, so that the order can be changed +easily if you want to re-use the code for another export module. + +The difference between vias, pins and pads is: + - a via has a hole but is not associated with a device + - a pin has a hole and a device + - a pad does not have a hole, but has a device. + +The first piece of code is writing the header and the footer. + +The header looks like this: + +* test.hyp exported by pcb-rnd 1.2.3 on 01.01.1999 12:45 +{VERSION=2.0} +{DATA_MODE=DETAILED} +{UNITS=METRIC LENGTH} + +A line that begins with "*" is a comment. + +This says you are using centimeters for coordinates and for layer +thickness. +If you would prefer to export coordinates in inches, and layer thickness +in ounces per square foot, you could use: +{UNITS=ENGLISH WEIGHT} +Your choice. + +and the footer is: + +{END} + +If you want to, tomorrow I'll send the info for the board outline. If +there are any questions, just ask. + +-- + +After the STACKUP section, there's the DEVICES section. The DEVICES +section is the parts list of the board. + +{DEVICES + (? REF="U1" NAME="BC548" L="Top") + (? REF="R2" NAME="1K2" L="Top") + ... +} + +This is where we say which side of the board the component is soldered +on. The exact coordinates of the component are specified later, when we +handle the PINs and PADs. + +The L=layer is the layer the component is soldered on. Use the same +layer name as in the STACKUP section. + +A board needs at least one component, else there are no pins or pads to +connect the simulation to. + +-- + +A PADSTACK section describes the pads of a pin, via or pad. +You describe the pads of a via, pin or pad once, and refer to it +multiple times when creating vias, pins or pads. + +A padstack looks like this: + +{PADSTACK=name, + (layer, shape, x-size, y-size, angle, type) + ... more layers +} + +where shape is 0 for circle/ellipse, 1 for square/rectangle, 2 for +oblong. angle is the rotation in degrees, counterclockwise. + +The "type" parameter is M, A, T. +M Metal: ordinary copper pad, +A Antipad: hole around the pad on PLANE layers, +T Thermal: thermal relief. + +Thermal relief is when a pin connects to a ground plane with short, +stubby tracks, like spokes on a wheel. This makes the pin easier to +solder. If you simply connect the pin to a solid copper polygon it is +difficult to solder, because the direct connection to a big copper +surface copper cools the pin too much. +You don't have to specify the type parameter, but it doesn't hurt. + +An example: + +{PADSTACK="pad1" + ("Top", 1, 0.5, 0.5, 0, M) +} + +The padstack called "pad1" consists of a single pad on the "Top" layer, +0.5 cm square. + +If the padstack describes a pin or via, you have to specify the diameter +of the drill hole: + +{PADSTACK=name, diameter + (layer, shape, x-size, y-size, angle, type) + ... more layers +} + +{PADSTACK="stack2", 0.2 + ("Top", 0, 0.5, 0.5, 0, M) + ("Bottom", 0, 0.5, 0.5, 0, M) +} + +There are two special layer names: MDEF and ADEF. +If the layer is MDEF (without quotes) this means: size of metal pad on +all SIGNAL layers. +ADEF (without quotes) means size of the hole in the copper on all PLANE +layers. +Using MDEF and ADEF you can define a padstack for a via or pin which +will always work, even if layers are added, removed or changed in name. +Example: + +{PADSTACK="pin1", 0.2 + (MDEF, 0, 0.5, 0.5, 0, M) + (ADEF, 0, 0.5, 0.5, 0, A) +} + +For completeness: You could define thermal relief around a pad. + + (layer, shape copper, x-size copper, y-size copper, angle copper, +shape thermal relief, x-size thermal relief, y-size thermal relief, +angle thermal relief, T) +So a single layer may appear up to three times in the same PADSTACK: +once for each type (M - metal, A - antipad, T - thermal) + +The two padstacks to remember when exporting are the "pad1" and "pin1" +examples. + +A hyperlynx file contains multiple PADSTACK sections, one per padstack. + +When exporting, you have to loop over all vias, pins and pads of the +board twice: once when creating the padstacks, and once when creating +the vias, pins and pads. + +-- + +The NET section specifies a network of connected copper. A NET is not +limited to a single layer, but may be on multiple layers. + +The NET section contains subsections: + - SEG and ARC to draw line segments and circle arcs + - PIN to draw component pads and pins + - VIA for vias + - POLYGON and POLYVOID to draw polygons with holes + - POLYLINE to draw a sequence of line segments and circle arcs + - USEG to draw unrouted segments + +Each net has a name, e.g. "VCC","CLK", "GND". + +{NET="I2C_SCL" + (SEG X1=6.500000 Y1=3.000000 X2=6.625000 Y2=3.000000 +W=0.008333 L="Top") + ... other SEG, ARC, PIN, VIA, POLYGON, POLYVOID, POLYLINE, USEG +records ... +} + +A hyperlynx file contains multiple NET sections, one per network. + +Next: the subsections of the NET section. + +-- + +Often a copper trace is a sequence of straight lines and arcs, all of +the same width. + +If you have a sequence of line segments and arcs, all of the same net, +all on the same layer, all of the same width, you can draw the whole +trace as a POLYLINE: + + +{NET=name + {POLYLINE L=layer W=width ID=integer_id X=x0 Y=y0 + (LINE X=x1 Y=y1) + (CURVE X1=x2 Y1=y2 X2=x3 Y2=y3 XC=xc YC=yc R=r) + (LINE X=x4 Y=y4) + ... + } +... +} + +integer_id is a number, which is different for each polyline (and +polygon). +For integer_id, just initialize a number to 0, and increase it id++ +every time you draw a polyline or polygon. + +How is the POLYLINE above drawn? + +First a line from (x0, y0) to (x1, y1) on layer "layer" and width w is +drawn. +Then an arc counterclockwise from (x2, y2) to (x3, y3) with center (xc, +yc) and radius r is drawn. +Where the next LINE begins depends on where the CURVE ends. +The CURVE begins where the previous segment ends. +If (x1, y1) is the same as (x2, y2) the CURVE ends at (x3, y3) and a +line from (x3, y3) to (x4, y4) is drawn. +If (x1, y1) is the same as (x3, y3) the CURVE ends at (x2, y2) and a +line from (x2, y2) to (x4, y4) is drawn. + +An example: + +{NET="VCC" + {POLYLINE L="component" W=0.1 ID=1 X=6.000000 Y=5.000000 + (LINE X=8.000000 Y=5.000000) + (CURVE X1=8.000000 Y1=5.000000 X2=8.000000 Y2=5.500000 +XC=8.000000 YC=5.250000 R=0.250000) + (LINE X=6.000000 Y=5.500000) + ... + } +... +} + +You can have as many LINE and CURVE substatements as you like, and in +any order. + +-- + +A trace can be defined, not by its shape, but by its delay, +characteristic impedance and resistance. This is the unrouted segment +USEG. + +{NET=net_name + (USEG X1=x1 Y1=y1 L1=layer1 X2=x2 Y2=y2 L2=layer2 +Z=characteristic_impedance D=delay R=resistance ) + =85 +} + +This unrouted segment begins on one layer L1= and end on another L2= +. + +Another way of defining a trace is by giving width, length and layer. +The delay and characteristic impedance can be calculated from trace +width, trace length and the thickness and epsilon of the dielectric +above and below the trace. + + (USEG X1=x1 Y1=y1 L1=layer1 X2=x2 Y2=y2 L2=layer2 +ZL=trace_layer ZW=trace_width ZLEN=trace_length) + +This unrouted segment is a transmission line which begins on one layer +L1= and end on another L2= . The microstrip itself is drawn on layer +ZL=. + +This way you can simulate a trace as a lossy transmission line. +[ Note: When simulating power supply and ground planes, which are mostly +copper, the simulation model is not a transmission line but its +two-dimensional equivalent, the transmission plane. ] + +-- + +The difference between a PIN and a VIA is that a PIN belongs to a +device. + + (VIA X=x0 Y=y0 P=padstack0) + +puts a via at coordinates (x0, y0) according to padstack "padstack0". +The shape of the pads, whether the via is a through-hole via, a blind or +a buried via, is all defined in the padstack. + +Example: + + (VIA X=11.750000 Y=5.250000 P="0802pad") + +A pin + + (PIN X=x0 Y=y0 R=ref P=padstack0) + +puts a pin or pad at coordinates (x0, y0) according to padstack +"padstack0". +The reference is of the format "device_name.pin_name". This requires +that "device_name" has been defined in the "DEVICES" section. + +Example: + + (PIN X=15 Y=1 R="U1.2" P="smd04") + +Here U1.1 is pin "2" of device "U1". To avoid problems, it is better if +device and pin names do not contain the "." character. + +The shape of the pads, whether the pin is smd or through hole is defined +in the padstack. + +The simulation connects signal sources to the board at PINs, and +measures voltages at PINs. + +-- + +When all else fails, you can always represent copper as a POLYGON. + +The POLYGON syntax is very similar to the POLYLINE syntax. Just change +POLYLINE into POLYGON. + +{NET=name + {POLYGON L=layer T=POUR W=width ID=integer_id X=x0 Y=y0 + (LINE X=x1 Y=y1) + (CURVE X1=x2 Y1=y2 X2=x3 Y2=y3 XC=xc YC=yc R=r) + (LINE X=x4 Y=y4) + ... + (LINE X=xn Y=yn) + } +... +} + +The difference is that a POLYGON is closed. A POLYLINE ends at the last +point (xn, yn). +A POLYGON draws a line from the last point (xn, yn) back to (x0, y0). + +The T=POUR parameter says the inside of the polygon is filled with +copper. + +A Hyperlynx polygon has an outline of straight line segments and circle +arcs. +The W=width parameter gives the line width of the outline. You can +make a polygon bigger this way. + +In the often occurring case of a polygon of only line segments, and zero +border width, we get: + +{NET=name +... + {POLYGON L=layer T=POUR W=0.0 ID=integer_id X=x0 Y=y0 + (LINE X=x1 Y=y1) + ... + (LINE X=xn Y=yn) + } +... +} + +Example: + +{NET="VCC" + {POLYGON L="TOP" W=0.0 ID=1 X=9.000000 Y=6.500000 + (LINE X=10.000000 Y=6.500000) + (LINE X=10.000000 Y=7.000000) + (LINE X=9.500000 Y=7.000000) + (LINE X=9.500000 Y=7.500000) + (LINE X=9.000000 Y=7.500000) + (LINE X=9.000000 Y=6.500000) + } +} + +Do not forget that all polygons and polylines should have a different +ID= value. + +-- + +A POLYVOID is a hole in a POLYGON. The hole itself is shaped like a +polygon, too. The shape of the hole is a sequence of straight lines and +circle arcs: + +{NET=name +... + {POLYVOID ID=integer_id X=x0 Y=y0 + (LINE X=x1 Y=y1) + (CURVE X1=x2 Y1=y2 X2=x3 Y2=y3 XC=xc YC=yc R=r) + (LINE X=x4 Y=y4) + ... + (LINE X=xn Y=yn) + } +... +} + +The ID= value of the POLYVOID hole is the same as the ID= value of +the POLYGON you want to make a hole in. +You do not have to specify the layer of the hole, because the hole is on +the same layer as the polygon you make a hole in. + +Example: + +{NET="Ground" + {POLYGON L="component" T=POUR W=0.0 ID=3 X=9.000000 +Y=6.500000 + (LINE X=10.000000 Y=6.500000) + (LINE X=10.000000 Y=7.000000) + (LINE X=9.500000 Y=7.000000) + (LINE X=9.500000 Y=7.500000) + (LINE X=9.000000 Y=7.500000) + (LINE X=9.000000 Y=6.500000) + } + {POLYVOID ID=3 X=9.125000 Y=6.625000 + (LINE X=9.625000 Y=6.625000) + (LINE X=9.625000 Y=6.875000) + (LINE X=9.375000 Y=6.875000) + (LINE X=9.375000 Y=7.125000) + (LINE X=9.125000 Y=7.125000) + (LINE X=9.125000 Y=6.625000) + } +} + +A polygon can have several holes. Just write several POLYVOID sections. +In practice, if you only export polygons consisting of straight lines of +zero width, you get the following: + +{NET=name +... + {POLYGON L=layer T=POUR W=0.0 ID=integer_id X=x0 Y=y0 + (LINE X=x1 Y=y1) + ... + } + {POLYVOID ID=integer_id X=x0 Y=y0 + (LINE X=x1 Y=y1) + ... + } + {POLYVOID ID=integer_id X=x0 Y=y0 + (LINE X=x1 Y=y1) + ... + } +... +} + +Where integer_id is the same for the POLYGON and its POLYVOIDs. + +Don't forget to end your exported file with {END} + +This ends the Hyperlynx exporting HOWTO. + +-- + +Result (sent by Igor2 to Koen): + +> The STACKUP section defines all layers, both copper and dielectric. This is an example of a two-sided board: +> +> {STACKUP +> (SIGNAL T=0.003500 L="component") +> (DIELECTRIC T=0.160000 L="dielectric layer 1") +> (SIGNAL T=0.003500 L="solder") +> } +> +> The above corresponds to 35um copper on 1.6mm FR4. + +Deviation: we don't yet store metadata like layer thickness. We are very +close to have it, but still don't have it, so I just hardwired these +default values for now. + +> Look at the layer name. This is the first time we have to print a string. +> Hyperlynx will accept many strings without double quotes, but if the string contains characters like } or ) you may have a problem. +> To avoid these problems, always print a string between double quotes (""). +> eg. LAYER="Component" + +Because of io_kicad, pcb_printf() supports %mq, which gets a list of +characters that need quoting and a string and can decide whether quoting +is needed or not. So instead of quoting everything, I just configured this +to what seemed reasonable and we quote only what needs to be quoted. + +The list of characters that need quoting is specified only once; if we +figure there's a character left out, it's trivial to add. + +-- + +> A PADSTACK section describes the pads of a pin, via or pad. +> You describe the pads of a via, pin or pad once, and refer to it multiple times when creating vias, pins or pads. +> +> A padstack looks like this: +> +> {PADSTACK=name, +> (layer, shape, x-size, y-size, angle, type) +> ... more layers +> } + +For this I had to write a pad stack hash - in pcb-rnd we don't have +central lib/list of geometry, each via and pin specifies its own. This pad +stack hash is a hyp-independent lib, I'll move it into a separate plugin +this week. + + +> +> where shape is 0 for circle/ellipse, 1 for square/rectangle, 2 for oblong. angle is the rotation in degrees, counterclockwise. + +This is on my TODO; we have more shapes, some are asymmetrical, will have +to figure this. + +> There are two special layer names: MDEF and ADEF. +> If the layer is MDEF (without quotes) this means: size of metal pad on all SIGNAL layers. +> ADEF (without quotes) means size of the hole in the copper on all PLANE layers. +> Using MDEF and ADEF you can define a padstack for a via or pin which will always work, even if layers are added, removed or changed in name. Example: +> +> {PADSTACK="pin1", 0.2 +> (MDEF, 0, 0.5, 0.5, 0, M) +> (ADEF, 0, 0.5, 0.5, 0, A) +> } + +Diversion: at the moment pcb-rnd doesn't support anything else for +pins/vias just "same copper ring on all layers", so I used MDEF here. + +-- + +> Apart from SIGNAL and DIELECTRIC, there's a third type of copper layer, PLANE, not shown here. The difference between SIGNAL and PLANE is that a SIGNAL layer is empty by default, unless you draw something on it, while a PLANE layer is full of copper by default. This can be used for power and ground planes. + +Diversion: pcb-rnd doesn't support negative drawn copper, so I used SIGNAL +and DIELECTRIC only. + +-- + +> Often a copper trace is a sequence of straight lines and arcs, all of the same width. +> +> If you have a sequence of line segments and arcs, all of the same net, all on the same layer, all of the same width, you can draw the whole trace as a POLYLINE: +> +> +> {NET=name +> {POLYLINE L=layer W=width ID=integer_id X=x0 Y=y0 +> (LINE X=x1 Y=y1) +> (CURVE X1=x2 Y1=y2 X2=x3 Y2=y3 XC=xc YC=yc R=r) +> (LINE X=x4 Y=y4) +> ... +> } + +It's good to know; however pcb-rnd doesn't have polylines of any sort, so +we are not using this feature. + +-- + +> +> A trace can be defined, not by its shape, but by its delay, characteristic impedance and resistance. This is the unrouted segment USEG. +> +> {NET=net_name +> (USEG X1=x1 Y1=y1 L1=layer1 X2=x2 Y2=y2 L2=layer2 Z=characteristic_impedance D=delay R=resistance ) +> ? +> } +> +> This unrouted segment begins on one layer L1= and end on another L2= . + +Question: is USEG the same as rat lines in pcb-rnd? Indication of a +logical connection that is derived from the netlist but is not (yet) +realized in copper? + +-- + +The netlist feature now works. + +We're getting there. I've run some tests, and there are some +conclusions: + +- all internal layers are called "Intern" instead of the real layer +names. This is a problem, because no two layer names may be the same. +- the board is upside down + +The easiest way to check is by importing the +io_hyp/tests/test00/test00.hyp file, exporting it as hyperlynx, and +importing again. + +-- Index: 1.2.8/doc/developer/bisect.txt =================================================================== --- 1.2.8/doc/developer/bisect.txt (nonexistent) +++ 1.2.8/doc/developer/bisect.txt (revision 15490) @@ -0,0 +1,62 @@ +How to bisect +~~~~~~~~~~~~~ + +Because of the svn externs in src_3rd, it's not trivial to do bisecting +manually. There is a script to automate the process. + +Realizing disk space is cheap but developer time is expensive, the script +not just automates the checkout and compilation of specific revisions, it +also saves the resulting executable in a cache so that it can be reused +easily without a new checkout/compilation. + + +1. requirements + +Install the usual tools required for building pcb-rnd, plus gawk, xz, +subversion. + + +2. setup + +cd trunk/util/bisecter +cp bisecter.conf.in bisecter.conf + +edit bisecter.conf as needed (you might want to change the cache path) + +3. recommended process + +Open two shells, cd to trunk/util/bisecter on both. + +In the first shell, run './bisecter bisect' - this will run and +interactive script that makes suggestions on which revisions should +be tested. + +In the second shell, type './bisecter run rev args' where rev is the +revision the script in the first shell suggested, args are arguments +you'd pass to pcb-rnd. It will check out, compile and run pcb-rnd in +trunk/util/bisecter. Reproduce the bug and decide if the given revision +is broken or not. + +If it is not broken, type "good" in the first shell and press enter; +if it is broken, type "bad" in the first shell and press enter. The +script in the first shell will make a new suggestion. + +Repeat the process until the script in the first shell prints the results +and exits. + + +4. Tips and tricks + +You do not have to accept the suggested revision, you can pick the revision +you test. In that case instead of a plain "good" or "bad", type "rev good" +or "rev bad", e.g. "8663 good" or "8110 bad". + +List the executables available in your cache dir. Especially early in the +bisecting process, rather find an existing cached rev to test instead of +a new one - this will speed up the process. You can use "./bisecter near rev" +to find cached revisions near rev. + +Not all revisions can be compiled - there are a few that are broken. When +you find a broken one, try the previous or next revision until you find +one that works. + Index: 1.2.8/doc/developer/blog_queue.txt =================================================================== --- 1.2.8/doc/developer/blog_queue.txt (nonexistent) +++ 1.2.8/doc/developer/blog_queue.txt (revision 15490) @@ -0,0 +1,16 @@ +Ready to blog: + +less urgent, almost finished: +- braille font +- unicode bdf bitmap dot matrix glyph insertion +- eeschema import (needs testing?) +- subcircuit support for outline aka edge cut layers, i.e. mousebites, outlines +- up vs down swipe selection blog writeup + +pre-planned/TO-DO: +- CJK glyph insertion dialogue +- FidoCadJ font creation plugin +- pcb-rnd -> MUCS export module based on existing C++ helper app +- metafont glyph -> stroked font converter + + Index: 1.2.8/doc/developer/bridges/index.html =================================================================== --- 1.2.8/doc/developer/bridges/index.html (nonexistent) +++ 1.2.8/doc/developer/bridges/index.html (revision 15490) @@ -0,0 +1,11 @@ + + + + pcb-rnd developer manual + + + +This document has been moved to the +user doc. + + Index: 1.2.8/doc/developer/bugreport.html =================================================================== --- 1.2.8/doc/developer/bugreport.html (nonexistent) +++ 1.2.8/doc/developer/bugreport.html (revision 15490) @@ -0,0 +1,149 @@ + + + + pcb-rnd - reporting bugs + + + + + + + + + + +
Main + News + Doc + People + Events & timeline + pcb-rnd [pcb-rnd logo] +
+ + +

pcb-rnd - reporting bugs

+Pcb-rnd, like any other biggish piece of software, is not a free of bugs. +When you find a bug, please report it and we will try to fix it as soon as +possible.For reporting bugs you can use any medium you can reach us on: +mostly IRC and email, whichever is easier for you. +

+Using the below table you can optionally increase the efficiency of your +bugreport by sending enough data in the initial report that we won't need +to ask for clarification. + + +
what went wrong optional extra info to help debugging + +
+ 0. For any report, please include + + what version of pcb-rnd are you using: release tarball version + number or the output of "svn info" in trunk/. + +
+ 1. Configuration problems: +
    +
  • ./configure failed +
  • ./configure didn't find a optional package XY +
  • ./configure didn't do what I wanted it to do +
      +
+ include your scconfig/config.log + +
+ 2. Build problems: + make fails + +
    +
  • include your scconfig/config.log +
  • run make clean; make >make.log 2>&1 ; send the resulting make.log +
+ +
+ 3. Installation problems: + make install fails + +
    +
  • include your scconfig/config.log +
  • run make install >makei.log 2>&1 ; send the resulting makei.log +
  • if the error is not an obvious failure of an operation with a clear error + message, please explain, in details, what you expected to happen + (what files should have copied/linked where) and what happened instead. +
+ +
+ 4. pcb-rnd doesn't find a file + + Please make sure you have installed pcb-rnd before running it, or if + you are running it from source, make sure to cd to trunk/src and + running it as ./pcb-rnd. Only these two ways are supported. If it still + fails running by one of those two, please jump to point 5. + +
+ 5. pcb-rnd run time error, non-gui-related + +
    +
  • run pcb-rnd from the command line; append >run.log 2>&1 to the command line, reproduce the error and include run.log +
  • if the error is not an obvious failure of an operation with a clear error + message, please explain, in details, what you expected to happen + and what happened instead. +
+ +
+ 6. pcb-rnd run time error, gui-related + +
    +
  • if you are using the gtk-gl hid, please also try the gdk hid with + the command line argument --gui gtk2_gdk . Please include + a sentence about whether the bug affects both HIDs or is gl-only. +
  • even for the most obvious-looking problem, please explain, in + details, what you expected to happen and what happened instead. +
+ +
+ 7. pcb-rnd crashes (segfault, assertion, abortion) + +
    +
  • Re-run ./configure with --debug and recompile (and reinstall). +
  • Run pcb-rnd from gdb: +
    • +
    • if you are running the installed version: gdb pcb-rnd +
    • if you are running from source: cd trunk/src; gdb ./pcb-rnd +
    +
  • Type this in the gdb prompt: run (optionally append a space + and the command line arguments you would have used for starting pcb-rnd) +
  • reproduce the problem +
  • type bt, copy&paste the result and include it in the bugreport +
  • if the problem is reproducible, please include a description how to + trigger it, preferrably on an empty board on a fresh start, alternatively + with an example file included +
+ + Altnerative method with core dumps: +
    +
  • ./configure --debug +
  • ulimit -c unlimited +
  • on Linux, check your core pattern (man 5 core , search for pattern; changing the core pattern requires root) +
  • in src/ run ./pcb-rnd, trigger the bug +
  • in src gdb ./pcb-rnd core (core is the default core file name, you may have a different name depending on the core pattern, see above) +
+ If you are on MacOSX, you may need to use lldb instead of gdb: lldb --core /cores/core.52381 + and the backtrace command is bt all instead od just bt. +
+ +
+ 8. pcb-rnd can't load my file + + Please include the file in your bugreport + +
+ 9. pcb-rnd loads my file but it doesn't look good + + Please include the file in your bugreport; please include a screenshot + of the file (even open in another software) to demonstrate how it + should look and a screenshot how it looked in pcb-rnd; please mark + the difference visually. +
+ + + Index: 1.2.8/doc/developer/c89.html =================================================================== --- 1.2.8/doc/developer/c89.html (nonexistent) +++ 1.2.8/doc/developer/c89.html (revision 15490) @@ -0,0 +1,12 @@ + + +

pcb-rnd - C89

+ +Most of the code base is written in C89, with a few exceptions +written in C99 (gtk, because it's not C89-compatible). When adding +new code, keep it C89. Especially watch out for these: +
    +
  • comment: always use /* */, never // +
  • don't mix variable declaration with code - open a new {} block, which will also scope your new variables, or better yet, split up the function into smaller, static functions, the compiler will inline them anyway +
  • try to avoid vararg macros, use vararg functions instead +
Index: 1.2.8/doc/developer/data.html =================================================================== --- 1.2.8/doc/developer/data.html (nonexistent) +++ 1.2.8/doc/developer/data.html (revision 15490) @@ -0,0 +1,214 @@ + + + +

pcb-rnd internals

+ +

concepts

+ +

+Convention: typedef'd types are called pcb_*_t - the corresponding struct +is pcb_*_s. + +

board

+

+There is only one board being edited. A board is the model of the whole world +for pcb-rnd - any other, auxiliary data is only a partial description of a board. +The data struct for board is pcb_board_t. As of now, pcb-rnd edits only one +board at a time, and it is stored in a global variable called PCB. +The code is single threaded and is not reentrant. +

+Half of the board structure describes global board properties: +

    +
  • layer stack +
  • netlist +
  • editor settings (e.g. routing styles, which layers are visible) +
  • metadata (such as name of the author, size of the board). +
+The other half is the actual board data, stored in a pcb_data_t field. +

+Relevant structs, variables and functions are in board.[ch]. + +

data

+

+A pcb_data_t contains everything to describe the 2d geometry of +an existing board: +

    +
  • per-layer objects (lines, arcs, polygons, text objects) +
  • global objects (subcircuits, padstacks) +
  • temporary logical connections (rat lines) +
  • padstack prototypes (padstack shapes referenced by padstack references/instances) +
+

+Relevant structs, variables and functions are in data.[ch]. +

+However, it does not contain the layer stackup, but references to it. +This means a data_t can be copied or moved from within one board to +another, even with mismatching layer stack. When a pcb_data_t is within a +pcb_board_t, the layer references are fixed, pointing to actual layers +within the board's layer stack (e.g. "layer 3 in the stack"). Such a layer is +also called a real layer. When a +pcb_data_t is used outside of a board (e.g. as a buffer), a generalized, +recipe-like layer description is used (e.g. "second copper layer counted +from the top"). Such a layer is not a real layer, but can be bound +to a real layer. The binding means that while it keeps it's recipe-like +description, it is also referring to an actual layer of the stack of the +current PCB structure. (This happens to subcircuits: they are specified +with generalized, recipe-like layers that are bound to the board's layer stack +once the subcircuit is placed on the board.) + +

buffers

+

+Paste buffers are pcb_buffer_t; the main field is pcb_data_t. +

+Relevant structs, variables and functions are in buffer.[ch]. +

+A paste buffer doesn't have a layer stack. When data is copied from a board +to a buffer, the layer references are generalized. + +

terminology: layers and layer groups

+

+Layers are abstract canvases also serving as a logical grouping +of drawing primitives. Every layer is part of exactly one layer +group. A layer group is close to what a physical layer is on +the FR4. +

+Limitations: +

    +
  • as of now pcb-rnd does not have Z-coordinate: layers have no thickness; +
  • substrate is not represented at all in the layers stack. +
+

+The location of a layer group on of (flags are in layer.h): +

    +
  • top (component) side - PCB_LYT_TOP +
  • bottom (solder) side - PCB_LYT_BOTTOM +
  • inner or internal (e.g. signal) - PCB_LYT_INTERN +
  • global (affects all locations, e.g. the outline layer for routing) - 0 +
+

+In pcb-rnd most layer types are fully explicit: +

    +
  • copper - PCB_LYT_COPPER (not composite) +
  • silk screen - PCB_LYT_SILK +
  • mask - PCB_LYT_MASK +
  • paste - PCB_LYT_PASTE +
  • outline - PCB_LYT_OUTLINE (not composite) +
+

+The layers of a composite layer group are combined + and -, depending +on the PCB_LYC_SUB in their comb field. +

+Assumptions: there are two silk layers, one for the top and one for the bottom +side and there are always a top and a bottom copper layer. (Long term +assumptions will be removed.) The outline layer has to be global. +

+The rest of the layers are virtual layers, often just GUI hacks, e.g.: +

    +
  • Subcircuit dashed outline, subcricuit parts - no layer struct, calculated on-the-fly from the subc list +
  • fab - no layer struct, calculated on-the-fly from drill/hole data +
+ +

pcb_data_t: global data

+

+Global data affect all layers. The most trivial example is +padstack: it has a hole and potentially a copper ring on all +layers. A padstack +directly under the board's pcb_data_t is considered a "via" (by convention, +by purpose), a padstack under subcircuit's pcb_data_t is usually a "pin" +or "pad" (when has a term ID) or a "via". The quoted terms don't exist +in the code, they are just conventions. Padtsacks are vertical constructions, +they may affect multiple layers. +

+The other global object is subcircuit; using its own layer list, it potentially +can affect all layers of the board. The children objects of a subcircuit is +a pcb_data_t, which allows arbitrary (loop-free) recursion in data. + +

pcb_data_t: layer-local data

+

+The data struct has a pcb_layer_t for each logical layer, to host +the per layer objects (drawing primitives). + +

the layer struct

+

+Layer data is stored in struct pcb_layer_t. A layer has a list +for each object type (drawing primitive type): arcs, lines, polygons, etc. +These lists are local: in a tree of subcircuits, the layer list contains only +what's strictly directly on the given layer, there's no recursion. +

+Relevant structs, variables and functions are in layer.[ch]. + +

map

+ + + +

tree

+

+A tree can be built using subcircuits. The top level is always a board or +a buffer, which are essentially just different wrappers around pcb_data_t. +Then pcb_data_t can host subcircuits in it global data. A subcircuit +is also just a 3rd kind of wrapper around a pcb_data_t, which means it +opens a new level of the tree. +

+When we will start supporting subc-in-sunc this means the root is: +

    +
  • a PCB board: pcb_board_t +
  • a paste buffer: pcb_buffer_t +
+

+(When the user opens a subcircuit for editing, the root is still a pcb_board_t, +it just has a field that tells it is a fake board for a single subc. Still +the real subc to edit is in the fake board's pcb_data_t. This is needed so +we have all the global states stored in pcb_baord_t.) +

+Then the next levels are arbitrary encapsulation of subcircuits. + + +

list vs. rtree

+

+Each level of pcb_data_t has its own lists storing the local objects. +

+The root of the tree also ha an rtrees for each object type. An rtree is +a spatial data structure that provides efficient coordinate lookups. All objects, +recursively, are added in these rtrees. That means, if there's a line on the +board, that's really a line stored on a pcb_layer_t's list, and the +full tree path is somehting like this: +

+	pcb_board_t -> pcb_data_t -> pcb_layer_t -> linelist_t
+
+

+The same line is also added in the same layer's rtree (called line_tree for lines): +

+	pcb_board_t -> pcb_data_t -> pcb_layer_t -> pcb_rtree_t
+
+

+On subsequent levels, the list is the same. If a line is part of +a subcircuit, it's sitting on one of the linelists on one of the bound +layers provided by the subc: +

+	pcb_board_t -> pcb_data_t -> pcb_subclist_t -> pcb_data_t -> pcb_layer_t -> pcb_linelist_t
+
+

+The subcircuit's pcb_layer_t would also have an rtree. But instead of having +it's own rtree, it's rather linked to the root's rtree. Which means any access +to any rtree under a subc is really access to the corresponding rtree of the root! +In other words, object lists are level-local, but rtrees are tree-global. +

+This also means as a programmer, you can alsways do two kind of searches or +iterations: +

    +
  • level-local (only linear iteration is possible) +
  • global (both linear iteration and efficient, bounding box based, geometrical rtree lookups are possible) +
+

+Rationale: this way if we need to look up what's on a specific coord +(e.g. the user clicks or find.c needs to check what is connected to a given +point), we can use the global rtree's and we will get the answers without having +to recurse into subcircuits. +

+Note: layer bindings complicate this a bit. A subc layer is bound to one of +the root's real layers. When that binding is created, the rtrees are also +linked together, and all subc layer objects on the given layer are added +in the common rtree. When the layer binding needs to change, that means +we first need to unbind the subcircuit's bound layer from the root's real +layer: when we do that, we need to unlink the rtrees and remove all +the objects we added to the global tree from our subcircuit layer. Index: 1.2.8/doc/developer/data1.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: 1.2.8/doc/developer/data1.png =================================================================== --- 1.2.8/doc/developer/data1.png (nonexistent) +++ 1.2.8/doc/developer/data1.png (revision 15490) Property changes on: 1.2.8/doc/developer/data1.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: 1.2.8/doc/developer/ddrc/examples1.txt =================================================================== --- 1.2.8/doc/developer/ddrc/examples1.txt (nonexistent) +++ 1.2.8/doc/developer/ddrc/examples1.txt (revision 15490) @@ -0,0 +1,54 @@ +# Example 1: Sensitive RF elements should be close +# +# e1 is the list of elements that have the user tag RF +# e2 is a copy of e1; it's needed to get two loops (e1 vs. e2 objects form pairs) +# Assert that any two components are closer than 25 mm to each other + +rule sensitive RF elements + let e1 (type(@, element)) && (@.a.group == "RF") + let e2 e1 + assert (distance(e1, e2) < 25 mm) + +# Example 2: matched trace lengths on dram data 0 +# +# e1 is the list of dram traces +# e2 is a copy of e1 (see Example 1) +# Assert that any two net lengths are matched within 2 mm + +rule matched length dram traces + let e1 (type(@, net)) && (@.a.group == "dram_data_0") + let e2 e1 + assert abs(netlen(e1) - netlen(e2)) < 2 mm + +# Example 3: check if isolation gap is maintained between any HV and LV nets +# (Lazy: assume any copper is part of a network, compare net-to-net only) +# +# hv is the list of high voltage nets +# lv is a list of non-hv networks +# + +rule isolation gap 1 + let hv (type(@, net)) && (@.a.high_voltage) + let lv (type(@, net)) && !(@.a.high_voltage) + assert !is_closer(lv, hv, 4 mm) + +# Example 4: check if isolation gap is maintained between any HV and LV nets +# (Proper way: do not forget about copper not part of any network!) +# +# hv is the list of high voltage nets +# hvo is a list of all objects found in hv +# cp is a list of all copper object +# There are two iterators in the assert: cp (all copper objects) and hv. +# For each hv and cp pair: +# - lcomplement returns a cp object if the cp object is not in hv (i.e. +# the object is low voltage); else the return value is empty and is_closer +# returns invalid which is not a violation +# - hvo is required because cp is an object while hv is a list of nets +# (so cp is never on the hv list) +# - if there was a valid (low voltage) cp object found, + +rule isolation gap 2 + let hv (type(@, net)) && (@.a.high_voltage) + let hvo lobjs(hv) + let cp (type(@, copper)) + assert !is_closer(lcomplement(cp, hvo), hv, 4 mm) Index: 1.2.8/doc/developer/ddrc/proposal1.txt =================================================================== --- 1.2.8/doc/developer/ddrc/proposal1.txt (nonexistent) +++ 1.2.8/doc/developer/ddrc/proposal1.txt (revision 15490) @@ -0,0 +1,242 @@ +Dynamic DRC proposal 1: a Declarative DRC language. + +P0 A DRC program is an unordered list of rules. Rules are evaluated and + violations reported. The advantage of a declarative language is that + intermediate results can be cached and reused. + +P1 The language is intended to be human readable and human writable, but + the main goal is to let programs and scripts (e.g. netlisters) to + generate it. + +P2 A rule consists of three parts: + - the rule keyword; syntax: rule NAME + - build variables (lists) using search statements + - state assertions about those lists. + - comments, empty lines + +P3 Variables are named by the user and are local to the rule (TODO) + +P4 Lists are ordered. + +P5 A list is consists of zero or more objects. An object is: +P6 - the board +P7 - a layer +P8 - a board drawing primitive (line, arc, polygon, via, text) +P9 - an element primitive (element line, element arc(?), pin, pad, element name) +P10 - an element as a whole +P11 - a net +P61 - a 2D coordinate with or without layer information + +P12 Objects have named properties (or fields): +P13 - core attributes: for each object type a predefined set of key=value + pairs that always exist (e.g. thickness of a line, start angle of + an arc); these field names starts with "p." +P14 - user attributes: free-form key=value pairs optionally assigned by + the user; these field names start with "a." + +P15 Note: the language is case sensitive with keywords and builtins using + lowercase only. For better readability, in syntax description in this + document uppercase words are user chosen identifiers or fields. Whitespace + character sequences are usually treated as a single whitespace. (This + does not mean identifiers have to be uppercase in a program.) + + The syntax of a search statement is: + +P16 let LISTNAME EXPR + +P17 It creates a list called LISTNAME and evaluates expression EXPR to all + available objects and adds the objects that match EXPR to the list. Each + matching object is added only once. The particular order of objects on + the list is random. Object "matches EXPR" when the EXPR evaluated on + the object yields true. + +P18 The current object used in the iteration during the search is called + @. + +P19 An expression returns a value. A value can be: +P20 - an object +P21 - a list +P22 - scalar: a number or string (might be suffixed, like "42 mm") +P23 - void (empty, also known as false) + +P23 A value is considered true if: +P24 - it is an existing object +P25 - it is a non-empty list +P26 - it is a non-zero number or non-empty string +P69 - it is a valid coordinate + + An expression is one of: + + syntax meaning + ---------------------------------------------------------------- +P27 (EXPR) change precedence +P28 EXPR || EXPR logical OR (result: number) +P29 EXPR && EXPR logical AND (result: number) +P30 EXPR + EXPR add (number only) +P31 EXPR - EXPR subtract (number only) +P32 EXPR * EXPR multiply or ... (number only) +P32 EXPR / EXPR multiply or ... (number only) +P32 EXPR == EXPR the two values are equal +P33 EXPR != EXPR the two values are not equal +P71 EXPR ~ string regex match left EXPR using pattern right string +P34 EXPR > EXPR left EXPR is greater than right EXPR (number only) +P35 EXPR >= EXPR left EXPR is greater than or equal to right EXPR (number only) +P36 EXPR < EXPR left EXPR is less than right EXPR (number only) +P37 EXPR <= EXPR left EXPR is less than or equal to right EXPR (number only) +P38 !EXPR logical NOT (result: number, 0 or 1) +P39 FUNC(EXPR, EXPR, ...) call a function with 0 or more arguments +P40 EXPR.field evaluated to the value of an object field (see P45, P46) + + The syntax of an assertion is: + +P41 assert EXPR + +P42 If the EXPR in an assert evaluates to false, a DRC violation is generated. + +P43 If an assert EXPR is a list anywhere else than in a function argument, it is + evaluated for all valid members of the list (see P45, P46). For example + if there is a variable called FOO, which is a list of objects + (built using a search statement), expression + + FOO.p.thickness + + is evaluated as many times as many objects are on the list, and the + full assert is checked each case. If there is another similar list + called BAR, an expression: + + (FOO.p.thickness < BAR.p.thickness) + + will compare each possible pair of FOO and BAR objects. That is, if + FOO has 4 objects and BAR has 15 objects, that is 4*15 = 60 comparisons. + +P44 However, each list is iterated only once, even if it is referenced multiple + times in the same expression. For example, with the above lists: + + (FOO.p.clearance > 10 mil) && (FOO.p.thickness < BAR.p.thickness) + + the potential number of iterations is still 4*15, and not 4*4*15. In + practice the engine leverages lazy evaluation so if FOO.p.clearance + is smaller than 10 mil, the right size is not evaluated. See also: P45, P46. + +P45 A field reference is valid if the field exists. For example a line object + has a thickness attribute, thus the .p.thickness is valid, but a polygon + object does not have a thickness and .p.thickness on a polygon is invalid. + An user attribute reference (e.g. field .a.baz) is valid if the attribute + key exists in the given object. + +P46 Invalid fields are skipped in iterations. Thus if variable BLOBB is a list + that consists of 3 line, 2 arc and a layer objects, the following assert + will result in 2 comparisons only: + + (BLOBB.p.width >= 10 mm) + + (because only arc objects have valid .p.width field). + +P47. An invalid field in an expression is never considered an + error. In an assert statement it causes skipping an iteration. In a + search statement it evaluates to void. + +P48. A void value is never equal to anything. A void value is not equal + even to another void value. + +P49. Comments are lines starting with # + + + BUILTIN FUNCTIONS + +P70 list(LISTNAME) + Within an expression, a reference to a list may become an iterator and + refer to a single object. In case the expression needs the list, the + list() function protects LISTNAME from becoming an iterator. For + example llen(list(@)) is the number of all objects the design consists. + +P50 llen(EXPR) + Returns to the number of items of a list (an integer number >= 0). + +P51 lvalid(EXPR, field) + Returns a list of items on the list for which field is valid. + EXPR can be a list or an object. + +P52 lunion(EXPR1, EXPR2) + A new list is created; items of EXPR1 are copied to the new list in order. + Those items from EXPR2 that are not on the list already are appended, + keeping their order. The new list is returned. + + Both EXPR1 and EXPR2 can be either a list or an object. + + Note: order of arguments does matter (affects order of objects on the + resulting list). + +P53 lintersect(EXPR1, EXPR2) + A new list is created; items that are present on both EXPR1 and EXPR2 + are copied onto the new list. The new list is returned. + + Both EXPR1 and EXPR2 can be either a list or an object. + + Note 1: this function can be used as "is this object on the list" query: + list_intersection(LIST, OBJ) will result an empty list (which means false) + if OBJ is not on the list. + + Note 2: similarly, if both argument are objects, the result is false + if the two arguments are not the same object. + +P54 lcomplement(EXPR1, EXPR2) + Creates a new list with all items that are present in EXPR1 but not in + EXPR2. The new list is returned. + + Both EXPR1 and EXPR2 can be either a list or an object. + + +P55 ldiff(EXPR1, EXPR2) + Creates a new list with all items that are present either in EXPR1 or in + EXPR2 but not in both. The new list is returned. + + +P56 distance(EXPR1, EXPR2) + Calculates the shortest distance between two objects. Returns a number. + + Note: if any expression is a layer, the stack distance is calculated + (which will be 0 for now, as pcb-rnd doesn't yet know about layer thickness). + If the expression is a net, the whole shape of the net is used + (expensive! use is_closer() instead) + If the expression is the board, the operation is invalid (see P46). + +P57 is_closer(EXPR1, EXPR2, NUMBER) + Checks if EXPR1 and EXPR2 are closer to each-other than NUMBER. It uses + the classic bloat-and-find algorithm originally used by the classic DRC, + thus it is much cheaper than distance(EXPR1, EXPR2) < NUMBER. + +P58 netlen(EXPR) + Network length of EXRP1: sum of all non-overlapping trace/arc lengths that + make up a network; polygons are approximated with their average diameter + (TODO). If EXPR is an object, its length is returned. + +P59 netobjs(EXPR) + Creates and returns a list of objects consists of a net. + +P60 type(EXPR, TYPENAME) + EXPR is an object. Returns the object if it's type matches TYPENAME, else + returns void (a.k.a. false). This call is useful to decide whether an + object is of a specific type. TYPENAME is one of: + - drawing primitive type: arc, line, polygon, text, via, element + - element primitive type: element_line, element_name, pin, pad + - misc type: layer, net + - meta-type, or a group: + - copper: primitive that results in copper (arc, line, polygon, text (on copper), via, pin, pad) + - drilled: anything that drills the board (via, pin) + +P62 gridup(EXPR, NUM1, NUM2) + If expression is an object, return a list of coordinates that are on + the object, evenly spaced: +P63 - for lines and arcs, the points are evenly spaced on the centerlane with + a gap of NUM1, starting from both endpoints, having the corner case in + the middle; if NUM2 is 0, the gap at the middle may be larger than NUM1, + else it may be smaller than NUM1. +P64 - for polygons take a grid of NUM1*NUM2 spacing (NUM1 is always axis + aligned to X, NUM2 to Y). The offset of the grid is unspecified +P65 - element and text are ignored +P66 - a pad or pin is approximated with a polygon +P67 - for networks, iterate over all objects and append unique coordinates on + the resulting list +P68 There's no guarantee on the particular order of the list. + Index: 1.2.8/doc/developer/ddrc/requirements.txt =================================================================== --- 1.2.8/doc/developer/ddrc/requirements.txt (nonexistent) +++ 1.2.8/doc/developer/ddrc/requirements.txt (revision 15490) @@ -0,0 +1,23 @@ +The Dynamic DRC should be able to solve at least these tasks: + - check start grounding + - require element placement on same layer + - specify element proximity to each other on same layer + - specify element proximity to the edge + - specify element proximity to network or other copper feature + on the same layer + - perform copper vs. copper checks + - minimal gap between an object or network and anything else + - minimal gap between high voltage and low voltage networks + - perform copper geometry checks + - detect minimal width (high current) + - detect poly hairpin + - number and length of stubs (hight freq) + - "via cage": a given network needs to be surrounded by a set of gnd vias + - network related copper checks + - matched length lines (e.g. fast dram bus) + - balanced transmission line (distance between the tracks) + - match and/or limit number of vias + - limit layer usage + - require layer stackup properties, e.g. microstrip, stripline + - e.g. require ground poly on the next layer + - e.g. number of gaps in the ground poly the line jumps Index: 1.2.8/doc/developer/distros.txt =================================================================== --- 1.2.8/doc/developer/distros.txt (nonexistent) +++ 1.2.8/doc/developer/distros.txt (revision 15490) @@ -0,0 +1,47 @@ +How to request packaging (distros sorted by popularity, 2016): + +Ubuntu: + easiest is to get in Debian, Ubuntu picks up packages from sid + alternative: ubuntu-devel-discuss@lists.ubuntu.com (pending) + alternative: https://bugs.launchpad.net/ubuntu/+filebug?no-redirect&field.tag=needs-packaging + +linux mint + https://blueprints.launchpad.net/linuxmint + (same maintainer as debian?) + +slackware: + Promised (AFK, ask again in 3rd week of sept) + geda/pcb maintainer: pfeifer[dot]felix[at]googlemail[dot]com (sent mail) + https://slackbuilds.org/guidelines/ + needs an existing package + since the slackbuild needs slackware's pkgtools usually at the end of a ./configure --prefix=/usr --extrastuff..make.. make install DESTDIR=/tmp/NAMEOFPACKAGE..cd /tmp/NAMEOFPACKAGE..makepkg -l y -c n ../NAMEOFPACKAGE-123.txz + installwatch can build a package + check out #slackbuilds + +Debian: + Bdale? + (alternative: pkg-electronics-devel@lists.alioth.debian.org - pending) + (alternative: RFP through reportbug) + +fedora: + https://fedoraproject.org/wiki/Package_maintainers_wishlist?rd=PackageMaintainers/WishList + (wrote mail to cicku) + +OpenSuse: + adrian [at] suse.de (mail sent) + +Arch: + DONE! needs to be modularized + Kyle Keen (mail sent) + +Manjaro: + Same as arch + +---- +FreeBSD: + hrs [at] freebsd.org (Hiroki Sato - mail sent) + +OpenBSD: + andreas.bihlmaier [at] gmx.de -> ENOTIME, he suggests ports@openbsd.org + + Index: 1.2.8/doc/developer/hid_gtk3/gtk2-edit_route_styles_001.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = image/png Index: 1.2.8/doc/developer/hid_gtk3/gtk2-edit_route_styles_001.png =================================================================== --- 1.2.8/doc/developer/hid_gtk3/gtk2-edit_route_styles_001.png (nonexistent) +++ 1.2.8/doc/developer/hid_gtk3/gtk2-edit_route_styles_001.png (revision 15490) Property changes on: 1.2.8/doc/developer/hid_gtk3/gtk2-edit_route_styles_001.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +image/png \ No newline at end of property Index: 1.2.8/doc/developer/hid_gtk3/gtk2-pcb-rnd_001.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = image/png Index: 1.2.8/doc/developer/hid_gtk3/gtk2-pcb-rnd_001.png =================================================================== --- 1.2.8/doc/developer/hid_gtk3/gtk2-pcb-rnd_001.png (nonexistent) +++ 1.2.8/doc/developer/hid_gtk3/gtk2-pcb-rnd_001.png (revision 15490) Property changes on: 1.2.8/doc/developer/hid_gtk3/gtk2-pcb-rnd_001.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +image/png \ No newline at end of property Index: 1.2.8/doc/developer/hid_gtk3/gtk_hid_architecture.html =================================================================== --- 1.2.8/doc/developer/hid_gtk3/gtk_hid_architecture.html (nonexistent) +++ 1.2.8/doc/developer/hid_gtk3/gtk_hid_architecture.html (revision 15490) @@ -0,0 +1,336 @@ + + + +GTK HID architecture + + +