Index: tags/2.0.1/AUTHORS =================================================================== --- tags/2.0.1/AUTHORS (nonexistent) +++ tags/2.0.1/AUTHORS (revision 18980) @@ -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: tags/2.0.1/COPYING =================================================================== --- tags/2.0.1/COPYING (nonexistent) +++ tags/2.0.1/COPYING (revision 18980) @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 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 Lesser 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., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 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 Lesser General +Public License instead of this License. Index: tags/2.0.1/Changelog =================================================================== --- tags/2.0.1/Changelog (nonexistent) +++ tags/2.0.1/Changelog (revision 18980) @@ -0,0 +1,866 @@ +pcb-rnd 2.0.1 (r18980) +~~~~~~~~~~~~~~~~~~~~~~ + [bbox] + -Add: naked bbox for every object (does not include clearance or other invisible effects) + + [cam] + -Add: common interface to tell export plugins what layers to export in which file + + [cli] + -Add: multi-language/multi-syntax CLI + -Add: configurable prompt + -Add: hid_gtk* includes the cli prompt + -Add: hid_batch includes the cli prompt + -Add: hid_lesstif prints the central prompt + -Add: mode stack with mode enter/leave helpers + + [conf] + -Del: default_layer_name[] - should be coming from the default board, code shouldn't assume uninitialized layers have initialized layer names + -Del: default groups from config - depend on default board instead + -Del: route styles from the config - default board should bring it + -Del: via-specific select color + -Del: remove pin-specific selected color + -Del: remove subc-specific selected color + -Del: element selected color + -Del: remove rat-specific selected color + -Del: obsolete color setting: element-nonetlist + -Del: unused color conf node: black + -Del: remove the white color (not used) + -Del: remove unused color.invisible_mark + + [core] + -Optimize: implement dynamic Level-of-Details in text rendering - draw less lines for small text + -Optimize: dynamic level-of-detail for padstack marks + -Optimize: thin draw poly contour: level-of-detail control: skip points too dense + -Optimize: draw helper poly clipping: if a polygon is fully within the clip box, do not do the expensive clipping + -Optimize: level-of-detail control for subc dashed bbox + -Optimize: draw logics: use cheaper storage for do_group + -Optimize: cheaper return from width calculation if string is NULL + -Optimize: simpler, cheaper term label draw with low level text draw call + -Cleanup: memory leak in path subst + -Cleanup: memory leak on conflist overwrite + -Cleanup: memory leak: uninit ui layers + -Cleanup: memory leak on dynamic hid callbacks on native config nodes + -Cleanup: memory leak: conf files hash + -Cleanup: memory leak on board dummy layers + -Cleanup: memory leak on plugin dir init + -Cleanup: pcb_lrealpath contains an strdup, an extra strdup on caller's side makes a mem leak + -Cleanup: memory leak on pcb_snprintf + -Cleanup: memory leak on hid cfg init by brave.c + -Cleanup: memory leak in layer vis hid reg + -Cleanup: layer name memory leak + -Cleanup: memory leaks in pcb_snprintf() and pcb_vsnprintf() + -Cleanup: rtree memory leak + -Cleanup: find.c memory leak on padstack lists + -Fix: label text centering corner case on mirrored view and vertical text + -Fix: delayed heavy terminal draw for polygon, text, line, arc + -Fix: do not call pcb_notify_crosshair_change(pcb_true) twice in a row when the crosshair moves - this is an error condition that will lead to most HIDs doing an expensive full redraw + -Fix: when an object is selected or unselected, make sure it is redrawn + -Fix: restore the crosshair colour after drawing the drc outline around the line shape + -Fix: restore the crosshair colour after drawing the drc outline for an attached arc tool shape + -Fix: FreeRotateBuffer() refuses to rotate angles too large (to avoid double precision floating number instability) + -Fix: mark the board changed on layer group operations that changes the layer stackup + -Fix: When drawing the UI layer, call set_drawing_mode (flush) before calling end_layer, instead of after. + -Fix: find.c padstack intersection bug: circular shape vs. arc typos made intersections not detected + -Fix: don't call NetlistShow() if there's no net name available + -Fix: make sure the board's file format is not affected by a backup save + -Fix: copy+paste crosshair range uses the naked bbox of the buffer, allowing objects to be moved near the edge of the drawing area even if clearance is beyond the drawing area + -Fix: don't use O(n^2) algo for finding duplicate arcs when we have rtrees + -Fix: crosshair saves original object x;y only on move-start so it doesn't interfere with the original functionality + -Fix: also set tx;ty to the current crosshair coord before a move so a double click doesn't reuse an old target coord from the previous operation (or a 0;0 in the first op) + -Fix: PromptFor() should return a string + -Fix: redraw the screen after buffer operations (should fix delayed draw on lesstif/irix) + -Fix: arrow tool: remember click coords even before the mouse is moved; fixes random object jumpyness on click-move-in-place + -Fix: pstk's flag change op shouldn't quit if padstack is locked - let the higher-level caller decide whether locked objects should be ignored + -Fix: allow locked objects to be deselected, not "locking the selected flag" + -Fix: locked objects shouldn't be removed on move or cut-to-buffer operations + -Fix: when a new board is loaded, rebind all buffer layers to avoid dangling bound layer pointers (still pointing to the previous boards' layers) + -Fix: text, arc, poly low level move should update naked bbox as well + -Fix: text bbox calculation typo with arc's Y + -Del: remove the erase color - with the drawing mode API the rendering mechanism doesn't depend on this hack any more + -Del: holes_after mechanism from the rendering code: always assume it is set to 1 + -Del: remove SelectedElements from Flip() action's syntax description (old terminology) + -Del: action handler for ExecCommand - merged with System() + -Del: action_act.c and action_helper.c + -Del: all-in-one about box content string (last user was the lesstif hid's home-grown about box) + -Move: pcb_act_PCBChanged() to oldactions + -Move: pcb_act_RouteStylesChanged(), pcb_act_NetlistChanged() and pcb_act_LibraryChanged to oldactions (pcb-rnd has an event system) + -Move: pcb_act_MinMaskGap() to oldactions + -Move: pcb_act_ChangePaste() and pcb_act_ChangeHole() to oldactions + -Move: deprecated actions for changing octagon/square flag moved to oldactions + -Split: low level text string draw function from pcb_text_t draw function to make calls cheaper where the caller is not drawing an existing text object + -Add: helper funciton to calculate text string height + -Add: draw API and infrastructure for delayed heavy term rendering + -Add: save last seen raw mouse pointer coords in the crosshair struct + -Add: make terminal label printout size configurable + -Add: default menu: layer group context popup contains a del group item + -Add: cli: hook for the /tab action + -Add: actions: cli edit hook + -Add: use putenv() if setenv() is not available + -Add: expose the low level id search that doesn't throw a hace on not-found + -Add: zoom to selection and zoom to found in the menu + + [ddraft] + -Add: new action: trim(): cutting edge objects to remove excess segments of lines and arcs + -Add: new action: split(): cutting edge objects to split lines and arcs into multiple objects + -Add: new action: constraint() for line drawing (angle and length) + -Add: new action: perp and paral and tang to constraint lines + -Add: constraint GUI: dialog box to set or reset constraints + -Add: new action: ddraft() with a custom, 2d drawing mini-language + -Add: new CLI mode that uses the ddraft() syntax + + [dialog] + -Fix: flag edit dialog refuses to operate on locked objects (it would get out of sync very fast) + -Fix: padstack editor now allows setting clearance to 0 + -Add: new export dialog with tabs on the left + -Add: new about box + -Add: layer binding dialog: enforce current layer model limitations: when the user selects outline, make it global; when the users selects anything else but copper, reset stack offset + + [distalign] + -Fix: Distribute() accepts optional gridless as the last argument + + [doc] + -Add: document the new PCB_HID_COMP_POSITIVE_XOR drawing mode + -Add: template reference for padstack prototype + -Add: fungw action doc + -Add: explain how fungw functions are allowed to change their arguments + -Add: writeup on lib64/ + -Add: fungw actions: raw example of extended coordinate load + -Add: developer doc with code snippets for fungw based action implementation + -Add: fungw action: calling other actions + -Add: introducing the CAM feature + -Add: a section for scripting (fungw) + -Add: document ddraft + -Add: EasyEDA on bridges + -Add: explain what the lock flag does + -Update: new version of GPL2 (from Debian's /usr/share) with the right FSF address and some white space fixups + -Update: datasheet: update list of supported scripting languages, replace gpmi with fungw + -Update: datasheet: file formats + + [draw] + -Optimize: batch subc and padstack mark draws into one large xor draw session; batch subc and padtsack label draw in a separate non-xor draw session for now + -Optimize: do not use delay draw for padstack labels - they are drawn in a separate pass anyway + + [draw_csect] + -Add: button for creating outline layer when it's not available + + [export_ps] + -Add: show-toc option (default on, works only in single-file mode) + -Add: --single-page option to merge multiple layer groups (useful with --cam) + + [fontmode] + -Fix: set layer color from defaults for the layers created for font editing to avoid a crash + + [fp_fs] + -Fix: memory leak on non-existing paths + + [fp_wget] + -Add: cache dir patch is configurable + + [gl] + -Optimize: do not draw sophisticated round end caps for objects thinner than 1 pixel + -Optimize: do not use triangles for lines too thin - use plain old lines + -Optimize: tesselate with less number of points for polygons, when contour points are too dense + -Change: inline low level gl drawing functions to cut back on function call overhead + -Add: Support for XOR drawing mode + + [gtk] + -Optimize: cheaper rendering of single-pixel objects + -Cleanup: memleak on config hid reg + -Fix: race-condition-free window position/size query + -Fix: when entering the drawing area, do a full redraw (invalidate-all) so the code does not depend on "xor-undraw" of the corsshair attached object + -Fix: all active top window widgets should let the central key handler handle all keyoard input + -Fix: don't change layer colors without the explicit request of the user + -Fix: property editor configures the preview layer name/color for all layers it uses + -Fix: for a context-popup, find subcircuits padstacks first and proceed to anythign non-subc-part only if none found; this allows right-clicking on subc padstacks + -Fix: get coords shall not change the input parameters if the user exits with an esc + -Fix: when handing keyboard presses (e.g. esc) in get coord, be more careful not to interfere with previous or next GUI interaction: accept only keys that are pressed _and_ released during the loop + -Fix: side correct zoom to window shall update .pcb_x and .pcb_y because get_coords think the coords are available + -Fix: advanced search expression build table: subcircuit footprint, refdes and value are all attributes, not properties + -Del: action LayerGroupsChanged (switched to events) + -Del: separate config subtree for selection colors; now that there is only one selection color, it shuld go in the main colors + -Del: get rid of the local About box implementation in favor of the central one + -Del: local ExportGUI implementation in favor of the central one + -Update: the layer selector widget uses layer's real color instead of guessing + -Add: action: ZoomTo(selected) and ZoomTo(found) + -Add: SwapSides() second arg S option for changing layer selection when swapping side + -Add: advanced search wizard table: common flags + -Add: when zooming to window, move the crosshair to the center of the window + -Add: attribute dialog: implement PCB_HATF_LEFT_TAB + -Add: implement the command entry hooks (tab, mouse clicks, editing) + -Change: property editor dialog's main tree is scrollable + -Change: mark the separate command window deprecated on the GUI + + [gtk2_gdk] + -Optimize: draw dot instead of complex object when object is too small + -Optimize: omit too dense polygon corners (level-of-details control) + -Optimize: detect axis aligned rectangles and draw them cheaper + -Fix: crosshair coord rounding error + -Add: render burst sets zoom level in core for optimization + + [gtk2_gl] + -Cleanup: more static functions to avoid name pollution + -Cleanup: use int from GL, not gint from GLib + + [hid] + -Optimize: use centrally cached cap style and line width set to remove some load from the HIDs + -Optimize: centrally cached xor/faded hid calls + -Cleanup: rename cap styles with pcb_ prefix and avoid CamelCase + -Cleanup: centralize action GetXY - it does nothing HID-specific by now + -Cleanup: centralize the printer calibration action - has nothing HID-specific + -Move: clip.[ch] out from core, to lib_hid_common, as an inline function: it's used exclusively by renderers for line clipping + -Del: Trace_Cap: same as Round_Cap, no reason for the case/code duplication + -Del: Beveled_Cap: this hack was apperantly used for octagonal pins - padstacks don't have secial casing for octagons + -Del: API CHANGE: x and y coords are no longer passed as action arguments - only a few actions need coords and there are two different kind of coords (crosshair and pointer) so actions shall query for coords when they need it + -Del: API CHANGE: needs-coord from action registration: semi-automatic, central coord query for actions got removed already + -Del: remove the "erase" color and rely on the drawing mode for negative draw + -Del: holes_after from the API: it's always enabled now + -Change: API CHANGE: get coords can be forced to query the user for a new set of coords - some actions may need two, distinct set of coordinates + -Add: central gc cache struct in all hid gcs + -Add: centralize hid creation and destroy so that the core-side cache can be maintained + -Add: new API to make GUI zoom level available for core + -Add: comment that recommends updating the core zoom level in burst start + -Add: introduce PCB_HID_COMP_POSITIVE_XOR to help non-sw-render HIDs optimizing their XOR draws + -Add: PCB_HATF_LEFT_TAB for moving TABBED's tabs to the left (for a vertical align that works better when there are a lot of tabs) + -Add: DAD helper macro to build a DAD entry dupping an existing attr + -Add: extend the mouse input event API with a flag for whether the command line is open at the time of the event; this will be used for mouse integration with cli modes + -Add: API to query or change command line entry + + [import_fpcb_nl] + -Add: import freepcb netlist (import schematics from EasyEDA) + + [io_lihata] + -Fix: saving font should not write invalid nodes + -Add: read layer color from v5 boards + + [layer] + -Fix: properly clreate new (missing) layer groups when upgrading the stack for padstack + -Fix: when creating new layer groups for a padstack upgrade, make sure new bottom paste and bottom silk and bottom mask end up below bottom copper + -Fix: don't overwrite silk's color permanently while rendering + -Fix: when composite drawing mask and paste, set the base color to the first layer's color + -Fix: when drawing bound layers, use the real layer's actual color (if real layer is available) instead of default color + -Fix: creating a new layer should set the change flag on the board + -Split: create intern misc layer code: separate the logic (where/why to create) from the mechanical part (low level data field fill in) + -Del: per layer selected color - use a global layer-object-selected-color instead + -Del: vtlayer - use vtp0 instead because UI layer pointers must be persistent because of object parent links + -Change: layer color is dynamically alloced (because it is loaded from the board file) + -Change: multi layer composite draw respects each layers own color and doesn't force using the same color + -Add: API for unified string-to-layer-id conversion + -Add: helper function to determine the default color of a new layer + -Add: force flag to enforce loading default layer colors (useful for loading old/alien formats without proper layer color support) + -Add: helper functions for change layer color + -Add: ui layer vector and ui layer lookup by id + -Add: when new layer is created, set its color to default + -Add: DelGroup() action, similar to EditGroup + + [lesstif] + -Optimize: direct rendering mode optimization + -Fix: issue a (delayed) redraw on entering the drawing area so that the crosshair attached object is drawn properly + -Fix: draw attached objects from the crosshair change notification callback + -Fix: at the end of a full redraw, draw crosshair-attached objects only once, without drawing mode setting + -Fix: draw crosshair attached objects on the leave notification to keep the xor drawn objects coherent + -Fix: attached object redraw on leave happens only if crosshair is on + -Fix: when leaving the drawing area, refresh the mark so it remains on the screen + -Del: action LoadVendorFrom() - done in the vendor plugin + -Del: get rid of the local About box implementation in favor of the central one + -Del: local ExportGUI implementation (in favor of the new, central export dialog) + -Del: command entry action comment shouldn't explain action syntax, especially that that's only one of the backends + -Change: mark the lesstif-specific LibraryShow action deprecated + -Change: gui command entry + mouse clicking: command entry should not close or lose keyboard focus + -Add: action ZoomTo(selected) + -Add: action ZoomTo(found) + -Add: SwapSides() second arg S option for changing layer selection when swap sides + -Add: when zooming to window, move the crosshair to the center of the window + -Add: set core zoom level in render burst + -Add: command entry: support for cli /edit hook + + [lib_compat_help] + -Fix: padstack->pad conversion: centralize the *2 on clearance value, that's how the old formats store it + -Fix: padstack->pad conversion: determine polygon shaped mask size properly + + [mincut] + -Optimize: do not run mincut if there surely won't be a solution (no cuttable objects in between S and T) + -Fix: free up the graph after use to cut back on mem leaks + -Fix: memory leak on network names + -Fix: solver free's cloned graph on error return to avoid memleak + + [propedit] + -Add: color field for real layers + -Add: map and set object flags + + [pstk] + -Optimize: unplated hole graphics: use a smaller circle within the hole, so XOR can be avoided + -Fix: set line cap and width for drawing holes + -Fix: remove excess xor draw setup + -Fix: set line end cap before thin drawing padstack shapes - on some layers there's nothing else drawn that'd set the cap + -Change: display teminal name centered for padstacks - same happens with heavy terminals + -Add: action for breaking up a padstack + -Add: when bbox is vertical, print vertical term label so the label is aligned with pad orientation + + [query] + -Fix: qyery() action sets the result field and returns success instead of returning the version number (which would mean error) + -Fix: don't execute the callback if current object is NULL + -Fix: don't let common bounding box based area accessor block the more precise, per object code + -Add: line length square (cheaper calculations) + -Add: line area accessor + -Add: arc length^2 + -Add: arc area + -Add: return true area of polygons + -Add: support for executing flag lookups + + [report] + -Fix: report(subc) should report only about subcircuits and nothing else + + [scconfig] + -Add: print help of scconfig default args + -Add: detect putenv() if setenv() is not available + + [script] + -Add: new action: ListScripts() + -Add: new action: LoadScript() + -Add: new action: UnLoadScript() + -Add: CLI mode for script oneliners + -Change: switch over all actions to the fungw API + + [subc] + -Fix: get rotation angle inversion bug (fixes e.g. sch reimport rotation messup problem) + -Add: use subc_nonetlist for drawing the dashed outline of subcircuits with the nonetlist flag set + -Add: configuration setting for showing only visible-side subc marks (default on) + + [tool] + -Fix: use the naked bbox for moving objs so they can reach the sides of the drawing area + -Del: pcb_adjust_attached_object(): was a wrapper around the tool's implementation, use that directly + -Del: the 'none' tool menu: there's no such tool, use the arrow tool instead + -Move: old tool related helpers pcb_release_mode() and pcb_notify_mode() to tool.[ch] to clean up action_helper + -Cleanup: pcb_act_ChkMode() should use the tool infra for converting string to tool id instead of a local list of tool names + -Split: separate target x,y fields in crosshair for move/copy; this allows detaching where the object will land from the current crosshair coord (allowing plugins to recalculate or restrict the target coords) + -Add: before a selected-move, store the starting coordinates so plugins, e.g. ddraft/constraint can calculate how far the move went + -Add: when the command line is open, override the normal notify/release action and try the cli backend first; perform the normal actions only if the backend did not handle it + + [thermal] + -Fix: thermal arc angle overflow corner case, on line end caps (reported by Ade) + +pcb-rnd 2.0.0 (r17177) +~~~~~~~~~~~~~~~~~~~~~~ + + -Del: old data model + -Cleanup: use macro.h only where it is really needed, do not include it from central headers (reduce unnecessary dependencies) + -Cleanup: remove doxygen + + [grid] + -Add: SetValue() can double or halve the current grid + -Add: extend board grid set API for explicit offset + -Add: grid() action + -Add: conf setting: grids_idx for remembering which grid is selected from the list + -Add: helper function to create the anchored menus + -Add: action to select specific grid by index + -Add: initialize update_on and checked for the dynamic grid menus + -Add: grid index invalidate (on custom grid setting) + -Add: update the dynamic menu on gui init event + -Add: update the grid dynamic menu when the config changes + + [menu] + -Fix: make cut-to-buffer undoable by not depending on the special move buffer function + -Add: new default multi-stroke menu file for both gtk and lesstif + -Add: context menu (per object type) + -Add: quickplace: via, line and arc + -Add: submenu for displaying different subcircuit IDs + -Add: extend the API so menu items can be inserted after an existing menu item (opposed to appending at the end of the menu) + -Add: new default menu file for the configurable grid + -Add: buffer normalization menu + -Change: edit attributes of current layer uses the property editor instead of the obsolete attribute editor + -Change: edit layer attributes from the popup menu uses the property editor instead of the obsolete attribute editor + -Change: use propedit for editing board attributes + -Rename: buffer #5 to scratchpad (the code often overwrites it as side effect of other operations) + + [autocrop] + -Change: rewrite the whole code to use core functions instead of local reimplementation of moves; simpler logic for rounding coords + -Add: do not do anything if no change is required + -Add: clip polys and draw screen only once, not for each move + + [autoroute] + -Fix: line end coord flicker that killed rubber band + + [conf] + -Fix: hide_names description: it really hides floaters + -Fix: iterator should increase the index counter + -Fix: prepend list items in the reverse order so the final order of items is the same as in the file + -Fix: array merging: do not overwrite non-NULL items with NULL items - this lets a config entry modify something in the middle of an array without removing the first many items + -Fix: check for node type in tree traversal to avoid assert in liblihata; throw an error for invalid subtrees and remove them + -Fix: buffer overrun on conf node names too long + -Fix: buffer overrun on conf path too long + -Change: mark [pin/pad] show_number obsolete + -Cleanup: rewrite the missing node ignore mechanism so it works for whole subtrees and can be applied to both old and optional subtrees + -Cleanup: remove drc and conf sections from the default boards; default config should be coming from internal and system config files so that the user can easily override them (config settings coming from the default board have the DESIGN role that is hard to override) + -Add: conf_set_dry() "mkdirp" flag for auto-creating policy subtrees; conf_set() auto-creates the subtree + -Add: more exact error messages on conf parse error (list and array item must be text) + -Add: infrastructure for loading custom (per plugin) config files from system and user dirs + -Add: remember the name of list items - on some lists, like export_xy's templates this matters + -Add: publish conf file reg/unreg API + + [core] + -Fix: change.c should include change.h to detect API mismatch + -Fix: auto-via is created as a padstack to avoid depending on vias + -Fix: when moving a line to another layer and an auto-via is added, use padstacks, not via + -Fix: do not merge new line to an existing line if the existing line is part of a subc or has term set + -Fix: do not announce which menu file has been loaded: action PrintFiles will tell + -Fix: when rotating buffer, do not expect text or padstack rtree to be non-NULL - if they are NULL, just skip the administration + -Fix: the actions that change layer visibility/selection should invalidate the drawing and send out layer change event to get everything redrawn + -Fix: The 'Text Tool scale' key mappings were reversed with regards to + & - + -Fix: do not crash in layer select action when invalid layer number is chosen + -Fix: do not call route styles changed event when only the active route style is selected - the conf events will be picked up + -Fix: make sure to emit the routes changed event when the routes are initialized (on load or new board creation) + -Fix: when loading a footprint-as-board, set the board size to make sure the footprint fits + -Fix: search: prefer padstacks that have copper shape on the right side, then padstacks that have any shape on the right side then ones with shape on the current layer and only then any other padstack over the given location + -Fix: data_is_empty: because of buffers: if global lists are empty, it's enough to check layers for pure emptiness, no global side effects should be checked + -Fix: don't segfault if element attr is attempted to set on a non-existing subc + -Fix: clip polys only when clip inhibit decreases to 0 + -Fix: pcb_chg_obj_name_query() doesn't handle dyntext floater subc parts as terminals + -Fix: operation on selected objects can recurse to subcircuits if SUBC_PART is part of target type + -Fix: don't execute operation twice on subc parts (by r16304) + -Fix: allow rotate function to operate on subc floaters + -Fix: do not let the user to select-move or select-remove subc parts (not even floaters, because parent could not be tracked over the buffer) + -Fix: consider a padstack for screen search only if it has a shape on a visible layer + -Fix: allow padstacks to change (global) clearance + -Fix: text object: don't crash if a non-subc dyntext tries to reference parent subc + -Fix: MoveToCurrentLayer on a subc part (floater) object keeps the object within the subcircuit, either by using an existing subc layer or allocating a new bound layer + -Fix: make sure redo never adds new undo entries (would render the rest of the redo stack unusable) + -Fix: search-by-location shouldn't find floaters when they are locked + -Fix: do not find hidden floaters on click + -Fix: hide floaters works on non-silk objects as well + -Fix: call get_export_options() when invoking the exporter using -x, to make sure the options are initialized before the cli processor goes through them; the nogui version shouldn't throw an error, the fallback is a nop + -Fix: SaveTo() with no args shouldn't segfault + -Fix: SaveTo(Layout) shouldn't tolerate file name or format; when specified, it would be ignored; to avoid confusion, rather throw an error + -Fix: emergency format typo - use the configured format + -Fix: on footprint import always use the footprint attribute instead of the name attribute + -Fix: search on padstacks: accept the padstack found if it has hole on the current layer + -Fix: temporary turn off flip/solder-side-view while replacing subcircuits from ElementList(), to avoid coord flip confusion and wrong y coord of the replacement subc + -Fix: freeze undo while rotating buffer to make sure nothing ends up on the undo (buffer operations are not undoable) + -Fix: when moving an unselected subc with drag&drop it should never snap to any object in the original subc + -Fix: when mirroring data, provide an option for mirroring text coords only without mirroring the text graphics ("onsolder" flag); this needs to be used for subc and buffer mirroring to keep text objects in place + -Fix: flag_str: when converting to string in compatibility mode, permit hidename for subcircuits + -Fix: 2 layer default board typos + -Fix: find.c: rat vs. padstack intersection must consider whether padstack has shape on the given layer + -Del: obj_all_op.h, obj_all_list.h, trunk/src/obj_all.h - include the op headers directly + -Del: old data model: PCB_OBJ_* constants for the old model + -Del: obsolete API: get_unit_list() + -Del: increments config type (the new grid code handles these) + -Del: remove mask from the ToggleView() help - mask is not a special layer anymore + -Del: redundant drc settings from pcb_board_t - they are only in config now + -Del: redundant board meta: poly_isle_area + -Del: remove conf vs. board header redundancy: max_width and max_height are board parameters, not config + -Del: default thermal style from pcb_board_t - used only by the autorouter, this should be a local setting there + -Del: the line object should have no Number field - use the term attribute to indicate terminal ID instead + -Cleanup: simplify the API of pcb_chg_obj_name_query() (remove type/ptr1/ptr2/ptr3) + -Cleanup: move loop end macros from macro.h to obj_common.h - because it's much less general than it was originally and layers are becoming objects anyway + -Cleanup: rename PCB_ANYOBJFIELDS to PCB_ANY_PRIMITIVE_FIELDS to make room for generalization (any object may be non-drawing-primitive) + -Change: old data model: drc enforce line vs. padstack, while drawing, switched over to the new data model + -Change: padstack search precedence: current layer has prio over side + -Move: ListRotations to the oldactions plugin - this feature is redundant with the query function and the xy exporters + -Add: warn and return error on copy or move to buffer with empty selection + -Add: missing element->subc transition on rats patch footprint replace + -Add: old data model: rewrite SaveTo(AllUnusedPins, ...) for the new data model + -Add: check and warn on uninit if any of the plug chains are non-empty - such bugs can lead to uninit-crash with plugins + -Add: pass on background and foreground color on dynamic menu creation + -Add: ChkRst() action for route style checkbox menus + -Add: net structs, pcb_layer_t, pcb_layergrp_t are now compatible with pcb_any_obj_t + -Add: enable action EditGroup(attrib, key=value) + -Add: virtual layer button: padstacks (pstk_on controls whether padstack shapes are drawn, not only holes) + -Add: pcb api ver to avoid loading mismatching plugins + -Add: pcb_chg_obj_name_query() special case: when changing a subc part dyn text that contains %a.parent.refdes%, assume it's a change on the parent subc's refdes + -Add: pcb_chg_obj_name_query() won't edit subc refdes immediately on "refdes text", it asks first, giving the user a chance to change the dyntext template + -Add: config setting for also drawing the bounding box when xor-drawing a text object (e.g. for move) + -Add: optional, runtime HID fallback mechanism (if there is no X, the batch HID will start) + -Add: helper function to print the current key sequence in a string (for status line indication) + -Add: Buffer(Push) and Buffer(Pop) to let actions temporarily switch buffer then go back + -Add: PasteBuffer(normalize) - to clean up after an import + -Add: inline func for coord abs (portable implementation to replace labs()/llabs()) + -Add: system() sets PCB_RND_BOARD_FILE_NAME; exports crosshair X, Y and current layer's name in env vars + -Add: command line option for dumping all object flag names per object type + -Add: action Rotate90 + -Add: hid_nogui prints progress bar to stderr if verbosity level is high enough + -Add: progress bar on data poly clipping after 2 seconds; poly clipping can be cancelled (at a cost of exiting pcb-rnd) + -Add: assert() on invalid menu ID + -Add: throw an error for any plugin conf field that is unregistered - such bugs cause segfault with dynamic loaded plugins + -Add: extend the padstack mirror API so that x mirroring can be disabled + + [diag] + -Fix: integrity: do not check more layers than what the parent has (e.g. few subc layers vs. a lot of board layers where the subc is hosted) + -Fix: missing newlines at the end of error messages + -Fix: respect prefix when printing lihata dump section headers + -Add: integrity test on layer's parent + -Add: integrity checks for object's ->type field + -Add: integrity test on layer group type/parent + -Add: integrity tests for non-global outline layers + -Add: print comments about which section of the emitted lihata dump is for main and for plugin trees + + [dialogs] + -Fix: padstack shape copy does not bloat the shape + -Fix: padstack dialog uses real tabs instead of local button based implementation + -Fix: shape gen sets clearance to 0 + -Fix: flag edit prints object type in text, not in magic number + -Add: padstack editor, 3rd tab: auto generate common cases + -Add: padstackedit can be invoked with a selected tab open + -Add: include optional prototype name in instance proto button text + + [distaligntext] + -Cleanup: remove doxygen + -Cleanup: don't repeat the file name in comment + -Change: rewrite element loops to subc loops - floater text on the first level considered + + [doc] + -Fix: use $(MAKE) instead of hardwired make + -Del: old Debian list generation: we don't do custom Debian packaging anymore + -Update: wishlist: data model rewrite done + -Add: user manual, ui: explain multi-stroke key bindings, prepare the key tree + -Add: multi-stroke key assignment: document non-leaf choices + -Add: document new key tree nodes + -Add: keytree flat list + -Add: document what's new in lihata v5 + -Add: manual page for fp2subc + -Add: document lihata board v5 news: route style via proto ID + -Add: document lihata v5 padstack proto name feature + -Add: lihata -> html render script for the file format doc + -Add: lihata board and friends file format spec + -Add: technical details on the xy exporter templates + -Add: mods3: explain plugin status words + -Add: link mods3 tables from plugin creation howto for classes and status words + -Add: document the new stroke plugin + -Add: document the polystitch plugin + -Add: minimalistic user documentation for the autoplace plugin + -Add: minimalistic user manual for the autoroute plugin + -Add: list svn mirrors, explain when the mirrors should be used + + [export_bom] + -Fix: use the centralized footprint name lookup + + [export_dsn] + -Fix: do not x-flip padstack placement within subc - that swaps the pads + -Fix: y flip in padstack placement within subcircuit + -Fix: mirror x shapes of padstacks when parent subcircuit is on the other side (freerouting dsn import bug workaround) + -Fix: padstack mirrored x placement as a workaround for freerouting's dsn importer bug + -Fix: heavy terminal placement within subcircuits, including proper y flip + -Fix: make sure layer names are unique by prefixing group name with group ID + -Workaround: subc front/back and inverted padstack layer stackup to work around a bug in freerouting.net dsn importer + -Cleanup: rewrite layer support to use core data directly (also removes glib dependency) + + [export_dxf] + -Fix: arc angles for all positive and negative deltas (simplify the code to remove bugs) + + [export_ipcd356] + -Change: full rewrite + + [export_png] + -Fix: in photo mode, use the slower, but more accurate line drawing method for zero-length lines + + [export_ps] + -Fix: ps_bloat now works + -Del: polygrid export option - PolyHatch() does it better + + [export_xy] + -Fix: don't count subcircuits in int, use pcb_cardinal_t (int may be 16 bit) + -Fix: use central subc footprint name mechanism + -Fix: unregister conf nodes in uninit + -Add: local plugin configuration for templates + -Add: conf list parser for templates + -Add: lihata conf version of the original templates + -Add: compile and install export_xy.conf + -Cleanup: terminology in template field names: subc/terminal instead of elem/pad + -Cleanup: rename "elem." to "subc." and "pad." to "term." in the template for consistency + -Cleanup: rename subc.name to subc.refdes and subc.desc to subc.footprint for consistency with code terminology + -Cleanup: rename element_num to count for consistency in the terminology + + [fp_board] + -Fix: C89 forbids mixed declarations and code + + [fp_wget] + -Fix: error messages are not sent to stdout + -Add: common helper function for searching the index for a footprint name + -Add: gedasymbols: if path is the cookie, accept it and search for the footprint short name in the index + -Add: footprint path search for edakrill + + [gpmi] + -Fix: remove the old MAX_LAYERS+2 hack - silks are not special any more + -Del: debug draw API + -Update: new menu creation API + -Update: plugin dependencies + + [gtk] + -Fix: do not discriminate keypad keys + -Fix: SEL -> ARR in mode button icon for consistency with the code/doc terminology + -Fix: emit layer vis change event from wt_layersel on any visibility affecting changes to keep menus in sync + -Fix: when removing a menu widget, also remove its action from the action list + -Fix: bindings so that the route style widget is updated when the route style selection changes (from the menu or via the action) + -Fix: pinout window: do not enforce window sizes too large for large footprints + -Fix: coord correctness: zoom/pan coord conversion doesn't cast coords to gint + -Fix: drc window reset shall remove old report widgets + -Fix: coord entry: let the user change units + -Fix: side-correct zoom-to-win + -Fix: do not include file name for SaveTo(Layout) - it knows the file name + -Fix: advanced search non-integer fields are retyped to DOUBLE from INT + -Fix: allow negative integers in config pov's spinbox (e.g. subc dash_freq can be set to -1) + -Fix: give focus to the drawing window before entering the main loop so key presses are handled even if the mouse cursor haven't yet entered the drawing area + -Change: mouse button assignment is in sync with the default menu file + -Add: option for context-sensitive popups: per object type under the cursor + -Add: status line: display key sequence + -Add: low level zoom action feature: zoom(x1,y1,x2,y2) and high level ZoomTo() action that doesn't try to query the new center + -Add: advanced search: subc and host subc fields + -Add: advanced search: subcircuit rotation and side field + -Add: advanced search: padstack fields in the advanced search + -Add: missing action EditLayerGroups for compatibility with lesstif + + [hid] + -Fix: gtk or lesstif X initialization failure does not result in exit() from the HID code but returns error so that main.c has the chance to handle it later + -Fix: coord correctness: set_crosshair() takes coords, not ints + -Cleanup: API indentation and excess _ in argument names + -Del: debug draw API - use UI layers instead + -Del: radio menu support - gui logic is implemented deeper, no toolkit support required + -Move: centralize SetUnits action from the lesstif and gtk hids into core + -Change: pass on menu properties as a struct, not as a bunch of const char *args, to make the API easier to extend + -Change: parse arg/command line API has an integer return value so HIDs are not forced to exit but can indicate if initialization fails + -Add: publish the main hid config for each GUI hids so that anchored menus can be added from the outside, without the GUI hids knowing about all anchors by name + -Add: API to look up and map @anchor menus + -Add: API for removing menu items under an anchor + -Add: remove menu subtree by lihata node (for removing under-anchored menu items) + -Add: checked and update_on fields for dynamic menus + -Add: background and foreground color fields in dynamic menu struct + -Add: API to force a global menu checkbox update + -Add: wrap pcb_gui->attribute_dialog as it may not be always available + + [import_dsn] + -Update: load layer group id__names as exported by export_dsn + + [import_hpgl] + -Fix: Y flip + + [import_ipcd356] + -Add: new plugin to load terminals and netlist for test points + + [io_lihata] + -Fix: test route style entry type before use + -Fix: throw an error when a padstack references to an invalid prototype + -Fix: handle buggy input: no data in subc + -Fix: don't segfault if poly padstack proto shape contains invalid coordinate + -Fix: when setting up new layer groups, set parent and type properly + -Fix: v4: save heavy terminal thermals (and warn if saving to shapei + -Fix: rotate op needs to invert angle if padstack is x-mirrored, because padstack transformation data is interpreted as "rotate first, then mirror" + -Fix: for mirroring y_offs=0 does not mean "no coord change": the y coord can still be non-zero in which case it needs to be mirrored. Introduce a special y_offs value to indicate "don't mirror coords" + -Add: event on creating padstacks + -Add: low level function for changing prototype name + + [plugins] + -Fix: better corner case handling for hook unregister for the case the target pointer is the head of the list + -Fix: unregister all plugin hooks to avoid quit-time-segfault (dangling pointers left on the plug chains, backing structs already unmapped by dlclose) + + [polystitch] + -Fix: pcb_coord_t correctness + -Change: rewrite the core of the plugin so that it doesn't try to generate a (self-intersecting, invalid) polygon, but converts the inner polygon into a valid hole in the outer polygon + -Cleanup: do not use global variables when no global state is necessary for the task + + [propedit] + -Fix: attempt to change layer properties only on prefix match or attributes + -Fix: mark layers being edited as the first step, do not trust storing the pointers + -Fix: clearance value halving on set + -Add: propedit(layers) and propedit(layer:id) so layer attributes can be edited + -Add: accept multiple layer IDs + -Add: layer id "current" means the current layer + -Add: operate on layer groups + -Add: operate on boards + -Add: allow editing subc part padstack in loose subc mode + -Add: extend loose subc editing to all subc part objects (not limited to padstack) + -Add: allow editing subc parts that are freely editable (terminals, floaters or anything in loose subc mode) + + [query] + -Fix: properly compare NULL string to empty string (they should be the same for now) + -Fix: make subcircuit access recursive - subcircuit parts should be dealt with + -Fix: do not segfault on uninitialized variables + -Add: padstack shape accessor + -Add: new field: subc (references to the direct parent subc) + -Add: generalize accessing the common fields; subc field access works on parent subcircuits + -Add: more sophisticated eval printout: take only coords as bools, print the value of the rest; void is always false + -Add: subc rotation access + -Add: access subc side (TOP or BOTTOM) + + [renumber] + -Cleanup: remove doxygen + -Cleanup: const correctness + + [report] + -Fix: report all net lengths using pcb_message() instead of direct log writes so the user has more control + -Fix: use pcb_message() instead of direct logging for more control + -Fix: excess undo interfering with user's undo + -Update: use the new data model for looking up net name for found objects + -Cleanup: split and simplify the net name lookup code + -Cleanup: get rid of DrillInfoTypePtr - use * for pointers + -Cleanup: get rid of CamelCase + + [rtree] + -Del: old rtree implementation in favor of genrtree + + [rubberband] + -Fix: don't mix var decl with code, C89 doesn't allow that + -Fix: the event PCB_EVENT_RUBBER_CONSTRAIN_MAIN_LINE was using int where it should have been using pcb_coord_t + + [scconfig] + -Fix: use detected host cc to compile puplug utils + -Fix: do not hardwire inline - use the detection from scconfig + -Change: force lib_compat_help to be a builtin because core temporarily depends on it + -Change: use local coord abs implementation instead of labs/llabs because llabs is not c89 and leads to feature macro hell on GNU + -Del: export_dsn -> glib dependency + + [shape] + -Fix: use tabbed widget instead of local tab implementation (works better on small screen) + -Fix: don't warn on start for invalid dia + -Fix: roundrect: don't crash on missing arg + -Fix: avoid generating self intersecting polygons when round rect rounding radius is 0 + -Fix: placing round rect: if there's only one arg, it should be the size + + [stroke] + -Rewrite: new, configuration+action based stroke implementation, rewritten from scratch + -Fix: gesture direction should not invert when board is flipped + -Fix: coord type correctness: event coords are passed as pcb_coord_t, not as int + -Fix: don't use bit shift on coords, c89 doesn't guarantee that would work on signed ints + -Fix: warn only once for missing libstroke, and only if the gesture is large enough + -Change: API CHANGE: stroke finish returns integer; 0 on success (gesture recognized) + -Add: hack when processing mouse button release action: return 1 if stroke is enabled and gesture is recognized so that the context popup menu is not opened + -Add: bind right mouse button press/release to stroke in the menu file + -Add: rotation gestures + -Add: stroke() action with stroke(gesture, seq) + -Add: bindings for zoom in and out + -Add: stopline feature, also supports poly and poly hole + -Add: the config explains the dial pad idea of sequence descriptions + -Add: option for warning on unknown/unconfigured sequences + + [subc] + -Fix: const correctness: host transf can't take const subc because of the subc cache updates + -Fix: when rotating all subc parts, restore undo to avoid padstack rotations getting on the undo list separately + -Fix: unified handling of subc_op undo - subc size change operations are undo-batched + -Fix: undo strategy: when subc-only undo/redo is done, freeze undo adds + -Fix: don't let flag change of subcircuit already in buffer get on the undo list - buffer flags changes won't be undoable + -Add: menu item for controlling the loose subc flag + -Add: update subc when part padstack is changed + -Add: configurable subc visible bbox dash frequency + -Add: helper function to return the footprint name of a subc + + [teardrops] + -Fix: c89 forbids mixed declarations and code + + [tool] + -Fix: move: do not perform the move if dx==0 and dy==0 + -Fix: dereference pointer in pcb_tool_get macro + -Fix: reset crosshair bounds after placing a drag&drop move so the crosshair move is not limited + -Split: define in tool files if the tool can be selected in rat drawing mode + -Split: tool (un)init code into tool files + -Move: pcb_crosshair_save/restore_mode to tool.[ch] as pcb_tool_save/restore + + [util] + -Del: old, resource file based keylist -> html converter (pcb-rnd long ago switched to lht) + -Add: keylist graphviz drawing for multikey combos + -Add: keylist can generate a boxed html version (each box is a starting letter) + -Add: keylist script uses css magic for the boxed version to get boxes float + + [vendor] + -Fix: count total number of holes again + -Fix: re-enable route style tuning + -Fix: re-enable setting the current 'pen' via drill + -Add: event for tuning newly placed padstacks when vendor drill mapping is enabled (replaces the stub) Index: tags/2.0.1/Changelog.1.0.x.gz =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: tags/2.0.1/Changelog.1.0.x.gz =================================================================== --- tags/2.0.1/Changelog.1.0.x.gz (nonexistent) +++ tags/2.0.1/Changelog.1.0.x.gz (revision 18980) Property changes on: tags/2.0.1/Changelog.1.0.x.gz ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: tags/2.0.1/Changelog.1.1.x.gz =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: tags/2.0.1/Changelog.1.1.x.gz =================================================================== --- tags/2.0.1/Changelog.1.1.x.gz (nonexistent) +++ tags/2.0.1/Changelog.1.1.x.gz (revision 18980) Property changes on: tags/2.0.1/Changelog.1.1.x.gz ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: tags/2.0.1/Changelog.1.2.x.gz =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: tags/2.0.1/Changelog.1.2.x.gz =================================================================== --- tags/2.0.1/Changelog.1.2.x.gz (nonexistent) +++ tags/2.0.1/Changelog.1.2.x.gz (revision 18980) Property changes on: tags/2.0.1/Changelog.1.2.x.gz ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: tags/2.0.1/INSTALL =================================================================== --- tags/2.0.1/INSTALL (nonexistent) +++ tags/2.0.1/INSTALL (revision 18980) @@ -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: tags/2.0.1/Makefile =================================================================== --- tags/2.0.1/Makefile (nonexistent) +++ tags/2.0.1/Makefile (revision 18980) @@ -0,0 +1,56 @@ +all: FORCE + cd src_3rd/puplug/util && $(MAKE) CC=$(PCB_RND_HOST_CC) + 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 + +include Makefile.conf + +FORCE: Index: tags/2.0.1/Makefile.conf.in =================================================================== --- tags/2.0.1/Makefile.conf.in (nonexistent) +++ tags/2.0.1/Makefile.conf.in (revision 18980) @@ -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@ +PCB_RND_HOST_CC=@/host/cc/cc@ + +# The installation directoried to be used from within binaries (with +# install_root/DESTDIR removed) +LIBDIR_INSTALLED=@/local/prefix@/lib/pcb-rnd + +@] Index: tags/2.0.1/README =================================================================== --- tags/2.0.1/README (nonexistent) +++ tags/2.0.1/README (revision 18980) @@ -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: tags/2.0.1/Release_notes =================================================================== --- tags/2.0.1/Release_notes (nonexistent) +++ tags/2.0.1/Release_notes (revision 18980) @@ -0,0 +1,36 @@ +pcb-rnd 2.0.1 +~~~~~~~~~~~~~ + +Focus of this release is infrastructural cleanups, bugfixes +and GUI rendering optimization. The new features added in this +release are all about extending the infrastructure to get the +flexibility of pcb-rnd to the next level. + +New feature highlights: + +1. Cam exporting interface: a simple, unified interface to tell +any exporter what layers to export to what file names. + +2. Command line modes: the command line interpreter can be switched +to interpret syntax different from pcb actions. + +3. Scripting support upgrade to using fungw (10 scripting languages, +including awk, python, perl, ruby, javascript, lisp). Support for +switching the command line into script mode using any of the +supported scripting languages (the user can enter script one-liners directly). + +4. ddraft: angle/length constraint actions and GUI, trim() and split() actions, +a new command line mode with a syntax designed for 2d drafting. Similar +to those in mechanical cads, with actions to draw lines perpendicular or +parallel to existing lines. + +5. Command line GUI upgrade: more seamless integration of command line +editing and mouse actions. + +6. New, single-stage, non-modal export dialog with tabs available exporters +(also available in lesstif). + +7. Import plugin: freepcb netlist - schematics from EasyEDA can be imported + +8. Persistent layer color, saved with the board. Layer colors from the +configuration are used only as initial color for new layers. Index: tags/2.0.1/config.h.in =================================================================== --- tags/2.0.1/config.h.in (nonexistent) +++ tags/2.0.1/config.h.in (revision 18980) @@ -0,0 +1,265 @@ +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\n/* inline, as detected ("inline" or empty) */\n} +print_ternary ?cc/inline {#define PCB_INLINE_DETECTED inline} {#define PCB_INLINE_DETECTED /* no inline */} + +print {\n\n/* final, combined keywords and attributes for an inline function */\n} +print {#define PCB_INLINE static PCB_INLINE_DETECTED 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 putenv() works */\n} +print_ternary ?libs/env/putenv/presents {#define PCB_HAVE_PUTENV 1} {/* #undef PCB_HAVE_PUTENV */} + +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@" + +/* Format: abccrrrrr where a, b and c are pcb-rnd version numbers and r is + the svn revision number (optional) */ +#define PCB_API_VER @/local/apiver@ + + +/* 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 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: tags/2.0.1/configure =================================================================== --- tags/2.0.1/configure (nonexistent) +++ tags/2.0.1/configure (revision 18980) @@ -0,0 +1,4 @@ +#!/bin/sh +cd scconfig +make +./configure "$@" Property changes on: tags/2.0.1/configure ___________________________________________________________________ Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: tags/2.0.1/data/Makefile =================================================================== --- tags/2.0.1/data/Makefile (nonexistent) +++ tags/2.0.1/data/Makefile (revision 18980) @@ -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: tags/2.0.1/data/README =================================================================== --- tags/2.0.1/data/README (nonexistent) +++ tags/2.0.1/data/README (revision 18980) @@ -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: tags/2.0.1/data/application-x-excellon-16.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: tags/2.0.1/data/application-x-excellon-16.png =================================================================== --- tags/2.0.1/data/application-x-excellon-16.png (nonexistent) +++ tags/2.0.1/data/application-x-excellon-16.png (revision 18980) Property changes on: tags/2.0.1/data/application-x-excellon-16.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: tags/2.0.1/data/application-x-excellon-16.svg =================================================================== --- tags/2.0.1/data/application-x-excellon-16.svg (nonexistent) +++ tags/2.0.1/data/application-x-excellon-16.svg (revision 18980) @@ -0,0 +1,1271 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Excellon file + + + + + + + Peter Clifton, Jakub Steiner + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: tags/2.0.1/data/application-x-excellon-22.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: tags/2.0.1/data/application-x-excellon-22.png =================================================================== --- tags/2.0.1/data/application-x-excellon-22.png (nonexistent) +++ tags/2.0.1/data/application-x-excellon-22.png (revision 18980) Property changes on: tags/2.0.1/data/application-x-excellon-22.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: tags/2.0.1/data/application-x-excellon-22.svg =================================================================== --- tags/2.0.1/data/application-x-excellon-22.svg (nonexistent) +++ tags/2.0.1/data/application-x-excellon-22.svg (revision 18980) @@ -0,0 +1,1571 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Excellon file + + + + + + + Peter Clifton, Tomaz Solc, Jakub Steiner + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: tags/2.0.1/data/application-x-excellon-24.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: tags/2.0.1/data/application-x-excellon-24.png =================================================================== --- tags/2.0.1/data/application-x-excellon-24.png (nonexistent) +++ tags/2.0.1/data/application-x-excellon-24.png (revision 18980) Property changes on: tags/2.0.1/data/application-x-excellon-24.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: tags/2.0.1/data/application-x-excellon-32.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: tags/2.0.1/data/application-x-excellon-32.png =================================================================== --- tags/2.0.1/data/application-x-excellon-32.png (nonexistent) +++ tags/2.0.1/data/application-x-excellon-32.png (revision 18980) Property changes on: tags/2.0.1/data/application-x-excellon-32.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: tags/2.0.1/data/application-x-excellon-32.svg =================================================================== --- tags/2.0.1/data/application-x-excellon-32.svg (nonexistent) +++ tags/2.0.1/data/application-x-excellon-32.svg (revision 18980) @@ -0,0 +1,1406 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Excellon file + + + + + + + Peter Clifton, Tomaz Solc, Jakub Steiner + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: tags/2.0.1/data/application-x-excellon-48.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: tags/2.0.1/data/application-x-excellon-48.png =================================================================== --- tags/2.0.1/data/application-x-excellon-48.png (nonexistent) +++ tags/2.0.1/data/application-x-excellon-48.png (revision 18980) Property changes on: tags/2.0.1/data/application-x-excellon-48.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: tags/2.0.1/data/application-x-excellon-48.svg =================================================================== --- tags/2.0.1/data/application-x-excellon-48.svg (nonexistent) +++ tags/2.0.1/data/application-x-excellon-48.svg (revision 18980) @@ -0,0 +1,1283 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Excellon file + + + + + + + Peter Clifton, Tomaz Solc, Jakub Steiner + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: tags/2.0.1/data/application-x-excellon.svg =================================================================== --- tags/2.0.1/data/application-x-excellon.svg (nonexistent) +++ tags/2.0.1/data/application-x-excellon.svg (revision 18980) @@ -0,0 +1,1289 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Excellon file + + + + + + + Peter Clifton, Tomaz Solc, Jakub Steiner + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: tags/2.0.1/data/application-x-gerber-16.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: tags/2.0.1/data/application-x-gerber-16.png =================================================================== --- tags/2.0.1/data/application-x-gerber-16.png (nonexistent) +++ tags/2.0.1/data/application-x-gerber-16.png (revision 18980) Property changes on: tags/2.0.1/data/application-x-gerber-16.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: tags/2.0.1/data/application-x-gerber-16.svg =================================================================== --- tags/2.0.1/data/application-x-gerber-16.svg (nonexistent) +++ tags/2.0.1/data/application-x-gerber-16.svg (revision 18980) @@ -0,0 +1,543 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Gerber file + + + + + + + Peter Clifton, Tomaz Solc, Jakub Steiner + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: tags/2.0.1/data/application-x-gerber-22.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: tags/2.0.1/data/application-x-gerber-22.png =================================================================== --- tags/2.0.1/data/application-x-gerber-22.png (nonexistent) +++ tags/2.0.1/data/application-x-gerber-22.png (revision 18980) Property changes on: tags/2.0.1/data/application-x-gerber-22.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: tags/2.0.1/data/application-x-gerber-22.svg =================================================================== --- tags/2.0.1/data/application-x-gerber-22.svg (nonexistent) +++ tags/2.0.1/data/application-x-gerber-22.svg (revision 18980) @@ -0,0 +1,608 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Gerber file + + + + + + + Peter Clifton, Tomaz Solc, Jakub Steiner + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: tags/2.0.1/data/application-x-gerber-24.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: tags/2.0.1/data/application-x-gerber-24.png =================================================================== --- tags/2.0.1/data/application-x-gerber-24.png (nonexistent) +++ tags/2.0.1/data/application-x-gerber-24.png (revision 18980) Property changes on: tags/2.0.1/data/application-x-gerber-24.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: tags/2.0.1/data/application-x-gerber-32.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: tags/2.0.1/data/application-x-gerber-32.png =================================================================== --- tags/2.0.1/data/application-x-gerber-32.png (nonexistent) +++ tags/2.0.1/data/application-x-gerber-32.png (revision 18980) Property changes on: tags/2.0.1/data/application-x-gerber-32.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: tags/2.0.1/data/application-x-gerber-32.svg =================================================================== --- tags/2.0.1/data/application-x-gerber-32.svg (nonexistent) +++ tags/2.0.1/data/application-x-gerber-32.svg (revision 18980) @@ -0,0 +1,544 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Gerber file + + + + + + + Peter Clifton, Tomaz Solc, Jakub Steiner + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: tags/2.0.1/data/application-x-gerber-48.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: tags/2.0.1/data/application-x-gerber-48.png =================================================================== --- tags/2.0.1/data/application-x-gerber-48.png (nonexistent) +++ tags/2.0.1/data/application-x-gerber-48.png (revision 18980) Property changes on: tags/2.0.1/data/application-x-gerber-48.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: tags/2.0.1/data/application-x-gerber-48.svg =================================================================== --- tags/2.0.1/data/application-x-gerber-48.svg (nonexistent) +++ tags/2.0.1/data/application-x-gerber-48.svg (revision 18980) @@ -0,0 +1,707 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Gerber file + + + + + + + Peter Clifton, Tomaz Solc, Jakub Steiner + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: tags/2.0.1/data/application-x-gerber.svg =================================================================== --- tags/2.0.1/data/application-x-gerber.svg (nonexistent) +++ tags/2.0.1/data/application-x-gerber.svg (revision 18980) @@ -0,0 +1,712 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Gerber file + + + + + + + Peter Clifton, Tomaz Solc, Jakub Steiner + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: tags/2.0.1/data/application-x-pcb-footprint-16.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: tags/2.0.1/data/application-x-pcb-footprint-16.png =================================================================== --- tags/2.0.1/data/application-x-pcb-footprint-16.png (nonexistent) +++ tags/2.0.1/data/application-x-pcb-footprint-16.png (revision 18980) Property changes on: tags/2.0.1/data/application-x-pcb-footprint-16.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: tags/2.0.1/data/application-x-pcb-footprint-16.svg =================================================================== --- tags/2.0.1/data/application-x-pcb-footprint-16.svg (nonexistent) +++ tags/2.0.1/data/application-x-pcb-footprint-16.svg (revision 18980) @@ -0,0 +1,554 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + PCB footprint + + + + + + + Peter Clifton, Jakub Steiner + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: tags/2.0.1/data/application-x-pcb-footprint-22.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: tags/2.0.1/data/application-x-pcb-footprint-22.png =================================================================== --- tags/2.0.1/data/application-x-pcb-footprint-22.png (nonexistent) +++ tags/2.0.1/data/application-x-pcb-footprint-22.png (revision 18980) Property changes on: tags/2.0.1/data/application-x-pcb-footprint-22.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: tags/2.0.1/data/application-x-pcb-footprint-22.svg =================================================================== --- tags/2.0.1/data/application-x-pcb-footprint-22.svg (nonexistent) +++ tags/2.0.1/data/application-x-pcb-footprint-22.svg (revision 18980) @@ -0,0 +1,573 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + PCB footprint + + + + + + + Peter Clifton, Jakub Steiner + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: tags/2.0.1/data/application-x-pcb-footprint-24.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: tags/2.0.1/data/application-x-pcb-footprint-24.png =================================================================== --- tags/2.0.1/data/application-x-pcb-footprint-24.png (nonexistent) +++ tags/2.0.1/data/application-x-pcb-footprint-24.png (revision 18980) Property changes on: tags/2.0.1/data/application-x-pcb-footprint-24.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: tags/2.0.1/data/application-x-pcb-footprint-32.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: tags/2.0.1/data/application-x-pcb-footprint-32.png =================================================================== --- tags/2.0.1/data/application-x-pcb-footprint-32.png (nonexistent) +++ tags/2.0.1/data/application-x-pcb-footprint-32.png (revision 18980) Property changes on: tags/2.0.1/data/application-x-pcb-footprint-32.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: tags/2.0.1/data/application-x-pcb-footprint-32.svg =================================================================== --- tags/2.0.1/data/application-x-pcb-footprint-32.svg (nonexistent) +++ tags/2.0.1/data/application-x-pcb-footprint-32.svg (revision 18980) @@ -0,0 +1,2302 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + PCB footprint + + + + + + + Peter Clifton, Jakub Steiner + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: tags/2.0.1/data/application-x-pcb-footprint-48.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: tags/2.0.1/data/application-x-pcb-footprint-48.png =================================================================== --- tags/2.0.1/data/application-x-pcb-footprint-48.png (nonexistent) +++ tags/2.0.1/data/application-x-pcb-footprint-48.png (revision 18980) Property changes on: tags/2.0.1/data/application-x-pcb-footprint-48.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: tags/2.0.1/data/application-x-pcb-footprint-48.svg =================================================================== --- tags/2.0.1/data/application-x-pcb-footprint-48.svg (nonexistent) +++ tags/2.0.1/data/application-x-pcb-footprint-48.svg (revision 18980) @@ -0,0 +1,674 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + PCB footprint + + + + + + + Peter Clifton, Jakub Steiner + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: tags/2.0.1/data/application-x-pcb-footprint.svg =================================================================== --- tags/2.0.1/data/application-x-pcb-footprint.svg (nonexistent) +++ tags/2.0.1/data/application-x-pcb-footprint.svg (revision 18980) @@ -0,0 +1,680 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + PCB footprint + + + + + + + Peter Clifton, Jakub Steiner + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: tags/2.0.1/data/application-x-pcb-layout-16.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: tags/2.0.1/data/application-x-pcb-layout-16.png =================================================================== --- tags/2.0.1/data/application-x-pcb-layout-16.png (nonexistent) +++ tags/2.0.1/data/application-x-pcb-layout-16.png (revision 18980) Property changes on: tags/2.0.1/data/application-x-pcb-layout-16.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: tags/2.0.1/data/application-x-pcb-layout-16.svg =================================================================== --- tags/2.0.1/data/application-x-pcb-layout-16.svg (nonexistent) +++ tags/2.0.1/data/application-x-pcb-layout-16.svg (revision 18980) @@ -0,0 +1,1333 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + PCB layout + + + + + + + Peter Clifton, Tomaz Solc, Jakub Steiner + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: tags/2.0.1/data/application-x-pcb-layout-22.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: tags/2.0.1/data/application-x-pcb-layout-22.png =================================================================== --- tags/2.0.1/data/application-x-pcb-layout-22.png (nonexistent) +++ tags/2.0.1/data/application-x-pcb-layout-22.png (revision 18980) Property changes on: tags/2.0.1/data/application-x-pcb-layout-22.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: tags/2.0.1/data/application-x-pcb-layout-22.svg =================================================================== --- tags/2.0.1/data/application-x-pcb-layout-22.svg (nonexistent) +++ tags/2.0.1/data/application-x-pcb-layout-22.svg (revision 18980) @@ -0,0 +1,1423 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + PCB layout + + + + + + + Peter Clifton, Tomaz Solc, Jakub Steiner + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: tags/2.0.1/data/application-x-pcb-layout-24.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: tags/2.0.1/data/application-x-pcb-layout-24.png =================================================================== --- tags/2.0.1/data/application-x-pcb-layout-24.png (nonexistent) +++ tags/2.0.1/data/application-x-pcb-layout-24.png (revision 18980) Property changes on: tags/2.0.1/data/application-x-pcb-layout-24.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: tags/2.0.1/data/application-x-pcb-layout-32.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: tags/2.0.1/data/application-x-pcb-layout-32.png =================================================================== --- tags/2.0.1/data/application-x-pcb-layout-32.png (nonexistent) +++ tags/2.0.1/data/application-x-pcb-layout-32.png (revision 18980) Property changes on: tags/2.0.1/data/application-x-pcb-layout-32.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: tags/2.0.1/data/application-x-pcb-layout-32.svg =================================================================== --- tags/2.0.1/data/application-x-pcb-layout-32.svg (nonexistent) +++ tags/2.0.1/data/application-x-pcb-layout-32.svg (revision 18980) @@ -0,0 +1,1362 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + PCB layout + + + + + + + Peter Clifton, Tomaz Solc, Jakub Steiner + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: tags/2.0.1/data/application-x-pcb-layout-48.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: tags/2.0.1/data/application-x-pcb-layout-48.png =================================================================== --- tags/2.0.1/data/application-x-pcb-layout-48.png (nonexistent) +++ tags/2.0.1/data/application-x-pcb-layout-48.png (revision 18980) Property changes on: tags/2.0.1/data/application-x-pcb-layout-48.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: tags/2.0.1/data/application-x-pcb-layout-48.svg =================================================================== --- tags/2.0.1/data/application-x-pcb-layout-48.svg (nonexistent) +++ tags/2.0.1/data/application-x-pcb-layout-48.svg (revision 18980) @@ -0,0 +1,1341 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + PCB layout + + + + + + + Peter Clifton, Tomaz Solc, Jakub Steiner + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: tags/2.0.1/data/application-x-pcb-layout.svg =================================================================== --- tags/2.0.1/data/application-x-pcb-layout.svg (nonexistent) +++ tags/2.0.1/data/application-x-pcb-layout.svg (revision 18980) @@ -0,0 +1,1346 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + PCB layout + + + + + + + Peter Clifton, Tomaz Solc, Jakub Steiner + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: tags/2.0.1/data/application-x-pcb-netlist-16.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: tags/2.0.1/data/application-x-pcb-netlist-16.png =================================================================== --- tags/2.0.1/data/application-x-pcb-netlist-16.png (nonexistent) +++ tags/2.0.1/data/application-x-pcb-netlist-16.png (revision 18980) Property changes on: tags/2.0.1/data/application-x-pcb-netlist-16.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: tags/2.0.1/data/application-x-pcb-netlist-16.svg =================================================================== --- tags/2.0.1/data/application-x-pcb-netlist-16.svg (nonexistent) +++ tags/2.0.1/data/application-x-pcb-netlist-16.svg (revision 18980) @@ -0,0 +1,530 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + PCB netlist + + + + + + + Peter Clifton, Jakub Steiner + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: tags/2.0.1/data/application-x-pcb-netlist-22.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: tags/2.0.1/data/application-x-pcb-netlist-22.png =================================================================== --- tags/2.0.1/data/application-x-pcb-netlist-22.png (nonexistent) +++ tags/2.0.1/data/application-x-pcb-netlist-22.png (revision 18980) Property changes on: tags/2.0.1/data/application-x-pcb-netlist-22.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: tags/2.0.1/data/application-x-pcb-netlist-22.svg =================================================================== --- tags/2.0.1/data/application-x-pcb-netlist-22.svg (nonexistent) +++ tags/2.0.1/data/application-x-pcb-netlist-22.svg (revision 18980) @@ -0,0 +1,567 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + PCB netlist + + + + + + + Peter Clifton, Jakub Steiner + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: tags/2.0.1/data/application-x-pcb-netlist-24.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: tags/2.0.1/data/application-x-pcb-netlist-24.png =================================================================== --- tags/2.0.1/data/application-x-pcb-netlist-24.png (nonexistent) +++ tags/2.0.1/data/application-x-pcb-netlist-24.png (revision 18980) Property changes on: tags/2.0.1/data/application-x-pcb-netlist-24.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: tags/2.0.1/data/application-x-pcb-netlist-32.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: tags/2.0.1/data/application-x-pcb-netlist-32.png =================================================================== --- tags/2.0.1/data/application-x-pcb-netlist-32.png (nonexistent) +++ tags/2.0.1/data/application-x-pcb-netlist-32.png (revision 18980) Property changes on: tags/2.0.1/data/application-x-pcb-netlist-32.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: tags/2.0.1/data/application-x-pcb-netlist-32.svg =================================================================== --- tags/2.0.1/data/application-x-pcb-netlist-32.svg (nonexistent) +++ tags/2.0.1/data/application-x-pcb-netlist-32.svg (revision 18980) @@ -0,0 +1,1310 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + PCB netlist + + + + + + + Peter Clifton, Jakub Steiner + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: tags/2.0.1/data/application-x-pcb-netlist-48.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: tags/2.0.1/data/application-x-pcb-netlist-48.png =================================================================== --- tags/2.0.1/data/application-x-pcb-netlist-48.png (nonexistent) +++ tags/2.0.1/data/application-x-pcb-netlist-48.png (revision 18980) Property changes on: tags/2.0.1/data/application-x-pcb-netlist-48.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: tags/2.0.1/data/application-x-pcb-netlist-48.svg =================================================================== --- tags/2.0.1/data/application-x-pcb-netlist-48.svg (nonexistent) +++ tags/2.0.1/data/application-x-pcb-netlist-48.svg (revision 18980) @@ -0,0 +1,451 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + PCB netlist + + + + + + + Peter Clifton, Jakub Steiner + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: tags/2.0.1/data/application-x-pcb-netlist.svg =================================================================== --- tags/2.0.1/data/application-x-pcb-netlist.svg (nonexistent) +++ tags/2.0.1/data/application-x-pcb-netlist.svg (revision 18980) @@ -0,0 +1,459 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + PCB netlist + + + + + + + Peter Clifton, Jakub Steiner + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: tags/2.0.1/data/icon-theme-installer =================================================================== --- tags/2.0.1/data/icon-theme-installer (nonexistent) +++ tags/2.0.1/data/icon-theme-installer (revision 18980) @@ -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: tags/2.0.1/data/icon-theme-installer ___________________________________________________________________ Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: tags/2.0.1/data/pcb-48.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: tags/2.0.1/data/pcb-48.png =================================================================== --- tags/2.0.1/data/pcb-48.png (nonexistent) +++ tags/2.0.1/data/pcb-48.png (revision 18980) Property changes on: tags/2.0.1/data/pcb-48.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: tags/2.0.1/data/pcb.desktop =================================================================== --- tags/2.0.1/data/pcb.desktop (nonexistent) +++ tags/2.0.1/data/pcb.desktop (revision 18980) @@ -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: tags/2.0.1/data/pcb.svg =================================================================== --- tags/2.0.1/data/pcb.svg (nonexistent) +++ tags/2.0.1/data/pcb.svg (revision 18980) @@ -0,0 +1,1070 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + Lapo Calamandrei + + + + Text editor + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: tags/2.0.1/data/pcb.xml =================================================================== --- tags/2.0.1/data/pcb.xml (nonexistent) +++ tags/2.0.1/data/pcb.xml (revision 18980) @@ -0,0 +1,40 @@ + + + + + PCB layout + + + + + + + + PCB footprint + + + + + + + + PCB netlist + + + + + Gerber file + + + + + + + + Excellon drill file + + + + + + Index: tags/2.0.1/data/pcb_icon.ico =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: tags/2.0.1/data/pcb_icon.ico =================================================================== --- tags/2.0.1/data/pcb_icon.ico (nonexistent) +++ tags/2.0.1/data/pcb_icon.ico (revision 18980) Property changes on: tags/2.0.1/data/pcb_icon.ico ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: tags/2.0.1/data/regen_files =================================================================== --- tags/2.0.1/data/regen_files (nonexistent) +++ tags/2.0.1/data/regen_files (revision 18980) @@ -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: tags/2.0.1/data/regen_files ___________________________________________________________________ Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: tags/2.0.1/data/x-excellon.desktop =================================================================== --- tags/2.0.1/data/x-excellon.desktop (nonexistent) +++ tags/2.0.1/data/x-excellon.desktop (revision 18980) @@ -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: tags/2.0.1/data/x-gerber.desktop =================================================================== --- tags/2.0.1/data/x-gerber.desktop (nonexistent) +++ tags/2.0.1/data/x-gerber.desktop (revision 18980) @@ -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: tags/2.0.1/data/x-pcb-footprint.desktop =================================================================== --- tags/2.0.1/data/x-pcb-footprint.desktop (nonexistent) +++ tags/2.0.1/data/x-pcb-footprint.desktop (revision 18980) @@ -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: tags/2.0.1/data/x-pcb-layout.desktop =================================================================== --- tags/2.0.1/data/x-pcb-layout.desktop (nonexistent) +++ tags/2.0.1/data/x-pcb-layout.desktop (revision 18980) @@ -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: tags/2.0.1/data/x-pcb-netlist.desktop =================================================================== --- tags/2.0.1/data/x-pcb-netlist.desktop (nonexistent) +++ tags/2.0.1/data/x-pcb-netlist.desktop (revision 18980) @@ -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: tags/2.0.1/doc/Autostyle.html =================================================================== --- tags/2.0.1/doc/Autostyle.html (nonexistent) +++ tags/2.0.1/doc/Autostyle.html (revision 18980) @@ -0,0 +1,16 @@ + + + + + + + +
Main + News + Doc & pool + Support + People + Events & timeline + pcb-rnd [pcb-rnd logo] +
+ Index: tags/2.0.1/doc/Autostyle.sh =================================================================== --- tags/2.0.1/doc/Autostyle.sh (nonexistent) +++ tags/2.0.1/doc/Autostyle.sh (revision 18980) @@ -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: tags/2.0.1/doc/Autostyle.sh ___________________________________________________________________ Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: tags/2.0.1/doc/Makefile =================================================================== --- tags/2.0.1/doc/Makefile (nonexistent) +++ tags/2.0.1/doc/Makefile (revision 18980) @@ -0,0 +1,67 @@ +MENU_RES=../src/pcb-menu-default.lht +KEYLIST=../util/keylist.sh +DEBLIST=../util/devhelpers/deblist.sh +ROOT=.. + +all: keys.html user/05_ui/06_common/keytree.svg user/05_ui/06_common/keytree.txt + ROOT="" ./Autostyle.sh *.html + +include ../Makefile.conf + +user/05_ui/06_common/keytree.svg: $(MENU_RES) $(KEYLIST) + $(KEYLIST) --dot user/05_ui/06_common/src/node_names.txt $(MENU_RES) > user/05_ui/06_common/keytree.dot + dot -Tsvg < user/05_ui/06_common/keytree.dot >user/05_ui/06_common/keytree.svg + +user/05_ui/06_common/keytree.txt: $(MENU_RES) $(KEYLIST) + $(KEYLIST) --lst $(MENU_RES) > user/05_ui/06_common/keytree.txt + + +keys.html: $(MENU_RES) $(KEYLIST) + $(KEYLIST) $(MENU_RES) > keys.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: tags/2.0.1/doc/README =================================================================== --- tags/2.0.1/doc/README (nonexistent) +++ tags/2.0.1/doc/README (revision 18980) @@ -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: tags/2.0.1/doc/TODO =================================================================== --- tags/2.0.1/doc/TODO (nonexistent) +++ tags/2.0.1/doc/TODO (revision 18980) @@ -0,0 +1,291 @@ +0. For the upcoming release =============================================================================== ++ BUG: mincut memory over-allocation: bug_files/mincut.lht [report: James] + + if a short consists of terminals only, do not even start the algo, just mark the terminals + + after that if there are too many shorted networks left, revert to the dump algorithm ++ feature: an action for switching layer to current side; see also ML/1955 [report: James] ++ BUG: padstack clearance can not be set to zero in the padstackeditor: tab 1, set to 0, tab 2, change some other value, close dialog -> 0 is forgotten (probably it generally won't accept 0) ML/1954 [report: Casey] ++ BUG: crosshair vs. grid - one pixel off, see ML 1801 [report: pstuge] ++ BUG: gtk: keyboard handling in top window; ML 1811 [report: pstuge] ++ BUG: press {t t} (or any other invalid key seq) while the mouse cursor is not in the drawing area but over the top window: crosshair is drawn (it shouldn't appear until the mosue cursor enters the drawing area) [report: pstuge] ++ BUG: lesstif: when gtk is not compiled in, there are tons of warnigns see bug_files/lesstif_menu.txt [report: rqsall] + +> long term: need per plugin menus and/or implement local grid in lesstif + +> suppressed the error message for now, the menu gets disabled anyway +- BUG: gtk: 'tab' drifts cursor when used repeatedly, video repro: http://scififaster.net/wantitthatway_pcb-rnd.ogg [report: Miloh] ++ feature: fp_wget cache dir configurable [report: agaran] ++ BUG: Locked objects can be moved when selected. [Report: Ade] + +> solution: locked objects are not removed on buffer/move operations (but they are still copied) ++ BUG: property editor window too tall: add scroll ML/2047 [report: gpaubert] ++ BUG: unwanted file format change. Reprod: new board; place a rectangle; save as pcb/mainline; place a 1206 from the lib; {f s} -> saved as lihata v5 [report: Richard] + +2. For later releases =============================================================================== +- FEATURE: Scale() buffer objects (with an option to affect coords only) [report: celem] +- FEATURE: rendering transformations (to be used with cam, for Bdale's stencil use case) +- CLEANUP: move import_sch to import_sch_old and start a new, generic plugin +- FEATURE: relay events to multi-actions so that scripts can bind to events by defining actions +- CLEANUP: Remove separate command entry window from gtk +- FEATURE: padstack bbox: + - per layer: keep a bbox per transformed shape per prototype, then getting the bbox of a padstack ref on a specific layer is looking up the shape, then 4 integer additions [report: Wojciech] + - when calculating overall padstack bbox, ignore layers that are not present? but then a layer change would require a recalc (but this is true for subcs too!) [report: Wojciech] +- XOR rendering upgrade: + - experiment with 'emboss' kind of drawing instead of xor so rendering can stay 'direct' + - if worked: allow padstack xor draw to draw all shapes on all layers +- FEATURE: introduce new layer types: + - doc + - keepout + - decide where to store global layers +- CLEANUP: rewrite the preview API: + - instead of various hardwired methods (board, virtual layer, pinout), core should support callbacks + - there should be a view context in core associated with this, that contains flips so the view can be decoupled from board flip config (library preview) + - ... but there also should be an option for going with board flip (drc view) +- FEATURE: fungw: DAD dialog: mini parser from text +- CLEANUP: remove mnemonic from the menu system + - check the central code and struct fields + - remove "m=" fields from the menu lihata files +- CAM: + - CLEANUP: move the hackish gerber layer suffix functions into CAM configs + - CLEANUP: split gerber and drill file generation (make gerber depend on drill, for backward compatibility) + - FEATURE: export_gerber: add a true gerber drill output + - FEATURE: make the drill exporter sort drills by attributes, an user configured table telling which drill (by attribute) ends up in which file + - FEATURE: invent a generic API for both the drill attrib config table + - CLEANUP: remove the gerber->drill dep and ask users to use the CAM instead + - CLEANUP: unify how output files are accessed/checked: confirmation on overwrite +- opengl: + - BUG: heavy swapd +/- crash with radeon AMD GL driver, fixed by exporting LIBGL_ALWAYS_SOFTWARE=t GALLIUM_DRIVER=llvmpipe [report: erich] + - BUG: --gui gtk2_gl pcb-rnd library preview pane is black ( doWindows(library) ) [report: Miloh] +- FEATURE: draw on move: 'Crosshair shows DRC clearance' should show the clearance also when moving a ... (not only when placing it) [report: wojciechk8] + - need to precalculate and cache clearance shape in crosshair (polyarea!) because recalculating these for padstacks would be expensive (also rewrite lines and arcs) + - padstack + - clearing polygon + - text +- 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 +- FEATURE: route style upgrade to prototypes: + - BUG: set same {e s s} doesn't work on padstacks [report: Igor2] +- BUG: Rubberband move line endpoints ignores connected arc endpoints. [Fixing:Ade] +- BUG: gtk2_gl: RTT/arc_sizes.lht - elliptical arc corner case render bug [report: Wed] +- CLEANUP: 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] +- find.c rewrite: + - CLEANUP: a new "report(NetLength)" should not care about netlists but depend on find.c only + - CLEANUP: netlist rewrite + - when no netlist is loaded, new rats can't be drawn [report: agaran] +- FEATURE: lesstif does not allow "save as" in non alien format [report: erich] +- SUBC: element removal: + - BUG? check if drc outline is drawn on padstacks XorDraw*DRC in draw.c in the old code [report: igor2] + - FEATURE: "thermal recipe" so a padstack thermal can be put in a subc and it is change with the layer binding [report: jg] + - CLEANUP: convert pcblib to subcircuits: + - revise the value attribute - should be empty by default + - remove old install elements + - dir rename trunk/pcblib/tru-hole should handle make correctly and not walk on existing web services or user installs +- CLEANUP: When a subc or padstack is renamed or removed (PCB_EVENT_RUBBER_REMOVE_SUBC & PCB_EVENT_RUBBER_RENAME), any connected rats are removed by the rubberband plugin. Remove this feature from the rubberband plugin and add an alternative method of updating rats. [report: Ade] +- FEATURE: 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 +- 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] +- CLEANUP: propedit revamp: + - move the property editor out from gtk, using the DAD, into propedit + - test under lesstif + - remove Attribute() +- CLEANUP: retire the nelma plugin - nelma is unfinished and not maintained +- FEATURE: subc/term: new terminal attribute: "pretend not connected to the same subc copper" (agaran's coil example) +- FEATURE: 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] +- FEATURE: fontsel: ttf import? +- FEATURE: library window: allow long tags and long location text to split +- FEATURE: undo on new layer from right-click menu in gtk layersel doesn't work +- FEATUER: gtk layersel: consider to provide a config setting for making open-group-name horizontal [report: istankovic] +- layer rewrite: + - BUG: 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 + - FEATURE: do not require top and bottom silk (also grep for TODO #tbs) +- GTK Preferences->User PoV->Layers : Hit 'v' to "zoom fit" the preview [report: Alain] + - CLEANUP: allow GTK to handle keys in preview + - CLEANUP: use the zoompan engine for the zooming. Modifiy API if necessary +- CLEANUP: resources: +- conf: + - FEATURE: preferences dialog, config pov: change prio + - (BUG: gtk preferences: check what takes 131 megs of VIRT ram (on top); destroy the dialog structures when closed) + - (BUG: gtk preferences: poly isle area widget missing from the sizes tab) + - CLEANUP: 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 +- CLEANUP: Mark + - 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 + - FEATURE: grid size change should be undoable? [report:Evan] + - FEATURE: maybe other conf settings too? +- CLEANUP: pcb_act_Attributes -> remove; this should be handled by the property editor when lesstif already supports it. +- CLEANUP: layer group rewrite: remove PCB_MAX_LAYERGRP and PCB_MAX_LAYER and make them dynamic +- FEATURE: io_pcb: new, optional "layer tag" field in mainline's file format +- CLEANUP: fp_board: extend the API so that the element can be presented without saving to a file +- FEATURE: layer binding dialog: manual layer binding (reuse csect?) +- res/menu: + - FEATURE: load/swap menus (TODO#1) + - CLEANUP: search for vendor in the hid plugins, there should be no trace of it (vendor should register its in submenus with anchors) + - CLEANUP: 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 + - FEATURE: fungw: auto-remove menus by cookie (TODO#2) + - FEATURE: 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 +- CLENAUP: 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" +- CLEANUP: 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 +- FEATURE: project specific menus from extra lihata files - maybe from project.lht +- vendor drill plugin: + - CLEANUP: check if we want to keep vendor name + - FEATURE: vendor: be able to load multiple vendor files (project spec for skips, central for vendor) [report: celem] +- BUG: 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] + - BUG: lhtpers indentation: bug_files/lhtpers_ins/; breakpoint in pers_table.c:34 and debug why the newline is getting in [report: Igor2] +- query & advanced search + - FEATURE: search expr wizard should pick up the expression from the button when clicked + - CLEANUP: 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: + - FEATURE: autocrop doesnt undo (new layout, add some -maskmanaul content, autocrop(), & undo: gui view shifts, board size unchanged [report: Miloh] + - BUG: distalign pcb_crosshair option doesn't work as a reference point [report:Miloh] + - BUG: can't undo after boardflip(), (ERROR: Attempt to pcb_undo() with Serial == 0) [report:Miloh] +- FEATURE: padstack edit swap shapes - low level for a "solder mask defined pad" [report: ehennes] +- 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: gtk: preferences/user POV/sizes is not in sync with preferences/config POV/ [report: Alain] + - rewrite using DAD + - in sizes, add an apply button so the new settings can be applied from the non-modal preferences without closing + - react on conf change events, refresh the fields +- FEATURE: lihata v6: + - new doc layer types + - remove pcb_board_t Zoom/x/y + - remove via geometry from route style + - remove real layer visible flag (UI is always reset) + - add text object line width factor +- CLEANUP: parent subc update: + - inhibit mechanism to speed things up: + - under inhibit, pcb_subc_part_changed(ps) should mark subcircuits dirty + - when inhibit drops to zero, revisit all subcircuits that are dirty + - get a common inhibit function for batch processing that turn on draw, poly clip and pcb_subc_part_changed inhibit +- export_dsn: + - missing global padstack (via) export: + - FEATURE: need to think over and check the spec for how to do this with no-hole padstacks + - RTT tests: thermal_layer.dsn, comp1.dsn, padstack.dsn + - BUG: elem_pads_ds: do not export line shape in padstacks as polygons, that kills round cap lines +- feautres/cleanup: hid: + - FEATURE: holes should be drawn below silk and mask (maybe this could be a config setting) +- BUG: I/O bugs: + - kicad: + - 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_] + - eagle: + - 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: 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: valgrind shows memory leaks relating to binary load. See bug_files/e-motoren.lbr [report: erich] + - 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] + - 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]. + - bin: padstack clearances for element pins will rely on connectivity to other polygons layer by layer defined in the netlist + - bin: 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. + - bin: need to add support for non top silk (tPlace), tDocu and top copper text in read.c + - bin: 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. + +3. Long term =============================================================================== +- BUG: draw a large padstack poly (as a subc term); put some vias (padtsacks) on top of it; with gdk and gl, after the 6th via some via rings will disappear [report: James] + -> reason: order of padstack shape rendering is random + -> we should probably render large objects first then smaller ones + +Lesstif: + - the notebook widget is not portable; detect it from scconfig and provide some hackish alternative if not found [report: rqsall] + +GTK2: + - next_gui: keep them open, hide + +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 =============================================================================== +- BUG: 1. place 0603; 2. select; 3. cut to buffer; 4. undo -> 0603 put back but selection is lost; reason: the flag is removed in the buffer, but not in an undoable way as we don't have undo on buffer [report: igor2, miloh] +- 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! -> rewrite search.c to be a 'script' config) 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: main.c: SIGPIPE - detect it (needed for popen) +- FEATURE: padstack label smarter print: in case of full overlap of a bottom and top "pad", arrange other-side labels to avoid overlaps [report: al3x] +- FEATURE: advanced grid settings: make it possible to edit the lists in preferences +- improve locking: + - FEATURE: consider a move-only lock? + - BUG: when thermal and some other operations are applied on a locked element, indicate it +- BUG: Erich's gtk lag report: press 's' a lot then move the mouse - 's' ends up in the new loc! +- BUG: 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: 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] +- FEATURE: "save as" dialog: there should be an "auto" or "guess by extension" option in the save dialog format +- CLEANUP: 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 +- FEATURE: missing rotate polygon (mainline too) +- BUG: zoom in too deep onto board edge and the implicit outline rectangle behaves strangely [report:Evan] +- FEATURE: scconfig: check if it picks up settings from env vars (for a gentoo build) +- CLEANUP: replace mkdtemp() with something safer +- FEATURE: display net names on pins, vias (and maybe tracks?) when zoomed in enough +- FEATURE: DRC should warn for thin poly hair +- FEATURE: new examples + - blinking led with parametric footprints + - example of nonetlist: 1206 jumpers and logos +- CLEANUP: In-line help needs update/re-structuration +- CLEANUP: rethink/rewrite the action/change infrastructure - too many void *ptr1 + pointers, too many code duplication +- BUG: 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? +- CLEANUP: win32 port {large} + - clean up central Makefile.in rules: + - remove cat, sed, grep where possible, use scconfig instead +- BUG: 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 +- FEATURE: while drawing a line, the temporary outline should reflect the layer color +- FEATURE: push&shove + - keep 45-deg knee when grabbing a point for drag&drop in non-all-dir +- CLEANUP: unify gui invocation options: pcb-rnd --help gtk_[gdk|gl] and pcb-rnd --help lesstif both show and use different input methods [report:miloh] +- FEATURE: consider a simple all in one function to create a default layer stackup for static/predictable layer formats being imported, to simplify importer coding +- FEATURE: 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 +- BUG: miter bug; miter crosses SMT pads under certain conditions [report: celem/miloh] +- BUG: redrawbug1: grap c1, the diagonal trace gets drawn over U1's silk [report:Evan] + -> it's redrawn because of the overlapping bounding box with C1, while U1 has no overlap; it would be too expensive to calculate what else to redraw +- CLEANUP: core lib splitup: + - gsch2pcb: generalize plugin/buildin loading for external tools, check if gsch2pcb can work from plugins Index: tags/2.0.1/doc/TODO.cleanup =================================================================== --- tags/2.0.1/doc/TODO.cleanup (nonexistent) +++ tags/2.0.1/doc/TODO.cleanup (revision 18980) @@ -0,0 +1,3 @@ +- rename: + - conf_* +- move the GetXY action to central Index: tags/2.0.1/doc/TODO.gtk3 =================================================================== --- tags/2.0.1/doc/TODO.gtk3 (nonexistent) +++ tags/2.0.1/doc/TODO.gtk3 (revision 18980) @@ -0,0 +1,16 @@ +GUI: + + 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 z} on the drawing area -> hang + + xor draw fails after {w l} library footprint placement; in fail mode there's no xor outline of buffer; drawing a line fixes it + - 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 + +low prio/optional: + - elliptic arc rendering + +scconfig: + - ./configure --buildin-hid_gtk3_cairo ends up depending on hid_gl; have to use --disable-lib_hid_gl + - detect gtk3 calls the code depends on Index: tags/2.0.1/doc/TODO.hid =================================================================== --- tags/2.0.1/doc/TODO.hid (nonexistent) +++ tags/2.0.1/doc/TODO.hid (revision 18980) @@ -0,0 +1,19 @@ +HID API simplification, first stage + +- blockers: + - implementing a list/tree/table "widget" for lesstif + - implementing and testing the PCB_HATT_TREE in gtk + - implementing and testing the PCB_HATT_TREE in lesstif + - implement and test a new text/log entry HATT (API not yet specified) in lesstif + - implement and test a new text/log entry HATT (API not yet specified) in gtk + +- DAD conversion: + - rewriting the about box as DAD, in dialogs/ + - rewriting the route style dialog as DAD + - rewriting the external command entry window as DAD + - write a DAD based confirm window for fallback + - rewrite the user input window as DAD + - rewrite the log dialog (depends on the text/log HATT) + (- rewrite the pinout dialog as DAD (depends on a preview HATT, which is a bigger chunk)) + - rewrite the report dialog as DAD + Index: tags/2.0.1/doc/TODO.user =================================================================== --- tags/2.0.1/doc/TODO.user (nonexistent) +++ tags/2.0.1/doc/TODO.user (revision 18980) @@ -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: tags/2.0.1/doc/UNIX.txt =================================================================== --- tags/2.0.1/doc/UNIX.txt (nonexistent) +++ tags/2.0.1/doc/UNIX.txt (revision 18980) @@ -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: tags/2.0.1/doc/conf/Makefile =================================================================== --- tags/2.0.1/doc/conf/Makefile (nonexistent) +++ tags/2.0.1/doc/conf/Makefile (revision 18980) @@ -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: tags/2.0.1/doc/conf/groups.html =================================================================== --- tags/2.0.1/doc/conf/groups.html (nonexistent) +++ tags/2.0.1/doc/conf/groups.html (revision 18980) @@ -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 board 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: tags/2.0.1/doc/conf/index.html =================================================================== --- tags/2.0.1/doc/conf/index.html (nonexistent) +++ tags/2.0.1/doc/conf/index.html (revision 18980) @@ -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 board 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: tags/2.0.1/doc/conf/index_prog.html =================================================================== --- tags/2.0.1/doc/conf/index_prog.html (nonexistent) +++ tags/2.0.1/doc/conf/index_prog.html (revision 18980) @@ -0,0 +1,14 @@ + + + + pcb-rnd - config programmer's index + + + +

The new config system in pcb-rnd

+

Programmer's documentation

+ +TODO + + + Index: tags/2.0.1/doc/conf/index_user.html =================================================================== --- tags/2.0.1/doc/conf/index_user.html (nonexistent) +++ tags/2.0.1/doc/conf/index_user.html (revision 18980) @@ -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 board 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: tags/2.0.1/doc/conf/lists.html =================================================================== --- tags/2.0.1/doc/conf/lists.html (nonexistent) +++ tags/2.0.1/doc/conf/lists.html (revision 18980) @@ -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: tags/2.0.1/doc/conf/merging.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: tags/2.0.1/doc/conf/merging.png =================================================================== --- tags/2.0.1/doc/conf/merging.png (nonexistent) +++ tags/2.0.1/doc/conf/merging.png (revision 18980) Property changes on: tags/2.0.1/doc/conf/merging.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: tags/2.0.1/doc/conf/noextend.html =================================================================== --- tags/2.0.1/doc/conf/noextend.html (nonexistent) +++ tags/2.0.1/doc/conf/noextend.html (revision 18980) @@ -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 was 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: tags/2.0.1/doc/conf/plugin_chk.html =================================================================== --- tags/2.0.1/doc/conf/plugin_chk.html (nonexistent) +++ tags/2.0.1/doc/conf/plugin_chk.html (revision 18980) @@ -0,0 +1,14 @@ + + + + pcb-rnd - config plugin checklist + + + +

The new config system in pcb-rnd

+

Plugin programmer's checklist

+ +TODO + + + Index: tags/2.0.1/doc/conf/prio.html =================================================================== --- tags/2.0.1/doc/conf/prio.html (nonexistent) +++ tags/2.0.1/doc/conf/prio.html (revision 18980) @@ -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: tags/2.0.1/doc/conf/scalars.html =================================================================== --- tags/2.0.1/doc/conf/scalars.html (nonexistent) +++ tags/2.0.1/doc/conf/scalars.html (revision 18980) @@ -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: tags/2.0.1/doc/conf/sources.html =================================================================== --- tags/2.0.1/doc/conf/sources.html (nonexistent) +++ tags/2.0.1/doc/conf/sources.html (revision 18980) @@ -0,0 +1,89 @@ + + + + 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 board + 300 + /usr/share/pcb-rnd/default4.lht1 + deprecated2 + 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 board (.lht) files + +
design + 700 + saved in the board (.lht) 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") + +

+Footnotes: +

    +
  • 1: the name of the default board is default4.lht for + the default 4 layer board. The standard installation also ships default2.lht + as a similar 2 layer board. The name of the default baordfile is configured + in config node rc/default_pcb_file. +
  • 2: default pcb should not contain a config subtree; it is + easier to maintain the config tree if default configuration is coming from + config files only. +
+ + Index: tags/2.0.1/doc/conf/src/Makefile =================================================================== --- tags/2.0.1/doc/conf/src/Makefile (nonexistent) +++ tags/2.0.1/doc/conf/src/Makefile (revision 18980) @@ -0,0 +1,2 @@ +../merging.png: merging.dot + dot -Tpng merging.dot > ../merging.png \ No newline at end of file Index: tags/2.0.1/doc/conf/src/merging.dot =================================================================== --- tags/2.0.1/doc/conf/src/merging.dot (nonexistent) +++ tags/2.0.1/doc/conf/src/merging.dot (revision 18980) @@ -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: tags/2.0.1/doc/conf/syntax.html =================================================================== --- tags/2.0.1/doc/conf/syntax.html (nonexistent) +++ tags/2.0.1/doc/conf/syntax.html (revision 18980) @@ -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: tags/2.0.1/doc/conf/tree/CFN_BOOLEAN.html =================================================================== --- tags/2.0.1/doc/conf/tree/CFN_BOOLEAN.html (nonexistent) +++ tags/2.0.1/doc/conf/tree/CFN_BOOLEAN.html (revision 18980) @@ -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: tags/2.0.1/doc/conf/tree/CFN_COLOR.html =================================================================== --- tags/2.0.1/doc/conf/tree/CFN_COLOR.html (nonexistent) +++ tags/2.0.1/doc/conf/tree/CFN_COLOR.html (revision 18980) @@ -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: tags/2.0.1/doc/conf/tree/CFN_COORD.html =================================================================== --- tags/2.0.1/doc/conf/tree/CFN_COORD.html (nonexistent) +++ tags/2.0.1/doc/conf/tree/CFN_COORD.html (revision 18980) @@ -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: tags/2.0.1/doc/conf/tree/CFN_INCREMENTS.html =================================================================== --- tags/2.0.1/doc/conf/tree/CFN_INCREMENTS.html (nonexistent) +++ tags/2.0.1/doc/conf/tree/CFN_INCREMENTS.html (revision 18980) @@ -0,0 +1,8 @@ + + +

pcb-rnd conf tree

+

type: increments

+A collection of coordinates representing an increment configuration. +

+TODO + Index: tags/2.0.1/doc/conf/tree/CFN_INTEGER.html =================================================================== --- tags/2.0.1/doc/conf/tree/CFN_INTEGER.html (nonexistent) +++ tags/2.0.1/doc/conf/tree/CFN_INTEGER.html (revision 18980) @@ -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: tags/2.0.1/doc/conf/tree/CFN_LIST.html =================================================================== --- tags/2.0.1/doc/conf/tree/CFN_LIST.html (nonexistent) +++ tags/2.0.1/doc/conf/tree/CFN_LIST.html (revision 18980) @@ -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: tags/2.0.1/doc/conf/tree/CFN_REAL.html =================================================================== --- tags/2.0.1/doc/conf/tree/CFN_REAL.html (nonexistent) +++ tags/2.0.1/doc/conf/tree/CFN_REAL.html (revision 18980) @@ -0,0 +1,9 @@ + + +

pcb-rnd conf tree

+

type: real

+A decimal numeric value without unit. +

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

pcb-rnd conf tree

+

type: string

+Text value. +

+Example values: +

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

pcb-rnd conf tree

+

type: unit

+Name of a unit. +

+Example values: mm, cm, m, mil + + Index: tags/2.0.1/doc/conf/tree/appearance.html =================================================================== --- tags/2.0.1/doc/conf/tree/appearance.html (nonexistent) +++ tags/2.0.1/doc/conf/tree/appearance.html (revision 18980) @@ -0,0 +1,13 @@ + +

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 +
text_host_bbox boolean 0 when moving a text object, the outline thin-draw should also include the bounding box +
term_label_size real 0 size of terminal labels, in pcb font scale (100 is for the normal size) +
subc_layer_per_side boolean 0 hide top or bottom placed subcircuit annotations if the view is showing the other side +
Index: tags/2.0.1/doc/conf/tree/appearance_color.html =================================================================== --- tags/2.0.1/doc/conf/tree/appearance_color.html (nonexistent) +++ tags/2.0.1/doc/conf/tree/appearance_color.html (revision 18980) @@ -0,0 +1,26 @@ + +

pcb-rnd conf tree

+

subtree: appearance/color

+ +
node name type flags description +
background color 0 background and cursor color ... +
crosshair color 0 different object colors +
cross color 0 crosshair, drc outline color +
selected color 0 generic object selection color +
via color 0 non-terminal padstack shape on current layer +
pin color 0 terminal padstack shape on current layer +
pin_name color 0 on-screen terminal number/name labels +
subc color 0 on-screen subcircuit marks +
subc_nonetlist color 0 on-screen subcircuit marks for subcircuits with the nonetlist flag +
padstackmark color 0 on-screen center mark cross for padstacks +
rat color 0 on-screen rat lines +
invisible_objects color 0 other-side objects and padstack shapes on non-current layer +
connected color 0 'connected' highlight (galvanic connections found) +
warn color 0 warning highlight (e.g. object found to cause a short) +
off_limit color 0 on-screen background beyond the configured drawing area +
grid color 0 on-screen grid +
layer color 0 default layer colors; when a new layer is created, a color from this list is assigned initially +
mask color 0 default mask layer color (when a new mask layer is created) +
paste color 0 default paste layer color (when a new paste layer is created) +
element color 0 default silk layer color (when a new silk layer is created) +
Index: tags/2.0.1/doc/conf/tree/appearance_loglevels.html =================================================================== --- tags/2.0.1/doc/conf/tree/appearance_loglevels.html (nonexistent) +++ tags/2.0.1/doc/conf/tree/appearance_loglevels.html (revision 18980) @@ -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: tags/2.0.1/doc/conf/tree/appearance_messages.html =================================================================== --- tags/2.0.1/doc/conf/tree/appearance_messages.html (nonexistent) +++ tags/2.0.1/doc/conf/tree/appearance_messages.html (revision 18980) @@ -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: tags/2.0.1/doc/conf/tree/appearance_misc.html =================================================================== --- tags/2.0.1/doc/conf/tree/appearance_misc.html (nonexistent) +++ tags/2.0.1/doc/conf/tree/appearance_misc.html (revision 18980) @@ -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: tags/2.0.1/doc/conf/tree/appearance_padstack.html =================================================================== --- tags/2.0.1/doc/conf/tree/appearance_padstack.html (nonexistent) +++ tags/2.0.1/doc/conf/tree/appearance_padstack.html (revision 18980) @@ -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: tags/2.0.1/doc/conf/tree/appearance_pinout.html =================================================================== --- tags/2.0.1/doc/conf/tree/appearance_pinout.html (nonexistent) +++ tags/2.0.1/doc/conf/tree/appearance_pinout.html (revision 18980) @@ -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: tags/2.0.1/doc/conf/tree/appearance_subc.html =================================================================== --- tags/2.0.1/doc/conf/tree/appearance_subc.html (nonexistent) +++ tags/2.0.1/doc/conf/tree/appearance_subc.html (revision 18980) @@ -0,0 +1,7 @@ + +

pcb-rnd conf tree

+

subtree: appearance/subc

+ +
node name type flags description +
dash_freq integer 0 how dense the dashed outline should be; -1 means do not display the dashed outline; 0 means solid outline; 1..32 means dashed outline +
Index: tags/2.0.1/doc/conf/tree/design.html =================================================================== --- tags/2.0.1/doc/conf/tree/design.html (nonexistent) +++ tags/2.0.1/doc/conf/tree/design.html (revision 18980) @@ -0,0 +1,23 @@ + +

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 +
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 +
fab_author string 0 Full name of author for FAB drawings +
initial_layer_stack string 0 deprecated. +
paste_adjust coord 0 Adjust paste thickness +
Index: tags/2.0.1/doc/conf/tree/editor.html =================================================================== --- tags/2.0.1/doc/conf/tree/editor.html (nonexistent) +++ tags/2.0.1/doc/conf/tree/editor.html (revision 18980) @@ -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 +
grids list 0 grid in grid-string format +
grids_idx integer 0 the index of the currently active grid from grids +
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 OBSOLETE: 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 OBSOLETE: 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, subc floater text objects (typical use case: refdes text) 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: tags/2.0.1/doc/conf/tree/editor_selection.html =================================================================== --- tags/2.0.1/doc/conf/tree/editor_selection.html (nonexistent) +++ tags/2.0.1/doc/conf/tree/editor_selection.html (revision 18980) @@ -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: tags/2.0.1/doc/conf/tree/editor_view.html =================================================================== --- tags/2.0.1/doc/conf/tree/editor_view.html (nonexistent) +++ tags/2.0.1/doc/conf/tree/editor_view.html (revision 18980) @@ -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: tags/2.0.1/doc/conf/tree/rc.html =================================================================== --- tags/2.0.1/doc/conf/tree/rc.html (nonexistent) +++ tags/2.0.1/doc/conf/tree/rc.html (revision 18980) @@ -0,0 +1,35 @@ + +

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) +
hid_fallback boolean 0 if there is no explicitly specified HID (--gui) and the preferred GUI fails, automatically fall back on other HIDs, eventually running in batch mode +
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 +
menu_file string 0 where to load the default menu file from. If empty/unset, fall back to the legacy 'per hid ow menu file' setup. If contains slash, take it as a full path, if no slash, do a normal menu search for pcb-menu-NAME.lht +
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 +
cli_prompt string 0 plain text prompt to prefix the command entry +
cli_backend string 0 command parser action +
have_regex boolean 0 whether we have regex compiled in +
Index: tags/2.0.1/doc/conf/tree/rc_path.html =================================================================== --- tags/2.0.1/doc/conf/tree/rc_path.html (nonexistent) +++ tags/2.0.1/doc/conf/tree/rc_path.html (revision 18980) @@ -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: tags/2.0.1/doc/conf/tree/temp.html =================================================================== --- tags/2.0.1/doc/conf/tree/temp.html (nonexistent) +++ tags/2.0.1/doc/conf/tree/temp.html (revision 18980) @@ -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: tags/2.0.1/doc/contrib.html =================================================================== --- tags/2.0.1/doc/contrib.html (nonexistent) +++ tags/2.0.1/doc/contrib.html (revision 18980) @@ -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: tags/2.0.1/doc/datasheet.html =================================================================== --- tags/2.0.1/doc/datasheet.html (nonexistent) +++ tags/2.0.1/doc/datasheet.html (revision 18980) @@ -0,0 +1,82 @@ + + + + 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 +
native file format + lihata (structured text tree); support for loading and saving all old file versions +
board file formats + lihata (native), geda/PCB's .pcb, KiCad's s-expr kicad_pcb, Eagle (binary and xml, read-only), Protel/Autotrax (read-only), Mentor Graphics Hyperlynx +
other native formats + geda/PCB's .fp for footprints (native) +
import formats + gEDA/gaf sch, gEDA/gaf netlist, EasyEDA netlist, dsn, edif, ipcd356, HP-GL, tEDAx +
export formats + gerber, png, ps, svg, bom, xy, bboard, dsn, gcode, ipcd356, lpr, nelma, dxf, kicad old pcb format, tEDAx +
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 fungw (awk, python, lua, tcl, ruby, perl, javascript, lisp, shell) +
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 +
command line mode for 2d drafting +
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: tags/2.0.1/doc/developer/Makefile =================================================================== --- tags/2.0.1/doc/developer/Makefile (nonexistent) +++ tags/2.0.1/doc/developer/Makefile (revision 18980) @@ -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: tags/2.0.1/doc/developer/alien_formats/hyp.txt =================================================================== --- tags/2.0.1/doc/developer/alien_formats/hyp.txt (nonexistent) +++ tags/2.0.1/doc/developer/alien_formats/hyp.txt (revision 18980) @@ -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: tags/2.0.1/doc/developer/bisect.txt =================================================================== --- tags/2.0.1/doc/developer/bisect.txt (nonexistent) +++ tags/2.0.1/doc/developer/bisect.txt (revision 18980) @@ -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: tags/2.0.1/doc/developer/blog_queue.txt =================================================================== --- tags/2.0.1/doc/developer/blog_queue.txt (nonexistent) +++ tags/2.0.1/doc/developer/blog_queue.txt (revision 18980) @@ -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: tags/2.0.1/doc/developer/bridges/index.html =================================================================== --- tags/2.0.1/doc/developer/bridges/index.html (nonexistent) +++ tags/2.0.1/doc/developer/bridges/index.html (revision 18980) @@ -0,0 +1,11 @@ + + + + pcb-rnd developer manual + + + +This document has been moved to the +user doc. + + Index: tags/2.0.1/doc/developer/bugreport.html =================================================================== --- tags/2.0.1/doc/developer/bugreport.html (nonexistent) +++ tags/2.0.1/doc/developer/bugreport.html (revision 18980) @@ -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: tags/2.0.1/doc/developer/c89.html =================================================================== --- tags/2.0.1/doc/developer/c89.html (nonexistent) +++ tags/2.0.1/doc/developer/c89.html (revision 18980) @@ -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: tags/2.0.1/doc/developer/data.html =================================================================== --- tags/2.0.1/doc/developer/data.html (nonexistent) +++ tags/2.0.1/doc/developer/data.html (revision 18980) @@ -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: tags/2.0.1/doc/developer/data1.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: tags/2.0.1/doc/developer/data1.png =================================================================== --- tags/2.0.1/doc/developer/data1.png (nonexistent) +++ tags/2.0.1/doc/developer/data1.png (revision 18980) Property changes on: tags/2.0.1/doc/developer/data1.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: tags/2.0.1/doc/developer/ddrc/examples1.txt =================================================================== --- tags/2.0.1/doc/developer/ddrc/examples1.txt (nonexistent) +++ tags/2.0.1/doc/developer/ddrc/examples1.txt (revision 18980) @@ -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: tags/2.0.1/doc/developer/ddrc/proposal1.txt =================================================================== --- tags/2.0.1/doc/developer/ddrc/proposal1.txt (nonexistent) +++ tags/2.0.1/doc/developer/ddrc/proposal1.txt (revision 18980) @@ -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: tags/2.0.1/doc/developer/ddrc/requirements.txt =================================================================== --- tags/2.0.1/doc/developer/ddrc/requirements.txt (nonexistent) +++ tags/2.0.1/doc/developer/ddrc/requirements.txt (revision 18980) @@ -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: tags/2.0.1/doc/developer/distros.txt =================================================================== --- tags/2.0.1/doc/developer/distros.txt (nonexistent) +++ tags/2.0.1/doc/developer/distros.txt (revision 18980) @@ -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: tags/2.0.1/doc/developer/fungw_actions.txt =================================================================== --- tags/2.0.1/doc/developer/fungw_actions.txt (nonexistent) +++ tags/2.0.1/doc/developer/fungw_actions.txt (revision 18980) @@ -0,0 +1,129 @@ +Actions implemented as fungw functions +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +1. Intro + +All pcb-rnd actions are fungw functions by now. This helps the code to do +all the data type conversions easier, save a few conversions where we +don't need conversions. More importantly, this makes a more seamless +integration between user scripts and C code, whether scripts are calling +C actions or the user is executing script defined actions. + +To stay compatible with the old action mechanism, the current version +applies the following restrictions: + +- we have only one large fungw object (pcb_fgw_obj) that hosts all + functions; this emulates the old central hash of functions + +- before a function enters the object or a function is looked up in the + object, the function name is converted to lowercase; this emulates the + case intensity of the old action system, which is still essential for + the user interface (GUI or CLI command entry and menu). + +- temporarily, for the transition, there are two helper macros + PCB_OLD_ACT_BEGIN and PCB_OLD_ACT_END that can wrap old function + code, converting all arguments to a char **argv. Such old actions + should return non-zero on error, while the value of ores will always be + FGW_INT/0. New action code shall NOT use the compatibility API. + +- a single action call will result in a single fungw function call; that + is, the fungw function that serves the action is free to convert any + of the arguments. + +2. converting arguments + +Arguments are normally converted using PCB_ACT_CONVARG(); the last +argument is a statement that can make the value assignment to a local +variable if the conversion was succesful. For example fetching the 2nd +argument into a local coord: + +{ + pcb_coord_t c; + PCB_ACT_CONVARG(2, FGW_COORD, ActioName, c = fgw_coord(&argv[2])); +} + +If conversion fails or the argument is not available, the macro returns +from the function with error. Anoter variant of the macro called +PCB_ACT_MAY_CONVARG() omits the error-return part, allowing the code +to have optional arguments. + +When the coordinate conversion needs to keep extra info, e.g. whether +the coordinate was specified in absolute or relative, the special type +fgw_coords_t shall be used: + +{ + fgw_coords_t *crd; + PCB_ACT_CONVARG(1, FGW_COORDS, d1, crd = fgw_coords(&argv[1])); +} + + +3. returning + +An action function has two return values: the C function return value +and the "res" argument. If the action could not start executing code +because of a calling error, e.g. there are not enough arguments or +arguments can not be converted or the function is invoked out-of-context, +it should retrun a fungw error using the C return value. This indicates +that performing the call itself failed. + +Else, if actual action code runs, the C return value should be 0 and the +res argument should be loaded with the return value of the action. This +indicates that the call took place, the action was executed and the conclusion +is stored in res. The semantic of the result is action-specifiec. The common +convention is returning int, 0 meaning success. The shortnad for this: + +{ + PCB_ACT_IRES(0); + return 0; +} + +PCB_ACT_IRES() loads res with type and value. There are other similar, +type-specific macros available. + +4. multi-call + +Currently pcb-rnd does not depend on fungw's multi-call, thus actions are +free to convert their arguments - the same arguments will not be reused in +other actions. + +5. calling an action from another action + +There are two common cases: wrapping/dispatching and invoking. + +In the wrap/dispatch setup an outer action is called that does not alter +the arguments (not even converting them!), but has to call another action +with exactly the same arguments. This can be done by using the macro +PCB_ACT_CALL_C(). + +When an action code needs to invoke another action, there are three ways +doing it. + +5.1. string call + +The slow, string parsing way using pcb_actionl() or the more +efficient direct call. + + +5.2. direct C call + +Direct C function call is possible only if both the caller and callee +actions are in core, or are in the same plugin. Before the direct call +the caller needs to set up a fungw argv array and after the call the +array members need to be free'd using fgw_argv_free() to avoid +leaking argument memory. This needs to be done even if the caller did +not allocate any memory for argv members - the callee can allocate memory +by converting arguments. + +5.3. indirect C call + +Call pcb_find_action() to get an fgw_func_t * to the action - this holds +the C function pointer. Set up argv, make sure argv[0] is set up to be +the target function: + + fgw_func_t *fn = pcb_find_action(...); + argv[0].type = FGW_FUNC; + argv[0].val.func = fn; + +Call pcb_actionv_() with fn and the arguments. Always call fgw_argv_free() +afterward. Also call fgw_arg_free() on the res. + Index: tags/2.0.1/doc/developer/hid_gtk3/gtk2-edit_route_styles_001.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = image/png Index: tags/2.0.1/doc/developer/hid_gtk3/gtk2-edit_route_styles_001.png =================================================================== --- tags/2.0.1/doc/developer/hid_gtk3/gtk2-edit_route_styles_001.png (nonexistent) +++ tags/2.0.1/doc/developer/hid_gtk3/gtk2-edit_route_styles_001.png (revision 18980) Property changes on: tags/2.0.1/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: tags/2.0.1/doc/developer/hid_gtk3/gtk2-pcb-rnd_001.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = image/png Index: tags/2.0.1/doc/developer/hid_gtk3/gtk2-pcb-rnd_001.png =================================================================== --- tags/2.0.1/doc/developer/hid_gtk3/gtk2-pcb-rnd_001.png (nonexistent) +++ tags/2.0.1/doc/developer/hid_gtk3/gtk2-pcb-rnd_001.png (revision 18980) Property changes on: tags/2.0.1/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: tags/2.0.1/doc/developer/hid_gtk3/gtk_hid_architecture.html =================================================================== --- tags/2.0.1/doc/developer/hid_gtk3/gtk_hid_architecture.html (nonexistent) +++ tags/2.0.1/doc/developer/hid_gtk3/gtk_hid_architecture.html (revision 18980) @@ -0,0 +1,336 @@ + + + +GTK HID architecture + + +