Index: 2.1.1/AUTHORS =================================================================== --- 2.1.1/AUTHORS (nonexistent) +++ 2.1.1/AUTHORS (revision 23085) @@ -0,0 +1,12 @@ +pcb-rnd maintainer: Tibor 'Igor2' Palinkas +contact: http://repo.hu/projects/pcb-rnd/contact.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: 2.1.1/COPYING =================================================================== --- 2.1.1/COPYING (nonexistent) +++ 2.1.1/COPYING (revision 23085) @@ -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: 2.1.1/Changelog =================================================================== --- 2.1.1/Changelog (nonexistent) +++ 2.1.1/Changelog (revision 23085) @@ -0,0 +1,639 @@ +pcb-rnd 2.1.1 (r23079) +~~~~~~~~~~~~~~~~~~~~~~ + [portability] + -Change: #warnings translated to TODO() for portability + + [boardflip] + -Del: remove the plugin - mirror functionality already implemented in core, wrapper action moved to core + + [calay] + -Add: plugin for importing calay netlists + -Add: import menu item for calay netlist + + [cam] + -Cleanup: remove excess memory allocation on default output file name derivation + -Cleanup: default file name derivation does not need to remember the last set file name, this should be handled centrally later on + -Fix: missing else blocked purpose supplement to be interpreted + + [color] + -Add: centralize color parsing and handling + + [core] + -Fix: draw: expose_begin() and expose_end() needs to save all gc's as well else nested calls will result in NULL gcs after the first end() + -Fix: do not block-select invisible padstacks - a padstack is considered visible only if either the padstack virtual layer or the hole virtual layer is on + -Fix: mem handling error: do not free the memory passed to object change name, it would result in invalid name saved with the object + -Fix: freeze undo for mirroring subc data and buffer data as they should not be on undo list on per object basis + -Fix: arc hash and eq start angles for side-mirror + -Fix: properly combine transformation rotation angle and transformation side mirror for arc start angle hash and eq + -Fix: box selection should be triggered only if there is a valid box (box is in the second state); fixes: random right click selections + -Del: old CreateMenu() syntax with 6+ arguments + -Del: do not use hid->show_item, call the pinout() action from Display(pinout) + -Cleanup: remove alignment_distance conf node - nothing uses it + -Add: Select(invert) - invert selection (common function in vector graphic tools) + -Add: --dump-version and DumpVersion() - script parsable version query + -Add: idpath API to remember object IDs recursively through subcircuits + -Add: optional, caller specified transformations in expose-all + -Add: API for drawing layers with color fade + -Add: pcb-printf %mN takes the unit set by %m+ and uses it without any modification or override + -Add: config node to change layer group rendering: any other-group layers are rendered with the invisible objects color + -Add: config node and rendering mod for black_current_group option (high contrast rendering) + -Add: text: hash and eq rot degree, font ID and thickness + + [dad] + -Change: DAD dialogs need to use explicit close buttons - implicit per hid buttons are all removed + -Add: new widgets: picture, picture button, color picker, text edit + -Add: API: default/starting window size hint (optional) + + [dialogs] + -Fix: the new export dialog copies back the current attribute values from the dialog to exporter data after the dialog is closed - preserves users settings, but also fixes the memory handling error after export file name modification + -Fix: export dialog and flag dialog content can grow and fill available screen space + -Fix: PromptFor(): escape or WM close won't return the new string but an error so cancel is not confused with ok + -Change: new layer property dialog and layer group property dialog with DAD and add close buttons + -Move: plugins dialog from core to the dialogs plugin + -Add: PrintGUI - generalize the export dialog so it can list printers + -Add: GUI support for shape swap in the padstack editor dialog + -Add: padstack proto edit dialog inidicates with parenthesis and tooltip text if a layer is not available + -Add: padstack editor: button for duplicating the prototype (to detach) + -Add: dup proto button in pstk lib dialog + -Add: local config for window placement + -Add: default window size for layer binding dialogs + -Add: pressing enter on the PromptFor() entry closes the dialog + -Add: fallback color pick implementation + -Add: generic viewlist + -Add: new, HID-agnostic pinout dialog with extra pin ID features + -Add: preferences dialog: config tree view tab + -Add: preferences dialog: color tab content + + [doc] + -Del: all references to GPMI + -Del: gtk3: preferences dialog - not gtk-specific anymore + -Fix: plugin dev: conf inclusion needs one more tmpasm line + -Change: rewrite the action doc for Print() - we can now have multiple printer plugins + -Add: motivation: log slots and mech/doc layers + -Add: link the conf system from the doc index + + [drc] + -Cleanup: don't use global var to pass object to append in violation + -Del: remove the old, gtk-only drc dialog + -Split: old DRC algo: monolithic logics into shorter functions + -Add: new, view list based DRC dialog + -Add: extend the poly plow callback with a void * user data so that callbacks can have a context + -Add: remember 2 groups of offending objects per drc violation (red and blue groups) + -Add: introduce generic drc API/infra, decouple the old DRC algo from the GUI + -Add: DRC check: object-beyond-drawing-area + -Add: progress bar while running the old DRC algo + + [export_png] + -Add: set DPI on bitmap export + + [export_ps] + -Del: ps_bloat - use CAM layer transformations instead + -Fix: don't print implicit outline layer on all layers unless it is explicitly requested by the user + -Fix: wrong help text for drill helper + -Add: --drill-helper-size to force a specific diameter for all drilled hole when--drill-helper is set + + [export_stat] + -Fix: board size and area are calculated from the data width/height, not the drawing area's, when there's an explicit outline + -Fix: don't export empty board id as (null) but as empty string + + [export_xy] + -Fix: use %mN to make sure decimil and centimil are not converted + -Add: rewrite the pnp-origin find code so that it works with any object type + + [extedit] + -Fix: allow editing the external editor command + -Fix: use pclose() for popen() + + [find] + -Fix: netlist find/select should work by net name + -Fix: use the event system to run the drc, don't use direct function call as the drc is implemented in (potentially multiple) plugin(s) + -Cleanup: simplify internal DRCFind() API: no need to pass legacy type/ptr1/ptr2/ptr3 + -Change: rewrite the search algorithm and APIs + -Move: split/move export code for the old connection format from core into a new plugin: export_oldconn + -Add: use dynamically allocated flags for internal marking (instead of abusing global/static flags) + + [flag] + -Add: dynamic object flags for algoritmic uses + + [fp_fs] + -Fix: invalid memory handling (read beyond end of the string) on search path append + + [fungw] + -Fix: simplified action call wrapper returns -1 if result can not be converted to int + -Add: action name but binary args call shortcut + + [gpmi] + -Del: please use fungw instead + + [gsch2pcb-rnd] + -Fix: potential buffer overrun + + [gtk] + -Fix: print coords for parametric footprints only in sane units + -Del: get rid of the EditLayerGroups action (centralized) + -Del: get rid of wt preview kinds - there is only one kind, the generic one + -Del: get rid of local vertical and horizontal compactness config node, use the new, central node: appearance/compact + -Del: old, gtk-only preferences dialog + -Cleanup: netlist dialog: code dup on select/find button - rather use the action + -Update: DoWindow(preferences) throws a warning instead of invoking the old preferences + -Change: switch over from old, gtk-only window placement code to new, centralized code from the dialogs plugin + -Change: the old library dialog uses generic preview instead of pinout-specific preview + -Add: implement the clipboard API + + [hid] + -Del: report_dialog API - use DAD instead + -Del: remove unused API "can_mask_clear_rats" - got irrelevant with composite rendering + -Del: block hook API - nothing used it, there is no provision of ever using it + -Del: remove lesstif-only ConfirmAction (there's a generic action for this now: MessageBox) + -Del: old, per hid print action - already reimplemented using DAD as PrintGUI() in dialogs + -Cleanup: API CHANGE: remove confirm dialog and close confirm dialog API - reimplemented with DAD, no need for each HID to duplicate that code + -Add: clipboard API + -Add: rewrite the fontsel dialog using DAD + -Add: generic, DAD based user input dialog box to replace the per hid implementation + -Add: new, generic message box to replace the per HID implementation + -Add: DAD based progress bar dialog to replace the per HID implementation + -Add: make hid iteration API explicit instead of burried in the progress bar widget update + -Add: central Print() action that wraps the GUI action or throws a warning on CLI + -Add: centralize and unify window placement infra + + [hid_gtk2_gl] + -Fix: pcb_color_t mishandling + + [import_ttf] + -Update: #includes for latest scconfig and devuan's setup where there's no freetype2/freetype/*.h only freetype2/*.h + + [io] + -Add: "type" parameter in save incompatibility call to make the API compatible with pcb_view_t + -Add: when enabled and available, display io incompatibility in a view list instead of dumping logs + -Add: make io incompatibility view list dialog style (list vs. simple) configurable + -Add: do not automatically print the incompatibility list in quiet mode on CLI + + [io_eagle] + -Fix: read unsigned bitfield, not integer, from binary layer block + -Fix: fix PCB_MESSAGE format followed by hard fail on invalid layer number + -Fix: make eagle binary derived linetype attribute clearer and more explicit + -Fix: refined errors messages relating to failure to retrieve layer numbers + -Fix: bump bbox for all vertices of binary polygons, not every second vertex + -Fix: read binary arc bytes as bitfields, extract clockwise flags, and apply sign flags as required + -Fix: signed 3 byte coordinate reads from binary arc and wire blocks defining arcs now read properly + -Fix: negative flags now being properly applied to calculated arc centre, and arc stop-start coords + + [io_lihata] + -Fix: reading a board without silk layers is not an error above v1 + -Fix: do not write v1 board if top or bottom silk is missing + -Fix: break parsing and return error on broken embedded font + -Optimization: calculate the silk ordering on write only for lihata v1 - new versions of the format don't need this hack and ignored the result + + [io_pcb] + -Fix: when creating two initial layers for an element load, set them up properly (making them bound, silk and parent pointing to data) + -Fix: do not mess with the board layers when element is loaded as pcb - the layers are already set up properly + -Fix: incompat warning desc param mixup and unnecessary newline + -Fix: don't throw top silk layer warning for bottom silk if the subc is on the bottom side + -Fix: save elements and pads with the onsolder flag if they are on the bottom side + -Change: allow padstacks to have the onsolder flag in compatibility mode + + [io_tedax] + -Fix: plugin classification: it's a full IO plugin, not an import plugin + -Add: code for saving and loading: stackup, layer, netlist, drc and board + + [layer] + -Fix: search.c won't assume existing silk layers anymore + -Fix: make sure layer bound fields are empty when creating layer binding from real layers to avoid segfaults on uninitialized fields later + -Del: do not assert on existing top/bottom silk, they are not mandatory anymore + -Del: protection mechanism that wouldn't let users to remove top/bottom silk - they are safe to remove now + -Cleanup: memory leak on layer del: free fields + -Cleanup: rename layer free to layer free fields as it does not free the layer pointer + + [lesstif] + -Fix: don't use strcasecmp() because of portability + -Fix: process events in progress bar busy loop (for cancel) + -Fix: use a label box (hbox) for better alignment of old style attribute dialogs - fixes export dialog too large + -Fix: invalid memory write after WM close of DAD dialogs in lesstif + -Del: get rid of EditLayerGroups and the local csect preview + -Del: custom preview code for csect - we need only the generic preview for DAD now + -Del: local net find/select algo in the netlist window, in favor of the central algo + -Cleanup: use a much simpler call to create attribute dialogs: no need for implicit buttons anyway + -Add: window placement for the library, netlist and log window + + [pcblib] + -Fix: parametric footprint: wrong conversion of cmil and dmil to mil + -Fix: parametric footprint: convert default parameter dims even if they are not mm or mil but some other unit + -Fix: help text override for the local defautls in *sop() + -Fix: so() and its derivatives should list pin_* params in the help - they have no pins at all + -Fix: do convert explicit mil value coord properly even if there's no mil fallback + -Add: help text extraction: default value override + + [propedit] + -Fix: propedit menu actions: do not mess with selection, use the new scope syntax + -Add: new, non-modal, HID-agnostic DAD dialog for propedit + -Add: use a tree for properties instead of a flat list + -Add: scoping: specific objects (by ID), all selected objects, layer, layer group, board + + [pstk] + -Fix: corner case: hole is always thru-hole if there's no top or bottom copper layer, because we'd count from those + -Fix: respect override color on rendering + -Fix: hash eq/compare bugs on rot angle and mirror + -Add: new color config nodes for non-current layer padstack color, one for terminals and one for non-terminals ("vias") - these are used instead of the invisible color + + [query] + -Fix: duplicated clearance value for line and arc query access + -Add: return polygon clearance if poly-clears-poly flag is set + + [report] + -Del: use DAD instead of the report_dialog API of HID + -Add: Report(netlength) uses the new find API + + [menu] + -Fix: make refdes-only subc ID display more explicit and add an user defined fallback menu item + -Update: layer group edit brings up the new preferences window instead of the old + -Add: change font in text object context menu + -Add: menu items for rendering overrides: black current group and invis other groups + + [scconfig] + -Fix: loud error for unknown --buildin + -Fix: "recursive" dep resolver so that hid -> dialogs -> fontsel dep chain does the right thing + -Add: detect _Pragma(message) and prepare for replacing #warnings + -Add: need to detect gdImageSetResoltuion() as some versions of gd doesn't have it + -Fix: use --disable instead of --Disable for internal feature disabling - it is case sensitive + -Del: references to retired plugin nelma + -Fix: when glib is not available, disable gtk using the right flags + -Add: ./configure --man1dir can change manual page path to non-FHS + -Fix: do not disable lib_gtk_config - it's long gone + + [shape] + -Add: per corner control of round rect generation + -Add: resolution factor for rounding arc to make round corner arc emulation use less or more segments + + [subc] + -Fix: rounding trick so that rotation angles that are supposed to be round are got back as round + -Fix: negating host trans should negate the sin/cos calc too + -Fix: coord hasher assumes negated host trans + -Fix: angle hasher assumes negative transformation + -Add: extend subc host transformation readout with an option t return the negative transformation + -Add: make automatic refdes text on subc conversion configurable (and optional) + +pcb-rnd 2.1.0 (r21060) +~~~~~~~~~~~~~~~~~~~~~~ + [act_draw] + -Add: new plugin to host basic drawing actions: LineNew, ArcNew, TextNew, PstkNew, polygon creation + + [ar_cpcb] + -Add: import/export/autoroute plugin for external auto-router c-pcb + + [asm] + -Add: hand assembly helper plugin + + [cam] + -Add: parse supplements: purpose field, transformations + + [conf] + -Fix: ignore rc/library_shell from board and project fields - might be unsafe + -Fix: ignore all command conf nodes from unsafe sources while doing a conf merge instead of waiting until popen() - this way valid values from safe sources are not masked + + [core] + -Fix: ChkView() action shall return the state value properly for named virtual layers + -Fix: arc remove op: do not clear the parent field before unregistering the arc - arc unreg will do it anyway + -Fix: call end_layer for each set_layer in board boundary draw + -Fix: do not let empty-bbox footprints load as board to avoid a slowdown/crash + -Fix: don't crash when the rat code announces a short circuit for an unknown net + -Fix: file name pattern subs: shorter name that also includes PCB for anonymous files in %F + -Fix: heavy terminal poly color mixup on HIDs that turned off layer indication gfx + -Fix: initialize all fields of dummy text object before drawing in drawing stub error message + -Fix: keep side flip operations together in the same serial group of undo + -Fix: make text thickness change operation undoable + -Fix: pcb_backup() should always use the same, configured pattern, which should have the file name and the PID to minimize the chance of accidental overwrite of backup files + -Fix: refuse to execute on-selected operations on objects that are locked + -Fix: search_data_by_loc return value when nothing matched + -Fix: search_data_by_loc shouldn't pass object as const, the callback may need to change the object + -Fix: survive nonexisting silk layers in draw (silk color determination is optional) + -Fix: use the layer recipe for unbound subc layers to avoid a crash on NULL layer ptr + -Fix: wrong plug footprint temp var initialization (potential buffer overrun) + -Fix: don't throw error on font load cancel + -Fix: when destroying font with arcs in it, do not unreg the arcs, they are not registered + -Del: no need to pass layer pointer to many object draw functions + -Change: CreateMenu(): new, simplified syntax (plus compatibility with the old syntax for now) + -Change: off-limits default color is a bit darker so that holes and slots stick out more + -Change: the lock tool uses the log through Report() instead of spamming the desktop with popups + -Cleanup: data init/new and uninit/free terminology: free should free the pointer + -Cleanup: remove CamelCase from draw code + -Cleanup: remove CursorX, CursorY and Zoom from the board struct - these are not board specific properties but GUI/editor specific ones + -Add: 'quiet' option in path resolve to suppress error log for the case the caller checks the result and handles broken substs + -Add: -x -list- prints a script readable list of export plugins + -Add: NewGroup() accepts a 4th argument to set the comb bits of the new layer + -Add: bump default2.lht to v6 and add mech layers + -Add: bump default4.lht to v6 and add mech layers + -Add: change refdes action and menu - change name too often picks up the wrong object + -Add: check hid_conf registration leftovers on uninit, in debug mode + -Add: extend MoveLayer() so it can be used to move a layer into a different group from CLI + -Add: gettimeofday() wrapper to fix a compilation bug on IRIX + -Add: give the caller a chance to set rat id on creation + -Add: helper code for generic 2d transformation matrices + -Add: id->obj hash in data + -Add: new standard object call: reg/unreg for ID administration + -Add: pass an extended draw info structure from the top of drawing requests all way through the recursion to the bottom calls; this will help injecting object rendering transformations + -Add: pstk creation gets an optional id (that will let io_lihata enforce id on pads later) + -Add: silently ignore the "connected" flag (it is not supported) + -Add: simplified text render call API - to be used with preview widget drawing + -Add: standard obj call: text/poly pre/post + -Add: config setting for using basename of the board in export files comments/headers instead of the full path (to fix path leaking) + + [dad] + -Fix: memory leak: free all fields of a dialog, not only the last + -Fix: tolerate NULL pointer in preview free callbacks + -Fix: autorun didn't deliver the return value so it was impossible to detect a cancel + -Add: tree-table widget: API + -Add: tree-table widget: gtk implementation + -Add: progress bar widget: API + -Add: progress bar widget: gtk and lesstif implementation + -Add: hpane and vpane widget: API + -Add: hpane and vpane widget: gtk and lesstif implementation + -Add: preview widget: API + -Add: preview widget: gtk implementation + -Add: dad() action + -Add: scripted dialogs: free tree table rows + + [diag] + -Fix: data integrity: rewrite checks from LYT_OUTLINE to LYT_BOUNDARY + -Fix: data integrity: considers global rat lines + -Add: data integrity: check for the new ID hash + -Add: data integrity: check for layer->group->layer links + -Add: data integrity: test for duplicate layer entry in group and for group->layer->group links + + [dialogs] + -Fix: make it clear that group edit is about not logical, but physical layers + -Fix: padstack edit shall allow setting hole dia to 0, that's how hole is removed + -Fix: when regenerating the padstack shape, invalidate the drawing so the new shape shows up + -Fix: padstack editor doesn't silently ignore unknown shapes layer types, but throw an error + -Rename: layer and group GUI editing is not only about flags, rename the actions to be more clear about the purpose + -Add: undo dialog + -Add: 'change type' combo box in the group type/name dialog + -Add: support for layer group location change from the GUI + -Add: layer group flags dialog: purpose field, location field + -Add: purpose field in layer bindings + -Add: new pinout dialog + -Add: pstklib: padstack library dialog, with preview + -Add: padstack dialog: the prototype button invokes the pstklib dialog for selecting a new proto + + [doc] + -Fix: some layer groups are 'maybe' for compositing + -Fix: lesstif SwapSides should have S mentioned in the syntax + -Fix: internal units is not 1/100 mil anymore + -Update: edit and update acompnet content + -Update: bridges: add xschem and c-pcb + -Update: mark gpmi deprecated + -Del: remove nelma (plugin retired) + -Del: old shorthand command summary from the code - don't advertise these actions + -Move: action doc moved from code to doc action appendix (and script that generates the output doc and links) + -Add: lihata v6 change log + -Add: lihata board format spec: explain that padstack shape layer mask needs to contain no more than 1 location bits + -Add: new terminology: the "main type" of layer groups + -Add: actions are sorted and dedup'd in the appendix + -Add: cam layer supplements + -Add: coralEDA link in index + -Add: eagle and protel compatibility on main page + -Add: Mageia and Fedora have official package + -Add: FAQ + -Add: FAQ entry for dsn missing holes on import + -Add: FAQ entries on DSN import vs. silk, mask and paste + -Add: developer doc: object API: document reg/unreg, pre/post API + -Add: rosetta: DAD examples + -Add: explain what a pup file is for + -Add: developer doc: detailed description of the basic infra of a plugin + -Add: document geda/pcb format extensions + -Add: extend the datasheet with data model points + -Add: Zoom() doc with selected and found + -Add: document the purpose of CycleDrag() + -Add: scripting: document AddTimer() + -Add: scripting: LoadScript(), UnloadScript(), ReloadScript() and ListScripts() + -Add: scripting: ScriptPersistency() and script action preunload() + -Add: scripting: Oneliner() + -Add: DAD documentation + + [export_gerber] + -Fix: handle multiple outline layers + -Fix: drill file end marker is M30 + -Workaround: OSHpark import doesn't take G00 in separate line + -Add: support for drilled (G85) slots and routed (G00) slots + + [export_png] + -Fix: more robust outline coord cheat for working around gd's broken line clipping + -Fix: workaround on alpha+photomode if the core sets the boundary layer twice (when mech layers are missing) + -Fix: multi-step outline draw: let all layer groups be drawn + -Change: draw rectangles by drawing lines to guarantee the right brush + -Change: mark png-bloat obsolete (use cam transformations instead) + + [export_ps] + -Fix: handle multiple route layers + -Fix: more robust and efficient way to determine if there's explicit outline + -Fix: reproduce the implicit outline using the same line width that draw.c in core does + -Change: mark ps-bloat obsolete - use cam layer transformations instead + + [export_stat] + -Fix: when deciding if a subc is smd or not, count slots for through-hole + -Add: upgrade for counting slots + + [export_svg] + -Fix: don't write the group of empty layers + + [gsch2pcb-rnd] + -Fix: -q inhibits printing the instructions and the no-method-specified warning + + [gtk] + -Fix: key presses doesn't mean the cursor has entered the view - fixes bug: getxy returned valid-looking coords instead of asking the user if there was no crosshair but keyboard input + -Fix: use all screen space for the command entry + -Fix: the print dialog needs to get the gtk common struct instead of topwin because of the preview API + -Fix: old pinout preview should call the new zoomto API to get the footprint zoomed + -Fix: set definite drawing area size for the font selector + -Fix: preview: set initial size request and canvas size of pinout windows so the zoom logics can calculate the initial zoom level + -Fix: library preview: more accurate initial zoom with all floaters included + -Fix: when setting up the preview widget for csect, set default width and height so that zoomto does the right thing (fixes: graphics does not appear) + -Fix: apply horizontal and vertical compactness from conf change events, not hardwired calls from gui config so direct conf change is applied too + -Fix: DAD: when creating a new box for a frame (requested in flags), respect the EXPFILL flag + -Fix: DAD: if caller's close callback destroys the modal dialog, make sure the original response (wheter it was ok or cancel) is preserved and returned + -Fix: apply xoffs/yoffs margin correction to layer previews as well + -Fix: preview popup is on the right click (in-line with the default menu config) + -Fix: proper rounding in screen<->coord conversion (fixes the slipping tab bug) + -Fix: after entering a new value, even if with new unit, preserve the text, don't overwrite it with canonical form until it's necessary (for stepping or clamping) + -Change: split the layer selector widget to have a separate section for in-stack and out-of-stack layers + -Change: replace local cli history implementation with the central one from lib_hid_common + -Change: tune status line print: use shorter bolds to decrease horizontal size + -Cleanup: CLI's main loop is in the context, not a global var + -Del: remove the separate command window entry - does not play well together with the new CLI ideas, doesn't fit in the unified GUI approach and didn't seem to get much use anyway + -Del: route style dialog: no 'save style as default' any more: route style is not in the config, the default board should be edited + -Del: text direction from the advanced search dialog + -Del: bu_notebook and framed notebook page builder: no code uses it + -Add: advanced search tabs: rotation and thickness text fields are available in query() + -Add: advanced search: tab entry for host layer's purpose + -Add: resize grip on top window + -Add: route style dialog: entry to text thickness + -Add: route style dialog has a text scale entry + -Add: new, more generic preview widget API, compatible with the DAD idea + -Add: on top win close, close the command entry first, as it has its own main loop that can block everything - fixes bug: can't exit while command entry is open + + [hid] + -Change: API CHANGE: pass on purpose and purpi to layer group set so that decisions can be made based on subtype of mech/doc layers later + -Change: API CHANGE: pass on editable "caller xform" struct pointer to the set layer API so exporters can configure the core to do transformations on drawing + -Fix: give control to the HIDs about whether heavy term layer indication gfx shall be drawn or not + -Add: remove menu by cookie if not by path + -Add: cli central history API + + [hid_gtk2_gl] + -Fix: do not draw the crosshair if the cursor is not in the drawing area (follow lesstif and gtk2+gdk on this) + + [hid_gtk3_cairo] + -Fix: do not draw the crosshair if mouse cursor is not in the drawing area (unify behavior across HIDs - untested) + + [hid_lesstif] + -Fix: typo in action handling code made zoom() (a.k.a. zoom extent) a syntax error + -Fix: lesstif Zoom() must do the same as gtk Zoom() + -Add: load/save/append to the central command line history + + [io_dsn] + -Add: full board parse/load + + [io_kicad] + -Fix: fp_circle is a 360 degree arc + + [io_kicad_legacy] + -Fix: scaling of exported legacy module library fixed, and integer decidegree pad rotations enforced + + [io_lihata] + -Fix: don't attempt to fix up the outline layers if there's no board (subc loaded) + -Fix: properly return NULL for failed padstack write + -Fix: warn for saving text thickness in route style only under v6 + -Fix: create polygon with the right ID on load + -Fix: load lines, rats, arcs, text, padstacks, and subcircuits with the right ID, create them only with the right ID + -Fix: warn for empty layer type in padstack proto shape on load + -Fix: when saving padtsacks with slot to lihata v5, do not save the slot shape with empty layer type but omit it - causes less confusion and on broken files + -Del: 'no_id' from parse_line(): we always need to have an ID because of the ID registration + -Change: do not save layer visibility bit in v6, warn when it is loaded from v6 + -Add: lihata board format version 6, for supporting new layers types and slots, new text props + -Add: when loading pre-v6 lihata, make sure the outline layer's comb is marked 'auto' + -Add: save noshape thermal as an explicit flag from v6 up + + [io_pcb] + -Fix: recover from broken group string - create intern copper layer for any layer that is not referenced from the group string + -Fix: do poly clipping only once during load - shorter load times + -Fix: do not save duplicate element attributes (footprint, value and refdes - they are saved as property in this old format) + -Fix: do not lose multiple special layers on load, even tho only the first one is placed in the right group + -Del: pcb format documentation from the .y file - pcb-rnd should not attempt to document alien formats, we should leave this task to the maintainer of the format (geda/pcb in this case) + -Add: warn the user when saving a NetListPatch - geda/pcb won't like it + -Add: fix up broken (unlinked) outline layers after load (it's probably pstoedit that generates such files) + + [layer] + -API CHANGE: creating a new bound layer gets a purpose string + -Fix: whether the implicit outline layer needs to be drawn does not depend on how many outline objects got draw, but really depends on how many outline objects there were on those layers + -Fix: when fixing up outline layer (e.g. after loading from old file formats), set the auto comb flag on the layers (to allow padstack use) + -Fix: ask the hid whether plated and unplated slots should be drawn only if they exist + -Fix: when creating real layers for bound layers, set new layer's object type to PCB_OBJ_LAYER + -Fix: #tbs: do not let the user remove top/bottom silk groups (temporary workaround) + -Del: PCB_LYT_ASSY, PCB_LYT_FAB, PCB_LYT_CSECT - use the purpose field instead + -Del: PCB_LYT_UDRILL and PCB_LYT_PDRILL - use the purpose field instead + -Del: PCB_LYT_OUTLINE - use BOUNDARY and purpose + -Change: side-based silk+doc layer rendering to make sure about layer order; properly draw global doc layers (between intern and current-side doc layers) + -Add: DOC and MECH layer types + -Add: purpose field + -Add: draw mech layers together with boundary layers, at the end + -Add: when drawing boundaries and mech layers, pick best candidate for unplated and plated slots + -Add: NewGroup() action for making it easy creating new layers from the menu (with context menu) + -Add: DupGroup(): new action and menu item for duplicating a layer group + + [nelma] + -Del: retire the plugin - upstream stopped maintenance and there was no user either (openems and other sims will take the role) + + [oldactions] + -Del: Return() - something we never used + + [polygon] + -Fix: rewrite the polygon offset code based on the colinear-corner-shift idea to avoid line-line intersections + -Fix: when a layer is moved to a different group, reclip all polygons of the layer automatically + -Change: expose the API of polygon offset low level - to be reused by padstacks + -Add: polygon offset cache normal vector calculator + -Add: draw_info bloat transformation works on polygons + + [propedit] + -Fix: use the undoable text rotation change API + -Del: text direction - use text rotation instead + -Change: rename text rotation to direction to match the code and make room for real rotation + -Add: code for handling text thickness and partial code for handling text rotation + -Add: layer group purpose field + -Add: missing code for removing attributes from board + + [pstk] + -Fix: use ortho-grow for padstack shape offseting for more accurate results of derive/grow/shrink + -Fix: do not crash if prototype is empty + -Fix: missing 'else' made wireframe/thin draw poly shape filled + -Fix: throw a loud error when a padstack with empty shape layer is broken up + -Add: no-thermal clearance for hshadow should trace the hole or slot shape + -Add: slot support: convert to pstk: accept one boundary or mech layer for slot + -Add: hshadow support (special shape for clearance around the hole, without copper) + -Add: low level pcb_pstk_shape_at_() that can be forced to return the shape even if thermal is NOSHAPE + -Add: padstack draw respects the noshape thermal and inhibits drawing + -Add: the thermal tool cycles through the no-shape bit now + -Add: special treatment of off-board padstacks: do not clip or undo + -Add: low level proto call for replacing the geometry in-place, without creating a new proto + -Add: utility function to count prototype usage under data + -Add: utility function for removing a padstack prototype + + [query] + -Change: rename text rotation to text direction to make room for the real rot field + -Cleanup: layer is a searchable object now, let the low level code search/list layers, but disable it from high level for now to keep compatibility + -Add: support for text rot and thickness + -Add: access layer purpose (group's purpose) + + [res/menu] + -Fix: editing layer or layer group properties should unselect all so nothing else is edited + -Del: mnemonics from the menu files (for HID API simplification) + -Change: better key binding for the plugin management dialog: {p m p} + -Add: integrity check in the maintenance menu + -Add: change refdes submenu in subc context menu + -Add: dedicated submenu for user scripts + -Add: subc layer binding in the subc context popup menu + + [tests/rtt] + -Fix: unify how pcb-rnd is executed; proper from-src-dir execution + -Fix: use basename in ps/eps export to get reproducible output + -Add: slot/mech example + -Add: visual compare script, format-independent + -Add: valgrind flags: detect memory leaks + + [rubberband_orig] + -Fix: rat line connected to multiple terminals on the same coord would move the rat endpoint multiple times when the subc is moved + -Update: moving a line with rubberband will remain connected to arcs by inserting a new route. + -Update: Moving a line point that is connected to an arc will insert a new route to ensure that the arc remains connected. + + [scale] + -Add: low level: text, arc, poly, line, padstack scaling + -Add: pcb_data_t and buffer scaler functions + -Add: ScaleBuffer() action + + [scconfig] + -Fix: stroke: insert the internal conf file to DEPDEP so make dep runs even when stroke is disabled + -Fix: cam, export_xy, fp_wget: explain enough of the internal conf so make dep works even if they are disabled + -Fix: remove --with-intl - it can render pcb-rnd unusable while we don't really have support for non-english locales + -Fix: detect popen(), missing popen is fatal (make the dependency explicit) + -Change: centralize the plugin internal conf mechanism + -Add: detect SIGPIPE and if present, set it to ignore to avoid external programs to exit pcb-rnd + + [script] + -Add: fungw engine (glue code) for "scripting" in C + -Add: Zoom(get) - useful for scripts + -Add: action AddTimer() and a minimalistic timer implementation + -Add: script data persistency: action for reloading and removing data + -Add: dialog frame for a script dialog + + [subc] + -Fix: do not change the subc pointer when moving to other side, rather do it in-place so pointers are not messed up (as reported by celem with autoplace) + -Fix: preview displays terminal labels when enabled + -Fix: when drawing preview do not draw the label of non-owned terminals + -Fix: memory leak on subc-in-buffer breakup + -Fix: subc dup needs to set layer struct type to PCB_OBJ_LAYER else the object is broken + -Fix: do not double-unreg objects on subc destroy (caused asserts on undo) + -Fix: display subc ID (red subc marking overlay) even if refdes is NULL - what we display is configurable and may differ from the refdes + -Fix: side flip: put only the subc flip on the undo list, not each subc part's flip, to avoid double-flip attempt on undo + + [text] + -Add: text string render: use transformation matrix instead of manual transformation calculations (preparing for arbitrary angle rotation) + -Add: buffer free rotation: also rotate text + -Add: user selectable text thickness + -Change: io_lihata saves only rot, not direction from v6 Index: 2.1.1/Changelog.1.0.x.gz =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: 2.1.1/Changelog.1.0.x.gz =================================================================== --- 2.1.1/Changelog.1.0.x.gz (nonexistent) +++ 2.1.1/Changelog.1.0.x.gz (revision 23085) Property changes on: 2.1.1/Changelog.1.0.x.gz ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: 2.1.1/Changelog.1.1.x.gz =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: 2.1.1/Changelog.1.1.x.gz =================================================================== --- 2.1.1/Changelog.1.1.x.gz (nonexistent) +++ 2.1.1/Changelog.1.1.x.gz (revision 23085) Property changes on: 2.1.1/Changelog.1.1.x.gz ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: 2.1.1/Changelog.1.2.x.gz =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: 2.1.1/Changelog.1.2.x.gz =================================================================== --- 2.1.1/Changelog.1.2.x.gz (nonexistent) +++ 2.1.1/Changelog.1.2.x.gz (revision 23085) Property changes on: 2.1.1/Changelog.1.2.x.gz ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: 2.1.1/Changelog.2.0.x.gz =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: 2.1.1/Changelog.2.0.x.gz =================================================================== --- 2.1.1/Changelog.2.0.x.gz (nonexistent) +++ 2.1.1/Changelog.2.0.x.gz (revision 23085) Property changes on: 2.1.1/Changelog.2.0.x.gz ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: 2.1.1/INSTALL =================================================================== --- 2.1.1/INSTALL (nonexistent) +++ 2.1.1/INSTALL (revision 23085) @@ -0,0 +1,70 @@ +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 + - optional: gtkglext if you need opengl rendering + - optional: motif or lesstif if you are using the lesstif frontend + - optional: gdlib if you are using the png HID + +For developers: + - flex + - bison + Index: 2.1.1/Makefile =================================================================== --- 2.1.1/Makefile (nonexistent) +++ 2.1.1/Makefile (revision 23085) @@ -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: 2.1.1/Makefile.conf.in =================================================================== --- 2.1.1/Makefile.conf.in (nonexistent) +++ 2.1.1/Makefile.conf.in (revision 23085) @@ -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@@/local/man1dir@ +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: 2.1.1/README =================================================================== --- 2.1.1/README (nonexistent) +++ 2.1.1/README (revision 23085) @@ -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: http://repo.hu/projects/pcb-rnd/contact.html + 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: 2.1.1/Release_notes =================================================================== --- 2.1.1/Release_notes (nonexistent) +++ 2.1.1/Release_notes (revision 23085) @@ -0,0 +1,45 @@ +pcb-rnd 2.1.1 +~~~~~~~~~~~~~ + +This release is mainly a cleanup release: rewrite of some essential +infrastructure (find, drc) and extend the GUI APIs to provide better +user interface (around DRC and the preferences dialog). + +Major changes: + +1. find.c rewrite: smaller, slightly more efficient code with a simpler, +more versatile API. Does not mess with global/static object flags. + +2. DRC API rewrite: the algorithm is decoupled from how violations is stored +and from the GUI. There is a generic DRC infra and a generic GUI for +displaying the results, that can be driven by multiple different DRC algorithms. +The old DRC algorithm has been moved out to a plugin. + +3. DRC GUI rewrite: violations are presented as a tree, grouped by topic, so +it is easier to skip or focus on similar errors. The window layout follows +the library layout, with preview and filter. DRC preview colors offending +objects: there is a red and a blue group which makes it much easier to see +what exactly went wrong. Lesstif's interactive 'skip-through' DRC indication +is available as an option on GTK. + +4. View lists: under the DRC GUI there is a generic "view list" mechanism. +It remembers a list of board location (with zoom) and highlight objects. The +user can remove, add, copy, paste elements of the list. Lists can be saved to +file and loaded later. The same list display is now used to indicate +incompatibilities when saving in alien format. + +5. DAD upgrades: gtk-only dialogs are being rewritten with DAD, more and +more dialogs accessible in all HIDs (including lesstif). Introduced new +DAD widgets for this effort. + +6. The GTK-only preferences window got removed in favor of the new, +HID-agnostic preferences window. + +7. Major HID API cleanup: DAD allows a cleaner separation of feature code +into self contained plugins; the HID API should be as small as possible, +with generic features only. This makes it easier to write new HIDs. + + +Plans for the next release: + +Going on with the cleanups and similar minor features. Index: 2.1.1/config.h.in =================================================================== --- 2.1.1/config.h.in (nonexistent) +++ 2.1.1/config.h.in (revision 23085) @@ -0,0 +1,281 @@ +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/* Wether select() works */\n} +print_ternary ?libs/socket/select/presents {#define PCB_HAVE_SELECT 1} {/* #undef PCB_HAVE_SELECT */} + +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 `gdImageSetResolution' function. */\n} +print_ternary ?libs/gui/gd/gdImageSetResolution/presents {#define HAVE_GD_RESOLUTION 1} {/* #undef HAVE_GD_RESOLUTION */} + +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 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/SIGPIPE/presents {#define PCB_HAVE_SIGPIPE 1} {/* #undef PCB_HAVE_SIGPIPE */} +print {\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 {\n/* Code warnings for TODO, portable (unlike #warning) */} +if ?cc/pragma_message +then +print [@ +#define DO_PRAGMA(arg) _Pragma(#arg) +#define TODO(x) DO_PRAGMA(message("TODO: " #x)) +@] +else +print {\n/* Not available */\n#define TODO(x)\n} +end + +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: 2.1.1/configure =================================================================== --- 2.1.1/configure (nonexistent) +++ 2.1.1/configure (revision 23085) @@ -0,0 +1,4 @@ +#!/bin/sh +cd scconfig +make +./configure "$@" Property changes on: 2.1.1/configure ___________________________________________________________________ Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: 2.1.1/data/Makefile =================================================================== --- 2.1.1/data/Makefile (nonexistent) +++ 2.1.1/data/Makefile (revision 23085) @@ -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: 2.1.1/data/README =================================================================== --- 2.1.1/data/README (nonexistent) +++ 2.1.1/data/README (revision 23085) @@ -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: 2.1.1/data/application-x-excellon-16.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: 2.1.1/data/application-x-excellon-16.png =================================================================== --- 2.1.1/data/application-x-excellon-16.png (nonexistent) +++ 2.1.1/data/application-x-excellon-16.png (revision 23085) Property changes on: 2.1.1/data/application-x-excellon-16.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: 2.1.1/data/application-x-excellon-16.svg =================================================================== --- 2.1.1/data/application-x-excellon-16.svg (nonexistent) +++ 2.1.1/data/application-x-excellon-16.svg (revision 23085) @@ -0,0 +1,1271 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Excellon file + + + + + + + Peter Clifton, Jakub Steiner + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: 2.1.1/data/application-x-excellon-22.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: 2.1.1/data/application-x-excellon-22.png =================================================================== --- 2.1.1/data/application-x-excellon-22.png (nonexistent) +++ 2.1.1/data/application-x-excellon-22.png (revision 23085) Property changes on: 2.1.1/data/application-x-excellon-22.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: 2.1.1/data/application-x-excellon-22.svg =================================================================== --- 2.1.1/data/application-x-excellon-22.svg (nonexistent) +++ 2.1.1/data/application-x-excellon-22.svg (revision 23085) @@ -0,0 +1,1571 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Excellon file + + + + + + + Peter Clifton, Tomaz Solc, Jakub Steiner + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: 2.1.1/data/application-x-excellon-24.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: 2.1.1/data/application-x-excellon-24.png =================================================================== --- 2.1.1/data/application-x-excellon-24.png (nonexistent) +++ 2.1.1/data/application-x-excellon-24.png (revision 23085) Property changes on: 2.1.1/data/application-x-excellon-24.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: 2.1.1/data/application-x-excellon-32.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: 2.1.1/data/application-x-excellon-32.png =================================================================== --- 2.1.1/data/application-x-excellon-32.png (nonexistent) +++ 2.1.1/data/application-x-excellon-32.png (revision 23085) Property changes on: 2.1.1/data/application-x-excellon-32.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: 2.1.1/data/application-x-excellon-32.svg =================================================================== --- 2.1.1/data/application-x-excellon-32.svg (nonexistent) +++ 2.1.1/data/application-x-excellon-32.svg (revision 23085) @@ -0,0 +1,1406 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Excellon file + + + + + + + Peter Clifton, Tomaz Solc, Jakub Steiner + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: 2.1.1/data/application-x-excellon-48.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: 2.1.1/data/application-x-excellon-48.png =================================================================== --- 2.1.1/data/application-x-excellon-48.png (nonexistent) +++ 2.1.1/data/application-x-excellon-48.png (revision 23085) Property changes on: 2.1.1/data/application-x-excellon-48.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: 2.1.1/data/application-x-excellon-48.svg =================================================================== --- 2.1.1/data/application-x-excellon-48.svg (nonexistent) +++ 2.1.1/data/application-x-excellon-48.svg (revision 23085) @@ -0,0 +1,1283 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Excellon file + + + + + + + Peter Clifton, Tomaz Solc, Jakub Steiner + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: 2.1.1/data/application-x-excellon.svg =================================================================== --- 2.1.1/data/application-x-excellon.svg (nonexistent) +++ 2.1.1/data/application-x-excellon.svg (revision 23085) @@ -0,0 +1,1289 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Excellon file + + + + + + + Peter Clifton, Tomaz Solc, Jakub Steiner + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: 2.1.1/data/application-x-gerber-16.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: 2.1.1/data/application-x-gerber-16.png =================================================================== --- 2.1.1/data/application-x-gerber-16.png (nonexistent) +++ 2.1.1/data/application-x-gerber-16.png (revision 23085) Property changes on: 2.1.1/data/application-x-gerber-16.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: 2.1.1/data/application-x-gerber-16.svg =================================================================== --- 2.1.1/data/application-x-gerber-16.svg (nonexistent) +++ 2.1.1/data/application-x-gerber-16.svg (revision 23085) @@ -0,0 +1,543 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Gerber file + + + + + + + Peter Clifton, Tomaz Solc, Jakub Steiner + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: 2.1.1/data/application-x-gerber-22.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: 2.1.1/data/application-x-gerber-22.png =================================================================== --- 2.1.1/data/application-x-gerber-22.png (nonexistent) +++ 2.1.1/data/application-x-gerber-22.png (revision 23085) Property changes on: 2.1.1/data/application-x-gerber-22.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: 2.1.1/data/application-x-gerber-22.svg =================================================================== --- 2.1.1/data/application-x-gerber-22.svg (nonexistent) +++ 2.1.1/data/application-x-gerber-22.svg (revision 23085) @@ -0,0 +1,608 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Gerber file + + + + + + + Peter Clifton, Tomaz Solc, Jakub Steiner + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: 2.1.1/data/application-x-gerber-24.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: 2.1.1/data/application-x-gerber-24.png =================================================================== --- 2.1.1/data/application-x-gerber-24.png (nonexistent) +++ 2.1.1/data/application-x-gerber-24.png (revision 23085) Property changes on: 2.1.1/data/application-x-gerber-24.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: 2.1.1/data/application-x-gerber-32.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: 2.1.1/data/application-x-gerber-32.png =================================================================== --- 2.1.1/data/application-x-gerber-32.png (nonexistent) +++ 2.1.1/data/application-x-gerber-32.png (revision 23085) Property changes on: 2.1.1/data/application-x-gerber-32.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: 2.1.1/data/application-x-gerber-32.svg =================================================================== --- 2.1.1/data/application-x-gerber-32.svg (nonexistent) +++ 2.1.1/data/application-x-gerber-32.svg (revision 23085) @@ -0,0 +1,544 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Gerber file + + + + + + + Peter Clifton, Tomaz Solc, Jakub Steiner + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: 2.1.1/data/application-x-gerber-48.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: 2.1.1/data/application-x-gerber-48.png =================================================================== --- 2.1.1/data/application-x-gerber-48.png (nonexistent) +++ 2.1.1/data/application-x-gerber-48.png (revision 23085) Property changes on: 2.1.1/data/application-x-gerber-48.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: 2.1.1/data/application-x-gerber-48.svg =================================================================== --- 2.1.1/data/application-x-gerber-48.svg (nonexistent) +++ 2.1.1/data/application-x-gerber-48.svg (revision 23085) @@ -0,0 +1,707 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Gerber file + + + + + + + Peter Clifton, Tomaz Solc, Jakub Steiner + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: 2.1.1/data/application-x-gerber.svg =================================================================== --- 2.1.1/data/application-x-gerber.svg (nonexistent) +++ 2.1.1/data/application-x-gerber.svg (revision 23085) @@ -0,0 +1,712 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + Gerber file + + + + + + + Peter Clifton, Tomaz Solc, Jakub Steiner + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: 2.1.1/data/application-x-pcb-footprint-16.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: 2.1.1/data/application-x-pcb-footprint-16.png =================================================================== --- 2.1.1/data/application-x-pcb-footprint-16.png (nonexistent) +++ 2.1.1/data/application-x-pcb-footprint-16.png (revision 23085) Property changes on: 2.1.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: 2.1.1/data/application-x-pcb-footprint-16.svg =================================================================== --- 2.1.1/data/application-x-pcb-footprint-16.svg (nonexistent) +++ 2.1.1/data/application-x-pcb-footprint-16.svg (revision 23085) @@ -0,0 +1,554 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + PCB footprint + + + + + + + Peter Clifton, Jakub Steiner + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: 2.1.1/data/application-x-pcb-footprint-22.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: 2.1.1/data/application-x-pcb-footprint-22.png =================================================================== --- 2.1.1/data/application-x-pcb-footprint-22.png (nonexistent) +++ 2.1.1/data/application-x-pcb-footprint-22.png (revision 23085) Property changes on: 2.1.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: 2.1.1/data/application-x-pcb-footprint-22.svg =================================================================== --- 2.1.1/data/application-x-pcb-footprint-22.svg (nonexistent) +++ 2.1.1/data/application-x-pcb-footprint-22.svg (revision 23085) @@ -0,0 +1,573 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + PCB footprint + + + + + + + Peter Clifton, Jakub Steiner + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: 2.1.1/data/application-x-pcb-footprint-24.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: 2.1.1/data/application-x-pcb-footprint-24.png =================================================================== --- 2.1.1/data/application-x-pcb-footprint-24.png (nonexistent) +++ 2.1.1/data/application-x-pcb-footprint-24.png (revision 23085) Property changes on: 2.1.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: 2.1.1/data/application-x-pcb-footprint-32.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: 2.1.1/data/application-x-pcb-footprint-32.png =================================================================== --- 2.1.1/data/application-x-pcb-footprint-32.png (nonexistent) +++ 2.1.1/data/application-x-pcb-footprint-32.png (revision 23085) Property changes on: 2.1.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: 2.1.1/data/application-x-pcb-footprint-32.svg =================================================================== --- 2.1.1/data/application-x-pcb-footprint-32.svg (nonexistent) +++ 2.1.1/data/application-x-pcb-footprint-32.svg (revision 23085) @@ -0,0 +1,2302 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + PCB footprint + + + + + + + Peter Clifton, Jakub Steiner + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: 2.1.1/data/application-x-pcb-footprint-48.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: 2.1.1/data/application-x-pcb-footprint-48.png =================================================================== --- 2.1.1/data/application-x-pcb-footprint-48.png (nonexistent) +++ 2.1.1/data/application-x-pcb-footprint-48.png (revision 23085) Property changes on: 2.1.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: 2.1.1/data/application-x-pcb-footprint-48.svg =================================================================== --- 2.1.1/data/application-x-pcb-footprint-48.svg (nonexistent) +++ 2.1.1/data/application-x-pcb-footprint-48.svg (revision 23085) @@ -0,0 +1,674 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + PCB footprint + + + + + + + Peter Clifton, Jakub Steiner + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: 2.1.1/data/application-x-pcb-footprint.svg =================================================================== --- 2.1.1/data/application-x-pcb-footprint.svg (nonexistent) +++ 2.1.1/data/application-x-pcb-footprint.svg (revision 23085) @@ -0,0 +1,680 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + PCB footprint + + + + + + + Peter Clifton, Jakub Steiner + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: 2.1.1/data/application-x-pcb-layout-16.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: 2.1.1/data/application-x-pcb-layout-16.png =================================================================== --- 2.1.1/data/application-x-pcb-layout-16.png (nonexistent) +++ 2.1.1/data/application-x-pcb-layout-16.png (revision 23085) Property changes on: 2.1.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: 2.1.1/data/application-x-pcb-layout-16.svg =================================================================== --- 2.1.1/data/application-x-pcb-layout-16.svg (nonexistent) +++ 2.1.1/data/application-x-pcb-layout-16.svg (revision 23085) @@ -0,0 +1,1333 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + PCB layout + + + + + + + Peter Clifton, Tomaz Solc, Jakub Steiner + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: 2.1.1/data/application-x-pcb-layout-22.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: 2.1.1/data/application-x-pcb-layout-22.png =================================================================== --- 2.1.1/data/application-x-pcb-layout-22.png (nonexistent) +++ 2.1.1/data/application-x-pcb-layout-22.png (revision 23085) Property changes on: 2.1.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: 2.1.1/data/application-x-pcb-layout-22.svg =================================================================== --- 2.1.1/data/application-x-pcb-layout-22.svg (nonexistent) +++ 2.1.1/data/application-x-pcb-layout-22.svg (revision 23085) @@ -0,0 +1,1423 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + PCB layout + + + + + + + Peter Clifton, Tomaz Solc, Jakub Steiner + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: 2.1.1/data/application-x-pcb-layout-24.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: 2.1.1/data/application-x-pcb-layout-24.png =================================================================== --- 2.1.1/data/application-x-pcb-layout-24.png (nonexistent) +++ 2.1.1/data/application-x-pcb-layout-24.png (revision 23085) Property changes on: 2.1.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: 2.1.1/data/application-x-pcb-layout-32.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: 2.1.1/data/application-x-pcb-layout-32.png =================================================================== --- 2.1.1/data/application-x-pcb-layout-32.png (nonexistent) +++ 2.1.1/data/application-x-pcb-layout-32.png (revision 23085) Property changes on: 2.1.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: 2.1.1/data/application-x-pcb-layout-32.svg =================================================================== --- 2.1.1/data/application-x-pcb-layout-32.svg (nonexistent) +++ 2.1.1/data/application-x-pcb-layout-32.svg (revision 23085) @@ -0,0 +1,1362 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + PCB layout + + + + + + + Peter Clifton, Tomaz Solc, Jakub Steiner + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: 2.1.1/data/application-x-pcb-layout-48.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: 2.1.1/data/application-x-pcb-layout-48.png =================================================================== --- 2.1.1/data/application-x-pcb-layout-48.png (nonexistent) +++ 2.1.1/data/application-x-pcb-layout-48.png (revision 23085) Property changes on: 2.1.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: 2.1.1/data/application-x-pcb-layout-48.svg =================================================================== --- 2.1.1/data/application-x-pcb-layout-48.svg (nonexistent) +++ 2.1.1/data/application-x-pcb-layout-48.svg (revision 23085) @@ -0,0 +1,1341 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + PCB layout + + + + + + + Peter Clifton, Tomaz Solc, Jakub Steiner + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: 2.1.1/data/application-x-pcb-layout.svg =================================================================== --- 2.1.1/data/application-x-pcb-layout.svg (nonexistent) +++ 2.1.1/data/application-x-pcb-layout.svg (revision 23085) @@ -0,0 +1,1346 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + PCB layout + + + + + + + Peter Clifton, Tomaz Solc, Jakub Steiner + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: 2.1.1/data/application-x-pcb-netlist-16.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: 2.1.1/data/application-x-pcb-netlist-16.png =================================================================== --- 2.1.1/data/application-x-pcb-netlist-16.png (nonexistent) +++ 2.1.1/data/application-x-pcb-netlist-16.png (revision 23085) Property changes on: 2.1.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: 2.1.1/data/application-x-pcb-netlist-16.svg =================================================================== --- 2.1.1/data/application-x-pcb-netlist-16.svg (nonexistent) +++ 2.1.1/data/application-x-pcb-netlist-16.svg (revision 23085) @@ -0,0 +1,530 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + PCB netlist + + + + + + + Peter Clifton, Jakub Steiner + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: 2.1.1/data/application-x-pcb-netlist-22.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: 2.1.1/data/application-x-pcb-netlist-22.png =================================================================== --- 2.1.1/data/application-x-pcb-netlist-22.png (nonexistent) +++ 2.1.1/data/application-x-pcb-netlist-22.png (revision 23085) Property changes on: 2.1.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: 2.1.1/data/application-x-pcb-netlist-22.svg =================================================================== --- 2.1.1/data/application-x-pcb-netlist-22.svg (nonexistent) +++ 2.1.1/data/application-x-pcb-netlist-22.svg (revision 23085) @@ -0,0 +1,567 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + PCB netlist + + + + + + + Peter Clifton, Jakub Steiner + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: 2.1.1/data/application-x-pcb-netlist-24.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: 2.1.1/data/application-x-pcb-netlist-24.png =================================================================== --- 2.1.1/data/application-x-pcb-netlist-24.png (nonexistent) +++ 2.1.1/data/application-x-pcb-netlist-24.png (revision 23085) Property changes on: 2.1.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: 2.1.1/data/application-x-pcb-netlist-32.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: 2.1.1/data/application-x-pcb-netlist-32.png =================================================================== --- 2.1.1/data/application-x-pcb-netlist-32.png (nonexistent) +++ 2.1.1/data/application-x-pcb-netlist-32.png (revision 23085) Property changes on: 2.1.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: 2.1.1/data/application-x-pcb-netlist-32.svg =================================================================== --- 2.1.1/data/application-x-pcb-netlist-32.svg (nonexistent) +++ 2.1.1/data/application-x-pcb-netlist-32.svg (revision 23085) @@ -0,0 +1,1310 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + PCB netlist + + + + + + + Peter Clifton, Jakub Steiner + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: 2.1.1/data/application-x-pcb-netlist-48.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: 2.1.1/data/application-x-pcb-netlist-48.png =================================================================== --- 2.1.1/data/application-x-pcb-netlist-48.png (nonexistent) +++ 2.1.1/data/application-x-pcb-netlist-48.png (revision 23085) Property changes on: 2.1.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: 2.1.1/data/application-x-pcb-netlist-48.svg =================================================================== --- 2.1.1/data/application-x-pcb-netlist-48.svg (nonexistent) +++ 2.1.1/data/application-x-pcb-netlist-48.svg (revision 23085) @@ -0,0 +1,451 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + PCB netlist + + + + + + + Peter Clifton, Jakub Steiner + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: 2.1.1/data/application-x-pcb-netlist.svg =================================================================== --- 2.1.1/data/application-x-pcb-netlist.svg (nonexistent) +++ 2.1.1/data/application-x-pcb-netlist.svg (revision 23085) @@ -0,0 +1,459 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + PCB netlist + + + + + + + Peter Clifton, Jakub Steiner + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: 2.1.1/data/icon-theme-installer =================================================================== --- 2.1.1/data/icon-theme-installer (nonexistent) +++ 2.1.1/data/icon-theme-installer (revision 23085) @@ -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: 2.1.1/data/icon-theme-installer ___________________________________________________________________ Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: 2.1.1/data/pcb-48.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: 2.1.1/data/pcb-48.png =================================================================== --- 2.1.1/data/pcb-48.png (nonexistent) +++ 2.1.1/data/pcb-48.png (revision 23085) Property changes on: 2.1.1/data/pcb-48.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: 2.1.1/data/pcb.desktop =================================================================== --- 2.1.1/data/pcb.desktop (nonexistent) +++ 2.1.1/data/pcb.desktop (revision 23085) @@ -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: 2.1.1/data/pcb.svg =================================================================== --- 2.1.1/data/pcb.svg (nonexistent) +++ 2.1.1/data/pcb.svg (revision 23085) @@ -0,0 +1,1070 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + Lapo Calamandrei + + + + Text editor + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: 2.1.1/data/pcb.xml =================================================================== --- 2.1.1/data/pcb.xml (nonexistent) +++ 2.1.1/data/pcb.xml (revision 23085) @@ -0,0 +1,40 @@ + + + + + PCB layout + + + + + + + + PCB footprint + + + + + + + + PCB netlist + + + + + Gerber file + + + + + + + + Excellon drill file + + + + + + Index: 2.1.1/data/pcb_icon.ico =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: 2.1.1/data/pcb_icon.ico =================================================================== --- 2.1.1/data/pcb_icon.ico (nonexistent) +++ 2.1.1/data/pcb_icon.ico (revision 23085) Property changes on: 2.1.1/data/pcb_icon.ico ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: 2.1.1/data/regen_files =================================================================== --- 2.1.1/data/regen_files (nonexistent) +++ 2.1.1/data/regen_files (revision 23085) @@ -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: 2.1.1/data/regen_files ___________________________________________________________________ Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: 2.1.1/data/x-excellon.desktop =================================================================== --- 2.1.1/data/x-excellon.desktop (nonexistent) +++ 2.1.1/data/x-excellon.desktop (revision 23085) @@ -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: 2.1.1/data/x-gerber.desktop =================================================================== --- 2.1.1/data/x-gerber.desktop (nonexistent) +++ 2.1.1/data/x-gerber.desktop (revision 23085) @@ -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: 2.1.1/data/x-pcb-footprint.desktop =================================================================== --- 2.1.1/data/x-pcb-footprint.desktop (nonexistent) +++ 2.1.1/data/x-pcb-footprint.desktop (revision 23085) @@ -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: 2.1.1/data/x-pcb-layout.desktop =================================================================== --- 2.1.1/data/x-pcb-layout.desktop (nonexistent) +++ 2.1.1/data/x-pcb-layout.desktop (revision 23085) @@ -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: 2.1.1/data/x-pcb-netlist.desktop =================================================================== --- 2.1.1/data/x-pcb-netlist.desktop (nonexistent) +++ 2.1.1/data/x-pcb-netlist.desktop (revision 23085) @@ -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: 2.1.1/doc/Autostyle.html =================================================================== --- 2.1.1/doc/Autostyle.html (nonexistent) +++ 2.1.1/doc/Autostyle.html (revision 23085) @@ -0,0 +1,16 @@ + + + + + + + +
Main + News + Doc & pool + Support + People + Events & timeline + pcb-rnd [pcb-rnd logo] +
+ Index: 2.1.1/doc/Autostyle.sh =================================================================== --- 2.1.1/doc/Autostyle.sh (nonexistent) +++ 2.1.1/doc/Autostyle.sh (revision 23085) @@ -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: 2.1.1/doc/Autostyle.sh ___________________________________________________________________ Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: 2.1.1/doc/Makefile =================================================================== --- 2.1.1/doc/Makefile (nonexistent) +++ 2.1.1/doc/Makefile (revision 23085) @@ -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: 2.1.1/doc/README =================================================================== --- 2.1.1/doc/README (nonexistent) +++ 2.1.1/doc/README (revision 23085) @@ -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: 2.1.1/doc/TODO =================================================================== --- 2.1.1/doc/TODO (nonexistent) +++ 2.1.1/doc/TODO (revision 23085) @@ -0,0 +1,323 @@ +0. old, still waiting for ack ++ CLEANUP: propedit rewrite: new action UI should allow operation on object and object ID instead of selection; bug_files/subcsel.bug [report: Wojciech] + +1. For the upcoming release =============================================================================== ++ FEATURE: export_xy: pnp origin should be any obj, especially padstacks (fidu) [report: TwisteR] ++ CLEANUP: dad: make the implicit dialog ok/cancel buttons configurable or do not use them at all; e.g. export dialog is confusing [report: Cyril, ml2409] ++ FEATURE: make propset() able to change board properties if first arg is "board" (change baord size) [report: rqsall] ++ FEATURE: padstack edit swap shapes - low level for a "solder mask defined pad" [report: ehennes] ++ FEATURE: extedit: dialog shoudl let the user edit the command template [report: TwisteR] ++ BUG: new preferences + + update bugs: + + crash: + + BUG: preferences() crashes if lesstif GUI is compiled but gtk is not (missing gtk-only conf settings) [report: rqsall] + + BUG: lesstif: {i c p} -> crash, only on IRIX system [report: Ian] -> probably fixed, please test ++ BUG: (prio) bug_files/png_export_fix_dpi.patch , ML #2474 [report: Cyril] ++ BUG: bug_files/obsconf.lht: load, get a warning for obsolete config; save into a new file and the broken conf node is not removed [report: keantoken] + +> this is not a bug: we try to preserve thins in the file that we don't fully understand. This is intentional. Think the other way around: you open a file with an older pcb-rnd version that doesn't know about a config node, you do not want it to remove the unknown node because you then may want to open the file again with the new version. It prints an error message with the line number in the file, so you can go and delete the offending lines if you want them removed. ++ BUG: ML 2479: gtk crosshair re-enter to the last pos doesn't always draw the crossghair [report: pstuge] +? BUG: scconfig: if libgd is not detected, there's an extra error on disable-gd-gif [report: Erich] +? BUG: configure without glib installed -> 'unknown arugment disable-gtk' [report: Ade] +? BUG: #define TODO(x) doesn't compile on IRIX system with --debug option ON [report: Ian] ++ BUG: open export dialogue. Export a PNG of the layout. Hit escape instead of "close". Export dialog cannot be opened again unless pcb-rnd is restarted [report: Erich]. +? BUG: export dialogue, when used to export PNG of top copper, by only making top copper layers visible prior to export, will export top and bottom copper layers in a monochrome png if the monochrome check box is checked. If the monochrome checkbox is not checked, only the visible layers export, as expected [report: Erich] + > can't reproduce this; if you want layer visibility to considered, check the 'as shown' option. But best if you forget layer visibility totally and just use the cam syntax. + +2. For later releases =============================================================================== +- CLEANUP: rename the project file header from geda- to coral- (but keep accepting the old one); update the format docs [report: Igor2] +- CLEANUP: search for TODO pcb_has_explicit_outline() [report: Igor2] +- CLEANUP/BUG: lesstif: preferences(layers): EXPFILL doesn't seem to work; need to replace box code with work/lkesstif/formbox [report: Igor2] + - BUG: lesstif: {i c p}, color tab: tabbed doesn't grow [report: Igor2] +- CAM: + - CLEANUP: move the hackish gerber layer suffix functions into CAM configs [report: Ade] + - 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 +- FEATURE: route style upgrade to prototypes (depends on tree in lesstif!): + - BUG: set same {e s s} doesn't work on padstacks [report: Igor2] + - BUG: padstack doesn't show drc xor shape while moving - because the whole drawing is a cheat for old vias [report: igor2] + - replace the route style dialog box's via part + - proto copy to buffer - a buffer with a single padstack should also serve as a prototype copy vehicle? or just import by a list from the buffer + - load/import from buffer and file + - CLEANUP: remove PCB_MIN_PINORVIA* PCB_DEFAULT_DRILLINGHOLE macros - nothing should use them anymore + - add text font, update the pool node text_edit [report: Igor2] +- CLEANUP/FEATURE: session persistent DAD message log (messages are flushed after dialog is closed?) [report: Miloh] + - DOC: document the DAD text widget +- CLEANUP: DAD: centralize the coordinate input spinbox into the dialog plugin + - drc & size: doesn't update on mil/mm change in top win -> need a list of spinboxes to update on conf change [report: Ade] + - make the central unit infra more flexible so plugins can register new units + - add an event for unit change so all spinboxes can be updated + - make sure we don't crash when grid or config references non-existing unit or unit that has no conversion field set up yet + - propedit: relative modifications +x mils, #degrees broke [report: Igor2] +- CLEANUP: propedit revamp: + - test under lesstif + - CLEANUP: remove Attrbute() and pcb_act_Attributes -> remove; this should be handled by the property editor when lesstif already supports it. +- CLEANUP: eliminate PCB_MOVE, remove move.h from box.h +- CLEANUP: library window DAD-ification: remove pcb_act_LibraryShow() + - FEATURE: library window: allow long tags and long location text to split + - BUG: double check parametric footprint edit window: bug_files/parametric.txt [report: Piotr] +- CLEANUP: think over how to handle subc selection: selecting all parts automatically is bad for propedit; bug_files/subcsel.bug [report: Wojciech] + - BUG: adding attribute works on subc parts but deleting attribute stops after deleiting it from a subc; bug_files/subcsel.bug [report: Wojciech] +- CLEANUP: color: + - remove per hid, non-backup-lib custom color structs + - COLOR_TO_STR should not use sprintf - remove stdio.h + - rewrite lesstif conv so it wouldn't use the string version anymore + - rewrite gtk conv so it wouldn't use the string version anymore + - remove src/hid_color.[ch] and src/color_cache.[ch] + - remove pcb_color_t ->str, convert only when really needed +- CLEANUP: remove pcb_rubber_band_alloc() and use genvector +- CLEANUP: find.c rewrite: + - CLEANUP: a new "report(NetLength)" should not care about netlists but depend on find.c only + - BUG: unplated padtsakcs shall not connect layers; problem: a padstack is either found or not, this affects all layers, there's no info about which layer is found; padstack update should check the hole/slot geo and update a bit for each shape telling whether it's connected or not + - BUG: bug_files/rat_shortest.lht: because of "don't add non-manhattan lines" part [report: pstuge] +- CLEANUP: layre order from data + - central code for building a list of layer groups ordered by draw from front to back (omit disabled/invisible layers) + - rewrite both the draw_everything() and pcb_search_obj_by_location_() layer loop to use this list +- CLEANUP: move ChangeName() to oldactions and replace or remove the menu ml=2612 [report: Gabriel] +- 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. Move this in core. Make rat lines remember their terminal object by ID, iterate over rats to find the ones to deal with [report: Ade] +- CLEANUP: remove conf_cmd_is_safe: already handled by the conf_board_ignores +- CLEANUP: move the PrintCalibrate() action out of core - check if DAD rewrite is needed +- CLEANUP/BUG: high level pcb_mkdir() and pcb_file_size() and is-dir shall be in safe_fs checking permissions; low level could stay in the compat layer with a #define to make sure it is not called directly [report: igor2] +- CLEANUP/feature: pcb_subc_smash_buffer() should really copy data so it can smash multiple subcs and subc objects end up on the layer they were bound to [report: keantoken] +- CLEANUP: non-modal fontsel: start a new board while fontsel is open for an object [report: Igor2] + - should not remember object by pointer but by idpath; remove pcb_stub_draw_fontsel_text_obj + - reset the idpath on pcb change + - allow multiple fontsel dialogs, collect them on a list and update them all on board change +- CLEANUP: dad _DEFAULT() on x86_64: int cast to pointer in non-running code; probably need to split it to DEFAULT_DATA and DEFAULT_PTR (together with the field set macro?) [report: Erich] +- CLEANUP: make the file selector a DAD widget, reimplement all the logics centrally in dialogs [report: Igor2] +- CLEANUP: rewrite the netlist code + - when no netlist is loaded, new rats can't be drawn [report: agaran] + - shorts are reported twice, in pair, e.g. sort between A-B and then between B-A; Gabriel's idea: use strcmp() and report only if first > second ml2583 [reprot: Gabriel] + - FEATURE: rat line draw: [report: Igor2] + - be able to rename nets + - save the netlist with the file + - be able to convert a 'found' to a net +- CLEANUP/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/BUG: bug_files/lines - remove zero length objects if they are created as the result of rubber banding [report: Evan] +- FEATURE: Ade's new subc construction with convert: need a config setting that results in creating the refdes text but not adding the refdes attribute as empty [report: Ade] +- FEATURE: view list: import sch. shouldn't select elements to be removed but put them on a drc list +- FEATURE: external editor on buffer [report: TwisteR] +- FEATURE: fontsel: ttf import? +- FEATURE: drc preview: follow board flips (should be a DAD preview flag) [report: Igor2] +- FEATURE: DOC: new examples + - blinking led with parametric footprints + - example of nonetlist: 1206 jumpers and logos +- 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] +- CLEANUP: move import_sch to import_sch_old and start a new, generic plugin +- CLEANUP/FEATURE: boardflip doesn't function properly with undo -- repro: open pcb-rnd, place 1206, boardflip(), { u u } removes placed part instead of boardflip [report: Miloh] +- FEATURE: invert selection in the menu +- FEATURE: tedax etest save (board save too) +- 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 +- 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] +- export_dsn/new io_dsn (with King Kevin and celem): + - 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 +- 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: wandering gtk window (window placement bug): using icewm, open the property editor, close, open, close, open: it's displaced by decoration; also check with lesstif [report: Igor2] +- BUG: gtk2_gl: RTT/arc_sizes.lht - elliptical arc corner case render bug [report: Wed] +- SUBC: element removal: + - 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 +- 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] +- 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: 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] +- FEATURE: optional display of as-drawn contours of polygons for editing [report: Ade] +- FEATURE: pewview widget: allow to handle keys both in gtk and lesstif +- CLEANUP: fp_fs_search: kill anything that gets ':' separated string as path list, get a config list instead +- 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: 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 +- 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: + - provide hooks and let plugins deal with a re-add as they may be added anywhere + - 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? + - gcode invents .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 +- CLEANUP: 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] +- 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 +- 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_] + - BUG: does not save the netlist [TwisteR] + - BUG: io_kicad parse err w/drill & roundrect pads work/testcase_cnc_cesc.kicad_mod work/pcbnew_pad_handles_drill.png [report: Miloh] + - BUG: direct load of footprint, e.g. pcb-rnd km.mod, fails while load to buffer works on bug_files/km.mod [report: Ade] + - 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. + - revise all I/O plugins for: + - text thickness + - text rotation + - padstacks + - new outline/mech layers and slots + - new doc layers +- FEATURE: lihata v7 + - remove via geometry from route style +- BUG: gtk: slipping 'tab' issue view drifts when tab is used repeatedly at different zooms around the cardinal edges of a placed part, video repro: http://scififaster.net/wantitthatway_pcb-rnd.ogg [report: Miloh] +- BUG: XY exporter: place a 1206 rotated 15 degrees, then export to xy with macrofab -> error message on rotated pad bbox; we need to rotate back the terminal object and calculate hte bbox in neutral position [report: celem] +- BUG: lesstif clip_set() doesn't seem to affect the X clipboard +- BUG: open gl polygon rendering: white line between just-touching polygons, may need a line clearance too; bug_files/gl_poly.lht [report: keantoken, Ade] +- BUG: Rubberband move line endpoints ignores connected arc endpoints. [Fixing:Ade] +- BUG: find.c: bug_files/find_slotcop.lht: plated slot should connect to any copper layer object it is going thru ml2571 [report: Igor2] +- BUG: route.h is not self-contained, missing includes [report: Igor2] + +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] + - implement/enable local grid in lesstif (menu option is disabled) + +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 =============================================================================== +- FEATURE: footprint in-place replacement should match up floaters to keep their coords, as documented in ML/2304 [report: gpaubert] +- FEATURE: filled vias for via-in-pad: http://www.saturnelectronics.com/products_capabilities/via-in-pad.html +- FEATURE: depth controlled mech layers (routed) for internal cavirites: http://www.saturnelectronics.com/products_capabilities/internal-cavity_boards.html +- 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 +- 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: preferences: grid list edit on the sizes tab +- 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) +- 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 +- 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 + - similar with lines: bug_files/dwgarea.lht; grabbing the lines for move will force them to fall within the drawing area [report: pstuge] + 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] +- CLEANUP: core lib splitup: + - gsch2pcb: generalize plugin/buildin loading for external tools, check if gsch2pcb can work from plugins +- FEATURE: revise the importer; http://repo.hu/cgi-bin/pool.cgi?cmd=show&node=make_import ; should work without an existing file [report: TwisteR] +? fp_wget/conf_internal.c is autogenerated by cquote.c, should be the internal version [report: Miloh, Igor] -> seems to be generated properly, what's the bug? +? BUG: loadscript(graphics,/path/to/graphicstypo.awk,mawk);loadscript(graphics,/path/to/graphics.awk,mawk) fails with '(null): cannot convert to realpath', then issues 'ID already in use' [report:Miloh] Index: 2.1.1/doc/TODO.cleanup =================================================================== --- 2.1.1/doc/TODO.cleanup (nonexistent) +++ 2.1.1/doc/TODO.cleanup (revision 23085) @@ -0,0 +1,4 @@ +- rename: + - conf_* +- move the GetXY action to central +- remove menu_toggle_update_cb() Index: 2.1.1/doc/TODO.ddrc =================================================================== --- 2.1.1/doc/TODO.ddrc (nonexistent) +++ 2.1.1/doc/TODO.ddrc (revision 23085) @@ -0,0 +1,4 @@ +Tests: + - non-pstk paste object over mask or silk + - non-pstk paste object over hole? + - polygon hair, polygon too thin - Gabriel's example: mask being too thin between smd pads Index: 2.1.1/doc/TODO.gtk3 =================================================================== --- 2.1.1/doc/TODO.gtk3 (nonexistent) +++ 2.1.1/doc/TODO.gtk3 (revision 23085) @@ -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: 2.1.1/doc/TODO.hid =================================================================== --- 2.1.1/doc/TODO.hid (nonexistent) +++ 2.1.1/doc/TODO.hid (revision 23085) @@ -0,0 +1,25 @@ +HID API simplification: DAD + +- blockers: + - implementing a list/tree/table "widget" for lesstif + - 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 route style dialog 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 + +HID API simplification: actions + +- obsolete actions to remove/revise: + - lesstif: AdjustStyle (lesstif has its own window!) + - lesstif: LesstifNetlistShow + +- action unification: + - Scroll is only in the gtk hid + - Popup is gtk only Index: 2.1.1/doc/UNIX.txt =================================================================== --- 2.1.1/doc/UNIX.txt (nonexistent) +++ 2.1.1/doc/UNIX.txt (revision 23085) @@ -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: 2.1.1/doc/conf/Makefile =================================================================== --- 2.1.1/doc/conf/Makefile (nonexistent) +++ 2.1.1/doc/conf/Makefile (revision 23085) @@ -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: 2.1.1/doc/conf/groups.html =================================================================== --- 2.1.1/doc/conf/groups.html (nonexistent) +++ 2.1.1/doc/conf/groups.html (revision 23085) @@ -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: 2.1.1/doc/conf/index.html =================================================================== --- 2.1.1/doc/conf/index.html (nonexistent) +++ 2.1.1/doc/conf/index.html (revision 23085) @@ -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: 2.1.1/doc/conf/index_prog.html =================================================================== --- 2.1.1/doc/conf/index_prog.html (nonexistent) +++ 2.1.1/doc/conf/index_prog.html (revision 23085) @@ -0,0 +1,14 @@ + + + + pcb-rnd - config programmer's index + + + +

The new config system in pcb-rnd

+

Programmer's documentation

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

The new config system in pcb-rnd

+

Plugin programmer's checklist

+ +TODO + + + Index: 2.1.1/doc/conf/prio.html =================================================================== --- 2.1.1/doc/conf/prio.html (nonexistent) +++ 2.1.1/doc/conf/prio.html (revision 23085) @@ -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: 2.1.1/doc/conf/scalars.html =================================================================== --- 2.1.1/doc/conf/scalars.html (nonexistent) +++ 2.1.1/doc/conf/scalars.html (revision 23085) @@ -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: 2.1.1/doc/conf/sources.html =================================================================== --- 2.1.1/doc/conf/sources.html (nonexistent) +++ 2.1.1/doc/conf/sources.html (revision 23085) @@ -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 boardfile 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: 2.1.1/doc/conf/src/Makefile =================================================================== --- 2.1.1/doc/conf/src/Makefile (nonexistent) +++ 2.1.1/doc/conf/src/Makefile (revision 23085) @@ -0,0 +1,2 @@ +../merging.png: merging.dot + dot -Tpng merging.dot > ../merging.png \ No newline at end of file Index: 2.1.1/doc/conf/src/merging.dot =================================================================== --- 2.1.1/doc/conf/src/merging.dot (nonexistent) +++ 2.1.1/doc/conf/src/merging.dot (revision 23085) @@ -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: 2.1.1/doc/conf/syntax.html =================================================================== --- 2.1.1/doc/conf/syntax.html (nonexistent) +++ 2.1.1/doc/conf/syntax.html (revision 23085) @@ -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: 2.1.1/doc/conf/tree/CFN_BOOLEAN.html =================================================================== --- 2.1.1/doc/conf/tree/CFN_BOOLEAN.html (nonexistent) +++ 2.1.1/doc/conf/tree/CFN_BOOLEAN.html (revision 23085) @@ -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: 2.1.1/doc/conf/tree/CFN_COLOR.html =================================================================== --- 2.1.1/doc/conf/tree/CFN_COLOR.html (nonexistent) +++ 2.1.1/doc/conf/tree/CFN_COLOR.html (revision 23085) @@ -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: 2.1.1/doc/conf/tree/CFN_COORD.html =================================================================== --- 2.1.1/doc/conf/tree/CFN_COORD.html (nonexistent) +++ 2.1.1/doc/conf/tree/CFN_COORD.html (revision 23085) @@ -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: 2.1.1/doc/conf/tree/CFN_INCREMENTS.html =================================================================== --- 2.1.1/doc/conf/tree/CFN_INCREMENTS.html (nonexistent) +++ 2.1.1/doc/conf/tree/CFN_INCREMENTS.html (revision 23085) @@ -0,0 +1,8 @@ + + +

pcb-rnd conf tree

+

type: increments

+A collection of coordinates representing an increment configuration. +

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

pcb-rnd conf tree

+

type: real

+A decimal numeric value without unit. +

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

pcb-rnd conf tree

+

type: string

+Text value. +

+Example values: +

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

pcb-rnd conf tree

+

type: unit

+Name of a unit. +

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

pcb-rnd conf tree

+

subtree: appearance

+ +
node name type flags description +
compact boolean 0 when set: optimize GUI widget arrangement for small screen; may be wasting some screen space on large screen +
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 +
invis_other_groups boolean 0 render non-current group layers with the inivisble color +
black_current_group boolean 0 render all layers of the current group black, for maximum contrast +
Index: 2.1.1/doc/conf/tree/appearance_color.html =================================================================== --- 2.1.1/doc/conf/tree/appearance_color.html (nonexistent) +++ 2.1.1/doc/conf/tree/appearance_color.html (revision 23085) @@ -0,0 +1,28 @@ + +

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 +
via_far color 0 non-terminal padstack shape on non-current ('far side') layer +
pin color 0 terminal padstack shape on current layer +
pin_far color 0 terminal padstack shape on non-current ('far side') 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: 2.1.1/doc/conf/tree/appearance_loglevels.html =================================================================== --- 2.1.1/doc/conf/tree/appearance_loglevels.html (nonexistent) +++ 2.1.1/doc/conf/tree/appearance_loglevels.html (revision 23085) @@ -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: 2.1.1/doc/conf/tree/appearance_messages.html =================================================================== --- 2.1.1/doc/conf/tree/appearance_messages.html (nonexistent) +++ 2.1.1/doc/conf/tree/appearance_messages.html (revision 23085) @@ -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: 2.1.1/doc/conf/tree/appearance_misc.html =================================================================== --- 2.1.1/doc/conf/tree/appearance_misc.html (nonexistent) +++ 2.1.1/doc/conf/tree/appearance_misc.html (revision 23085) @@ -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: 2.1.1/doc/conf/tree/appearance_padstack.html =================================================================== --- 2.1.1/doc/conf/tree/appearance_padstack.html (nonexistent) +++ 2.1.1/doc/conf/tree/appearance_padstack.html (revision 23085) @@ -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: 2.1.1/doc/conf/tree/appearance_subc.html =================================================================== --- 2.1.1/doc/conf/tree/appearance_subc.html (nonexistent) +++ 2.1.1/doc/conf/tree/appearance_subc.html (revision 23085) @@ -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: 2.1.1/doc/conf/tree/design.html =================================================================== --- 2.1.1/doc/conf/tree/design.html (nonexistent) +++ 2.1.1/doc/conf/tree/design.html (revision 23085) @@ -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 +
bloat coord 0 minimum space between copper features on different networks +
shrink coord 0 minimum overlap between connected copper features +
min_wid coord 0 minimum copper width +
min_slk coord 0 minimum silk width +
min_drill coord 0 minimum drill diameter +
min_ring coord 0 minimum annular ring +
text_scale integer 0 text scaling in % +
text_thickness coord 0 override stroke font text thickness +
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: 2.1.1/doc/conf/tree/editor.html =================================================================== --- 2.1.1/doc/conf/tree/editor.html (nonexistent) +++ 2.1.1/doc/conf/tree/editor.html (revision 23085) @@ -0,0 +1,60 @@ + +

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. +
conn_find_rat boolean 0 connection find includes rats; when off, only existing galvanic connections are mapped +
show_number boolean 0 OBSOLETE: pinout shows number +
orthogonal_moves boolean 0 move items orthogonally. +
reset_after_element boolean 0 OBSOLETE: reset connections after each element while saving all connections +
auto_place boolean 0 force placement of GUI windows (dialogs), trying to override the window manager +
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) +
io_incomp_popup boolean 0 wether to enable popping up the io incompatibility list dialog on save incompatibility errors +
io_incomp_style string 0 view listing style (list or simple), when io_incomp_popup is true +
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 +
subc_conv_refdes string 0 automatic refdes value assigned to new subcircuits on conversion from objects - if empty, no refdes text is added +
Index: 2.1.1/doc/conf/tree/editor_selection.html =================================================================== --- 2.1.1/doc/conf/tree/editor_selection.html (nonexistent) +++ 2.1.1/doc/conf/tree/editor_selection.html (revision 23085) @@ -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: 2.1.1/doc/conf/tree/editor_view.html =================================================================== --- 2.1.1/doc/conf/tree/editor_view.html (nonexistent) +++ 2.1.1/doc/conf/tree/editor_view.html (revision 23085) @@ -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: 2.1.1/doc/conf/tree/rc.html =================================================================== --- 2.1.1/doc/conf/tree/rc.html (nonexistent) +++ 2.1.1/doc/conf/tree/rc.html (revision 23085) @@ -0,0 +1,36 @@ + +

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 +
export_basename boolean 0 if an exported file contains the source file name, remove path from it, keeping the basename only +
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 of board files; optional fields (the usual % substitutions work) +
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: 2.1.1/doc/conf/tree/rc_path.html =================================================================== --- 2.1.1/doc/conf/tree/rc_path.html (nonexistent) +++ 2.1.1/doc/conf/tree/rc_path.html (revision 23085) @@ -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: 2.1.1/doc/conf/tree/temp.html =================================================================== --- 2.1.1/doc/conf/tree/temp.html (nonexistent) +++ 2.1.1/doc/conf/tree/temp.html (revision 23085) @@ -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: 2.1.1/doc/contact.html =================================================================== --- 2.1.1/doc/contact.html (nonexistent) +++ 2.1.1/doc/contact.html (revision 23085) @@ -0,0 +1,57 @@ + + + + + pcb-rnd - contact + + + + + + + + + +
Main + News + Doc & pool + Support + People + Events & timeline + pcb-rnd [pcb-rnd logo] +
+ + +

pcb-rnd - contact

+ +

Contact the project

+

+Please subscribe to the mailing list by sending "subscribe" to +pcb-rnd list.repo.hu or join IRC for + live chat (CET daytime) with other users +and developers. + +

Contact the lead developer

+

+Join IRC for live chat (CET daytime) and +look for Igor2. +

+Via email: pcbrnd igor2.repo.hu. + + +
+

+PRIVACY NOTICE: +

+This email address is provided only for personal use, exclusively for +topics directly related to the pcb-rnd project. +

+Do NOT copy it this email address to +software packages, documentation, etc. Permission is NOT granted +for collecting this email address in any list of email addresses. +Since this email address is a personal address, the + +GDPR applies while you are handling it. +

+ + Index: 2.1.1/doc/contrib.html =================================================================== --- 2.1.1/doc/contrib.html (nonexistent) +++ 2.1.1/doc/contrib.html (revision 23085) @@ -0,0 +1,72 @@ + + + + + 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 the lead developer. + + +

Contributing as a user

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

+We also have a list of tasks that can be contributed by users. +

+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: 2.1.1/doc/datasheet.html =================================================================== --- 2.1.1/doc/datasheet.html (nonexistent) +++ 2.1.1/doc/datasheet.html (revision 23085) @@ -0,0 +1,94 @@ + + + + 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 +
data model: layers + copper, silk, mask, paste, plated route/cut, unplated route/cut, arbitrary documentation/misc layers +
data model: padstacks + holes, slots, blind/buried vias, different shape on different layers (including non-copper layers), arbitrary polygon shape +
data model: footprint + any object and layer supported in footprint; rich metadata; option for run-time generated footprints +
data model: DRC + named networks, rats nest, deliberate netlist changes + back annotation, logical and geometric drc checks +
export formats + gerber, png, ps, svg, bom, xy, bboard, dsn, gcode, ipcd356, lpr, 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: 2.1.1/doc/developer/Makefile =================================================================== --- 2.1.1/doc/developer/Makefile (nonexistent) +++ 2.1.1/doc/developer/Makefile (revision 23085) @@ -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: 2.1.1/doc/developer/action_doc.txt =================================================================== --- 2.1.1/doc/developer/action_doc.txt (nonexistent) +++ 2.1.1/doc/developer/action_doc.txt (revision 23085) @@ -0,0 +1,38 @@ +How to document actions +~~~~~~~~~~~~~~~~~~~~~~~ + +Detailed action doc lives in trunk/doc/user/09_appendix/action_src in +almost-html files. There is no html header and the standard tags in use +are restricted to: b, i, p, pre, ul, li, table, tr, td. + +There are a few extra, non-standard tags: + +- argname names an argument of the current action +- actname links to another action; actname is all lowercase + +The name of the file should be actname.html. + +Documentation policy: + + - do not document the trivial - do not write alibi docs. We do not want + action doc to just repeat the syntax description. Please explore + what the action does, all aspects, all use cases; see if the syntax + help string already covers everything and the action is trivial to use; + if so, the action does nto need any more documentation + + - after creating the html doc, please add a + /* DOC: actname.html */ + comment above the action function in the source code + + - the doc is high level in the sense that it should tell the basic ideas + behind the action, how to use it, what it is for + + - it should not tell much about what bigger scheme it fits in (that's + even higher level, plugin doc; but should cross link relevan sibling + actions) + + - it should not repeat low level info (e.g. enumerate possible arguments + from the syntax string) if no extra info is added + + - do not do custom styling, the doc format is unified + Index: 2.1.1/doc/developer/alien_formats/geda_pcb.txt =================================================================== --- 2.1.1/doc/developer/alien_formats/geda_pcb.txt (nonexistent) +++ 2.1.1/doc/developer/alien_formats/geda_pcb.txt (revision 23085) @@ -0,0 +1,45 @@ +Before pcb-rnd switched to lihata for native file format, we used to use +geda/pcb's format as native. Since pcb-rnd got a lot of new features and +since geda/pcb refused to cooperate, there are unfortunately some +non-intrusive local file format extensions to the geda/pcb format. + +These extensions are kept for backward compatibility: just in case a file +needs to be loaded that was produced with pre-lihata pcb-rnd. However, +new extensions are not added to the geda/pcb format. + +This file attempts to (vaguely) list the extensions. Unless otherwise +mentioned, geda/pcb will (often silently) ignore the extension and a +load-save with geda/pcb will remove the extended properties from the file +(while pcb-rnd still does proper round trips on them). + +1. .fp file: element tagging + + Any comment in an element file that starts with double # is taken + as a tag. The syntax is: ##key:value. A tag is basically the same + as an attribute, except tags are not becoming subcircuit attributes + after loading a footprint. Tags are used to ease footprint searches. + +2. .pcb and .fp file: pin shape + + Early in pcb-rnd development, years before padstacks, a minor feature + was added to allow 16 different asymmetric pin shapes. The pin shape + is saved as a flag. + +3. .pcb file: intconn + + Because elements couldn't have attributes, we abused the flag field for + storing intconn() info. + +4. .pcb file: netlist patch + + For back annotation pcb-rnd keeps track on deliberate netlist changes. + Since this feature happened before lihata got stable, it is also + saved in the old pcb format in a NetListPatch subtree. Unfortunately + pcb does NOT handle this and throws a syntax error. geda/pcb users are + required to remove this subtree manually. + +5. .pcb file: new setting: enablemincut + + Another of the first few new features in pcb-rnd was mincut for shorts. + This also happened years before lihata boards, so a new global + setting was registered, which may even be saved in a board file. Index: 2.1.1/doc/developer/alien_formats/hyp.txt =================================================================== --- 2.1.1/doc/developer/alien_formats/hyp.txt (nonexistent) +++ 2.1.1/doc/developer/alien_formats/hyp.txt (revision 23085) @@ -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: 2.1.1/doc/developer/bisect.txt =================================================================== --- 2.1.1/doc/developer/bisect.txt (nonexistent) +++ 2.1.1/doc/developer/bisect.txt (revision 23085) @@ -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: 2.1.1/doc/developer/blog_queue.txt =================================================================== --- 2.1.1/doc/developer/blog_queue.txt (nonexistent) +++ 2.1.1/doc/developer/blog_queue.txt (revision 23085) @@ -0,0 +1,17 @@ +Ready to blog: +- subcircuit support for outline aka edge cut layers, i.e. mousebites, outlines; also slots in padstacks! +- easyeda import + +less urgent, almost finished: +- braille font +- unicode bdf bitmap dot matrix glyph insertion +- eeschema import (needs testing?) +- 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: 2.1.1/doc/developer/bridges/index.html =================================================================== --- 2.1.1/doc/developer/bridges/index.html (nonexistent) +++ 2.1.1/doc/developer/bridges/index.html (revision 23085) @@ -0,0 +1,11 @@ + + + + pcb-rnd developer manual + + + +This document has been moved to the +user doc. + + Index: 2.1.1/doc/developer/bugreport.html =================================================================== --- 2.1.1/doc/developer/bugreport.html (nonexistent) +++ 2.1.1/doc/developer/bugreport.html (revision 23085) @@ -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: 2.1.1/doc/developer/c89.html =================================================================== --- 2.1.1/doc/developer/c89.html (nonexistent) +++ 2.1.1/doc/developer/c89.html (revision 23085) @@ -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: 2.1.1/doc/developer/dad/index.html =================================================================== --- 2.1.1/doc/developer/dad/index.html (nonexistent) +++ 2.1.1/doc/developer/dad/index.html (revision 23085) @@ -0,0 +1,12 @@ + + + +

DAD: Dynamic Attribute Dialogs

+ +

Table of Contents

+ + Index: 2.1.1/doc/developer/dad/intro.html =================================================================== --- 2.1.1/doc/developer/dad/intro.html (nonexistent) +++ 2.1.1/doc/developer/dad/intro.html (revision 23085) @@ -0,0 +1,56 @@ + + + +

DAD: Dynamic Attribute Dialogs

+ +

History

+

+Attribute Dialogs were originally invented around the early/mid 2000s for export +HIDs to store a static, flat list of options that are then presented both +as command line options and as the GUI dialog box for export parameters. + +

Intro

+

+DAD is the dyamically allocated version, extended with new widget types for +providing tools for building more complex dialog boxes. It is not connected +with command line options in any way at the moment. +

+The list of widgets is still a flat, growing C array, often called the +table. But inside the table, widgets build as a logical tree +structure. Widgets with name that includes "BEGIN" will open a new +logical layout level that has to be closed with a PCB_DAD_END(). + +

Calling conventions

+

+A table is always built incrementally and sequentially. In this sense +the dialog box is static: once build and created, the number and +type of widgets can not be modified. The dynamic aspect is that the code +may create (and destroy) arbitrary DAD boxes, even with loops and +runtime conditions on what widgets end up in the box. +

+There are two kind of widget calls: widget creation and property set. +Property set calls always change the last created widget. This, by +convention, is often indicated by code indentation as well. For example: +

+	PCB_DAD_INTEGER(dlg, "foo");
+		PCB_DAD_MINVAL(dlg, 1);
+		PCB_DAD_MAXVAL(dlg, 10);
+		PCB_DAD_DEFAULT(dlg, 3);
+		widget_id_foo = PCB_DAD_CURRENT(dlg);
+	PCB_DAD_BUTTON(dlg, "update!");
+		PCB_DAD_CHANGE_CB(dlg, pcb_act_attr_chg);
+
+

+PCB_DAD_INTEGER() and PCB_DAD_BUTTON() are (macro) calls to create +new widgets (an integer entry and a button), the rest of the calls +change the last created widget's properties. +

+The main widget of the box, the root widget of the widget tree is +any widget. It is practical to make it a container widget (e.g. a HBOX, VBOX, +TABLE, PANE, or TABBED) so that it can host children widgets. +

+After each creation, the caller can query and store the integer widget +identifier using the PCB_DAD_CURRENT() macro. The widget identifier can +be used, together with the table, to query or change widget properties +and current value any time the dialog box is active. + Index: 2.1.1/doc/developer/dad/tree.html =================================================================== --- 2.1.1/doc/developer/dad/tree.html (nonexistent) +++ 2.1.1/doc/developer/dad/tree.html (revision 23085) @@ -0,0 +1,32 @@ + + + +

DAD: Dynamic Attribute Dialogs

+

+The table tree widget is a table containint cells arranged in a +fixed number of columns. Each cell is a dynamically allocated +char * string. + +

Helper macros for widget creation

+

+These macros, defined in hid_dad.h, are used to fill up the last +created (tree) widget with initial data. They return a row pointer. If the +row pointer is NULL, root is used - in this case insert means inserting at +the beginning of the row list, append means append at the end of the row list. +

    +
  • PCB_DAD_TREE_APPEND - append a sibling row after an existing row +
  • PCB_DAD_TREE_APPEND_UNDER - append a child node (at the end of the child list) under an existing row. +
  • PCB_DAD_TREE_INSERT - insert a new sibling row before an existing row +
  • PCB_DAD_TREE_SET_CB - install an user callback function on a tree event +
+ +

Inline functions for manipulating the tree runtime

+

+When the tree widget is already created, typically when the dialog box +is already running, the code can use hid_dad_tree.h for reading or +changing cells or rows of the tree. Any change is immediately reflected +on the GUI. Please refer to the comments in hid_dad_tree.h for details +on the functions and arguments. + + + Index: 2.1.1/doc/developer/dad/wbool.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: 2.1.1/doc/developer/dad/wbool.png =================================================================== --- 2.1.1/doc/developer/dad/wbool.png (nonexistent) +++ 2.1.1/doc/developer/dad/wbool.png (revision 23085) Property changes on: 2.1.1/doc/developer/dad/wbool.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: 2.1.1/doc/developer/dad/wbutton.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: 2.1.1/doc/developer/dad/wbutton.png =================================================================== --- 2.1.1/doc/developer/dad/wbutton.png (nonexistent) +++ 2.1.1/doc/developer/dad/wbutton.png (revision 23085) Property changes on: 2.1.1/doc/developer/dad/wbutton.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: 2.1.1/doc/developer/dad/wcoord.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: 2.1.1/doc/developer/dad/wcoord.png =================================================================== --- 2.1.1/doc/developer/dad/wcoord.png (nonexistent) +++ 2.1.1/doc/developer/dad/wcoord.png (revision 23085) Property changes on: 2.1.1/doc/developer/dad/wcoord.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: 2.1.1/doc/developer/dad/wenum.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: 2.1.1/doc/developer/dad/wenum.png =================================================================== --- 2.1.1/doc/developer/dad/wenum.png (nonexistent) +++ 2.1.1/doc/developer/dad/wenum.png (revision 23085) Property changes on: 2.1.1/doc/developer/dad/wenum.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: 2.1.1/doc/developer/dad/whbox.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: 2.1.1/doc/developer/dad/whbox.png =================================================================== --- 2.1.1/doc/developer/dad/whbox.png (nonexistent) +++ 2.1.1/doc/developer/dad/whbox.png (revision 23085) Property changes on: 2.1.1/doc/developer/dad/whbox.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: 2.1.1/doc/developer/dad/whpane.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: 2.1.1/doc/developer/dad/whpane.png =================================================================== --- 2.1.1/doc/developer/dad/whpane.png (nonexistent) +++ 2.1.1/doc/developer/dad/whpane.png (revision 23085) Property changes on: 2.1.1/doc/developer/dad/whpane.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: 2.1.1/doc/developer/dad/widgets.html =================================================================== --- 2.1.1/doc/developer/dad/widgets.html (nonexistent) +++ 2.1.1/doc/developer/dad/widgets.html (revision 23085) @@ -0,0 +1,274 @@ + + + +

DAD: Dynamic Attribute Dialogs

+ +

Input widgets

+

+Input widgets are leaf widgets in the widget tree that typically +implement a field where user input takes place. Available +input widgets are: + +
creation call screenshot (gtk2) description +
PCB_DAD_LABEL single line or multi line of plain text, from a string +
PCB_DAD_LABELF single line or multi line of plain text, using printf formatting +
PCB_DAD_ENUM select one value from a fixed set (typical implementation is a combo box) +
PCB_DAD_BOOL checkbox +
PCB_DAD_INTEGER set an integer value +
PCB_DAD_REAL set a real (floating point) value +
PCB_DAD_COORD set a coordinate value +
PCB_DAD_STRING input single line string value (plain text) +
PCB_DAD_BUTTON clickable push button +
PCB_DAD_PROGRESS progress bar +
PCB_DAD_TREE a list, table or tree of text data +
PCB_DAD_PREVIEW drawing area +
PCB_DAD_PICTURE static bitmap image +
PCB_DAD_PICBUTTON static bitmap button +
PCB_DAD_COLOR color button and selector +
PCB_DAD_TEXT text box (text editor) +
+ + + +

PCB_DAD_LABEL(table, text)

+

+Draw a label, which is not an input field (unmodifiable by the user). +text is copied by the call into a new allocation. The only +control text accepts is '\n', which is line break. + +

PCB_DAD_LABELF(table, (printf_args))

+

+Same as PCB_DAD_LABEL() but the text is rendered using printf. Note: +printf args, including the format string, shall be in parenthesis, e.g. +

+PCB_DAD_LABELF(dlg, ("Cats: %d", num_cats))
+
+ +

PCB_DAD_ENUM(table, choices)

+

+The user can choose one value out of an ordered list of strings. The list +is passed as a NULL terminalte char * array. The value +of the enum is an integer index into that array, 0 being the first string. +

+Typical GUI implementation is a combo box, without text editing. + +

PCB_DAD_BOOL(table, label)

+

+Ask the user about a boolean value, typically using a checkbox. The value +of the bool is an integer which is either 0 or 1. + +

PCB_DAD_INTEGER(table, label)

+

+Ask for an integer value, between a minval and a maxval. +The value is an int, which is not guaranteed to be wider than a +16 bit signed value. +

+Typical GUI implementation is a text entry, often upgraded with small buttons +to increase or decrease the value ("spinbox"). + +

PCB_DAD_REAL(table, label)

+

+Ask for a REAL (double precision floating point value), between a minval +and a maxval. +

+Typical GUI implementation is a text entry, often upgraded with small buttons +to increase or decrease the value ("spinbox"). + + +

PCB_DAD_COORD(table, label)

+

+Ask for a coordinate value, between a minval and a maxval. +The value is pcb_coord_t. +

+Typical GUI implementation is a text entry that understands unit suffix, +often upgraded with small buttons to increase or decrease the value ("spinbox"). + + +

PCB_DAD_STRING(table)

+

+Ask for a single line of plain text input. +

+The value is a dynamically allocated string. + +

PCB_DAD_BUTTON(table, text)

+

+A push button the user can click on. text is not allocated or copied +(shall be a static const string or allocated/free'd by the user). +

+There is no value, the only interface is the change callback. + + +

PCB_DAD_PROGRESS(table)

+

+Present a progress bar which is not an user input. value is a +REAL value between 0.0 and 1.0. When the code changes the value, the +GUI makes sure the dialog box is drawn and flushed, because typical use +is in a busy loop calculation. + +

PCB_DAD_TREE(table, cols, first_col_is_tree, opt_header)

+

+Present a tree-table with cols columns of text objects. When +first_col_is_tree is 1, the first column works as a tree, with +indentation and/or tree graphics and logics for collapsing/expanding subtrees. +If opt_header is not NULL, it is a NULL terminated static const +array of header strings describing the table header to be displayed, in as +many strings as cols specified. +

+A special cases: +

+ +
case parameters +
plain flat list cols=1, first_col_is_tree=0 +
tree-only cols=1, first_col_is_tree=1 +
table-only cols>1, first_col_is_tree=0 +
+

+Manipulating the data and the view are both done using + special tree-table macros. + +

PCB_DAD_PREVIEW(table, expose_cb, mouse_cb, free_cb, initial_view_box, user_ctx)

+

+Present a drawing area with callbacks to the host code to handle drawing: + +
argument meaning +
expose_cb called when (parts of) the preview needs to be redrawn +
mouse_cb called on mouse events +
free_cb called before the widget is destroyed +
initial_view_box set the initial zoom/pan to match the view box specified in drawing units +
min_sizex_px widget minimum size in x direction (width), in pixels +
min_sizey_px widget minimum size in y direction (height), in pixels +
user_ctx opaque pointer that is passed to every callback +
+ +

PCB_DAD_PICTURE(table, xpm)

+

+The pointer to a static xpm image is stored in the enumerations field. The image +is displayed in a widget without any other decoration. + +

PCB_DAD_PICBUTTON(table, xpm)

+

+The pointer to a static xpm image is stored in the enumerations field. The image +is displayed in a button tat behaves exaclty as a normal BUTTON in all other +regards. + +

PCB_DAD_COLOR(table)

+

+A button that has a solid region of the color specified in value. Unless +read-only (PCB_HATF_CLR_STATIC), when the user clicks the button a +HID-specific color selector dialog is popped up where the user can +specify a new color. + +

PCB_DAD_TEXT(table, cols, first_col_is_tree, opt_header)

+

+Free form multiline text string, edited using a HID-builtin text editor. Line +terminator is \n. +

+TODO: accessor macros + +

Layout widgets

+ + +
creation call screenshot (gtk2) description +
PCB_DAD_BEGIN_HBOX arrange children widgets in a horizontal list +
PCB_DAD_BEGIN_VBOX arrange children widgets in a vertical list +
PCB_DAD_BEGIN_HPANE split the parent box horizontally into two sections; the split ratio is adjustable
Note: "left" and "right" are the first and second children (left and right sibling) of the widget tree +
PCB_DAD_BEGIN_VPANE split the parent box vertically into two sections; the split ratio is adjustable
Note: on the screenshot "left" and "right" are the first and second children (left and right sibling) of the widget tree +
PCB_DAD_BEGIN_TABLE arrange children widgets into a n*m matrix, allocate each cell the same size
Note: on the screenshot the table is set up to have 3 columns +
PCB_DAD_BEGIN_TABBED create a "tabbed notebook" view, each children is a new tab +
+ +

Box common flags

+

+hbox, vbox and table share a few common compflags, that are defined in +hid_attrib.h, pcb_hatt_compflags_t. The explanation of what each flag does +can be found there. The most commonly used ones are PCB_HATF_FRAME, +PCB_HATF_SCROLL, PCB_HATF_EXPFILL. +

+If PCB_HATF_EXPFILL is set, the given box tries to expannd and fill, using +up all available space in its parent widget. If multiple sibling boxes +have this flag set the behaviour is unspecified; some HIDs may prefer +to grow only one box, others may evenly distribute the avaialble space +among boxes. If this flag is not set, the box uses only as much space +as its children widgets require. + + +

PCB_DAD_BEGIN_HBOX(table) and PCB_DAD_BEGIN_VBOX(table)

+

+Arrange children widgets in a horizontal or vertical row. + +

PCB_DAD_BEGIN_HPANE(table)

+

+Expect exactly two child widgets. Arrange them horizontally, with +a widget in between them that allows the user to change the space allocation +between the sides. + +

PCB_DAD_BEGIN_VPANE(table)

+

+Expect exactly two child widgets. Arrange them vertically, with +a widget in between them that allows the user to change the space allocation +between the sides. + +

PCB_DAD_BEGIN_TABLE(table, cols)

+

+Place children widgets in a table with cols columns. Widgets are +placed by filling up rows first. If there are not enough widget to finish +the last row, rightmost columns are left empty. +

+The table is homogenous, which means the cell size is the same for all cells +and is either determined by the size of the smallest cell content or if +the table fills in a larger widget space than its minimal size, then cell +space is evenly distributed. + +

PCB_DAD_BEGIN_TABBED(table, tabs)

+

+Creates a "tabbed notebook": each child widget ends up on a new +page, there is only one page shown at a time and there is a GUI way +to switch page (the tab). The list of tab names is passed as tabs, +as a NULL terminalte char * array. The number of tab names must match +the number of children widgets. The value +of is an integer index into that array, 0 being the first tab. +

+If compflag includes PCB_HATF_HIDE_TABLAB, the tab graphics are hidden - +no tab labels printed and the user can not click to switch tab. This is +useful for dialog boxes where the code needs to present different tabs +using the same screen estate. +

+If compflag PCB_HATF_LEFT_TAB is set, tab labels are presented in a vertical +row on the left side of the widget. This is useful if there are a lot of +tabs with short names. + +

PCB_DAD_DUP_ATTR(table, attr)

+

+Create a new widget by duplicating an existing one. attr is the +widget ID of the existing widget. If the widget being duplicated is a +BEGIN*, it will need a corresponding PCB_DAD_END. + + +

Property sets

+

+The raw macro call is PCB_DAD_SET_VALUE, which can change (overwrite) a named +field of the current (last created) widget. The following table lists high +level macros that usually call PCB_DAD_SET_VALUE on a specific field. +

+ +
name description +
PCB_DAD_COMPFLAG(table, val) set all compflags +
PCB_DAD_MINVAL(table, val) change the minimal value for numeric input +
PCB_DAD_MAXVAL(table, val) change the maximal value for numeric input +
PCB_DAD_DEFAULT(table, val) set the default (initial) value +
PCB_DAD_MINMAX(table, min, max) hange both the minimal and the maximal value for numeric input +
PCB_DAD_CHANGE_CB(table, cb) cb is a function that shall be called upon any change to the widget value +
PCB_DAD_HELP(table, val) set the help text (typically presented as a tooltip) +
+ +

Actions and scripting

+

+There is a dad() action in the dialogd plugin that exposes all the above macros. +The dialog table ID is am arbitrary unique string and commands are the macro +names without PCB_DAD, written in lowercase. +

+Please refer to scripting rosetta +project for examples. An example of a typical small dialog box is the +unit conveter +script. + Index: 2.1.1/doc/developer/dad/winteger.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: 2.1.1/doc/developer/dad/winteger.png =================================================================== --- 2.1.1/doc/developer/dad/winteger.png (nonexistent) +++ 2.1.1/doc/developer/dad/winteger.png (revision 23085) Property changes on: 2.1.1/doc/developer/dad/winteger.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: 2.1.1/doc/developer/dad/wlabel.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: 2.1.1/doc/developer/dad/wlabel.png =================================================================== --- 2.1.1/doc/developer/dad/wlabel.png (nonexistent) +++ 2.1.1/doc/developer/dad/wlabel.png (revision 23085) Property changes on: 2.1.1/doc/developer/dad/wlabel.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: 2.1.1/doc/developer/dad/wpicbtn.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: 2.1.1/doc/developer/dad/wpicbtn.png =================================================================== --- 2.1.1/doc/developer/dad/wpicbtn.png (nonexistent) +++ 2.1.1/doc/developer/dad/wpicbtn.png (revision 23085) Property changes on: 2.1.1/doc/developer/dad/wpicbtn.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: 2.1.1/doc/developer/dad/wpicture.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: 2.1.1/doc/developer/dad/wpicture.png =================================================================== --- 2.1.1/doc/developer/dad/wpicture.png (nonexistent) +++ 2.1.1/doc/developer/dad/wpicture.png (revision 23085) Property changes on: 2.1.1/doc/developer/dad/wpicture.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: 2.1.1/doc/developer/dad/wprogress.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: 2.1.1/doc/developer/dad/wprogress.png =================================================================== --- 2.1.1/doc/developer/dad/wprogress.png (nonexistent) +++ 2.1.1/doc/developer/dad/wprogress.png (revision 23085) Property changes on: 2.1.1/doc/developer/dad/wprogress.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: 2.1.1/doc/developer/dad/wreal.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: 2.1.1/doc/developer/dad/wreal.png =================================================================== --- 2.1.1/doc/developer/dad/wreal.png (nonexistent) +++ 2.1.1/doc/developer/dad/wreal.png (revision 23085) Property changes on: 2.1.1/doc/developer/dad/wreal.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: 2.1.1/doc/developer/dad/wstring.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: 2.1.1/doc/developer/dad/wstring.png =================================================================== --- 2.1.1/doc/developer/dad/wstring.png (nonexistent) +++ 2.1.1/doc/developer/dad/wstring.png (revision 23085) Property changes on: 2.1.1/doc/developer/dad/wstring.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: 2.1.1/doc/developer/dad/wtabbed.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: 2.1.1/doc/developer/dad/wtabbed.png =================================================================== --- 2.1.1/doc/developer/dad/wtabbed.png (nonexistent) +++ 2.1.1/doc/developer/dad/wtabbed.png (revision 23085) Property changes on: 2.1.1/doc/developer/dad/wtabbed.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: 2.1.1/doc/developer/dad/wtable.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: 2.1.1/doc/developer/dad/wtable.png =================================================================== --- 2.1.1/doc/developer/dad/wtable.png (nonexistent) +++ 2.1.1/doc/developer/dad/wtable.png (revision 23085) Property changes on: 2.1.1/doc/developer/dad/wtable.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: 2.1.1/doc/developer/dad/wtree.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: 2.1.1/doc/developer/dad/wtree.png =================================================================== --- 2.1.1/doc/developer/dad/wtree.png (nonexistent) +++ 2.1.1/doc/developer/dad/wtree.png (revision 23085) Property changes on: 2.1.1/doc/developer/dad/wtree.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: 2.1.1/doc/developer/dad/wvbox.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: 2.1.1/doc/developer/dad/wvbox.png =================================================================== --- 2.1.1/doc/developer/dad/wvbox.png (nonexistent) +++ 2.1.1/doc/developer/dad/wvbox.png (revision 23085) Property changes on: 2.1.1/doc/developer/dad/wvbox.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: 2.1.1/doc/developer/dad/wvpane.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: 2.1.1/doc/developer/dad/wvpane.png =================================================================== --- 2.1.1/doc/developer/dad/wvpane.png (nonexistent) +++ 2.1.1/doc/developer/dad/wvpane.png (revision 23085) Property changes on: 2.1.1/doc/developer/dad/wvpane.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: 2.1.1/doc/developer/data.html =================================================================== --- 2.1.1/doc/developer/data.html (nonexistent) +++ 2.1.1/doc/developer/data.html (revision 23085) @@ -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: 2.1.1/doc/developer/data1.svg =================================================================== --- 2.1.1/doc/developer/data1.svg (nonexistent) +++ 2.1.1/doc/developer/data1.svg (revision 23085) @@ -0,0 +1,349 @@ + + + + + + +pcb_data + +cluster_1 + +LEGEND + + +PCBType_misc + +misc fields: +ID +Name +FileName +colors +drc settings +cursor coords +grid +layergroups +route styles +padstack protos +... + + +PCBType_flags + +flags: +Changed +ViaOn (vias drawn?) +... + + +pcb_board_t + +pcb_board_t + + +pcb_board_t->PCBType_misc + + + + +pcb_board_t->PCBType_flags + + + + +pcb_data_t + +pcb_data_t + + +pcb_board_t->pcb_data_t + + + + +DataType_listrt + +layer-independent lists and rtrees + + +pcb_data_t:s->DataType_listrt + + + + +DataType_LayerN + +LayerN: number of +layers in use + + +pcb_data_t:s->DataType_LayerN + + + + +DataType_layers + +an array of layers + + +pcb_data_t:s->DataType_layers + + + + +DataType_misc + +misc fields + + +pcb_data_t:s->DataType_misc + + + + +DataType_rtrees + +DataType_rtrees + + +pcb_data_t:s->DataType_rtrees + + + + +pcb_data_t2 +another level of +pcb_data_t +... + + +pcb_subc_t + +pcb_subc_t + + +pcb_subc_t->pcb_data_t2 + + + + +pcb_rat_line_t + +pcb_rat_line_t + + +pcb_pstk_t + +pcb_pstk_t + + +pcb_padstack_proto_t + +pcb_padstack_proto_t + + +pcb_pstk_t->pcb_padstack_proto_t + + +id +ref. + + +pcb_arc_t + +pcb_arc_t + + +pcb_line_t + +pcb_line_t + + +pcb_text_t + +pcb_text_t + + +pcb_poly_t + +pcb_poly_t + + +struct + +box: +struct + + + +PCB + +extern pcb_board_t PCB +global variable +holding the current +board + + +PCB->pcb_board_t + + + + +Buffers + +extern pcb_buffer_t Buffers[] +global variable holding +all paste buffers + + +pcb_buffer_t + +pcb_buffer_t + + +Buffers->pcb_buffer_t + + + + +pcb_buffer_t->pcb_data_t + + + + +BufferType_misc + +misc fields: +bounding box +offset + + +pcb_buffer_t->BufferType_misc + + + + +DataType_listrt->pcb_subc_t + + + + +DataType_listrt->pcb_rat_line_t + + + + +DataType_listrt->pcb_pstk_t + + + + +DataType_listrt->pcb_padstack_proto_t + + + + +pcb_layer_t + +pcb_layer_t + + +DataType_layers->pcb_layer_t + + + + +LayerType_lines + +list and rtree of lines + + +pcb_layer_t->LayerType_lines + + + + +LayerType_arcs + +list and rtree of arcs + + +pcb_layer_t->LayerType_arcs + + + + +LayerType_texts + +list and rtree of text objects + + +pcb_layer_t->LayerType_texts + + + + +LayerType_polygons + +list and rtree of polygons + + +pcb_layer_t->LayerType_polygons + + + + +LayerType_misc + +misc fields: +flags +colors + + +pcb_layer_t->LayerType_misc + + + + +LayerType_lines->pcb_line_t + + + + +LayerType_arcs->pcb_arc_t + + + + +LayerType_texts->pcb_text_t + + + + +LayerType_polygons->pcb_poly_t + + + + +round + +round: +struct field + + +diamond + +diamond: +global variable + + +grn + +green: +drawing primitive + + + Index: 2.1.1/doc/developer/ddrc/examples1.txt =================================================================== --- 2.1.1/doc/developer/ddrc/examples1.txt (nonexistent) +++ 2.1.1/doc/developer/ddrc/examples1.txt (revision 23085) @@ -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: 2.1.1/doc/developer/ddrc/proposal1.txt =================================================================== --- 2.1.1/doc/developer/ddrc/proposal1.txt (nonexistent) +++ 2.1.1/doc/developer/ddrc/proposal1.txt (revision 23085) @@ -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: 2.1.1/doc/developer/ddrc/requirements.txt =================================================================== --- 2.1.1/doc/developer/ddrc/requirements.txt (nonexistent) +++ 2.1.1/doc/developer/ddrc/requirements.txt (revision 23085) @@ -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: 2.1.1/doc/developer/distros.txt =================================================================== --- 2.1.1/doc/developer/distros.txt (nonexistent) +++ 2.1.1/doc/developer/distros.txt (revision 23085) @@ -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: 2.1.1/doc/developer/export_openems/mesh_z.txt =================================================================== --- 2.1.1/doc/developer/export_openems/mesh_z.txt (nonexistent) +++ 2.1.1/doc/developer/export_openems/mesh_z.txt (revision 23085) @@ -0,0 +1,16 @@ +The bottom of the board by default always lands at z=0. The top is the +thicknesses of all the substrate layers added together. It is only the +substrate layers because right now the copper is just a change in +attribute on the surface of the substrate (2D) not a 3D object. + +So for the hairpinfilter example which is just 1 substrate layer of +1.5mm. It would be z=0mm for the bottom, and z=1.5mm for the top. + +That adjustment we have for z-mesh "num in substrate" is meant to +select how many lines fit inbetween those two lines. + +Technically my pcb2csx library can do both full 3D where all objects +have real thickness and the thing we do now but it eats a lot of +processing power for marginal benifit in most cases. In other words +it's not worth supporting at this point. + Index: 2.1.1/doc/developer/fungw_actions.txt =================================================================== --- 2.1.1/doc/developer/fungw_actions.txt (nonexistent) +++ 2.1.1/doc/developer/fungw_actions.txt (revision 23085) @@ -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: 2.1.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: 2.1.1/doc/developer/hid_gtk3/gtk2-edit_route_styles_001.png =================================================================== --- 2.1.1/doc/developer/hid_gtk3/gtk2-edit_route_styles_001.png (nonexistent) +++ 2.1.1/doc/developer/hid_gtk3/gtk2-edit_route_styles_001.png (revision 23085) Property changes on: 2.1.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: 2.1.1/doc/developer/hid_gtk3/gtk2-pcb-rnd_001.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = image/png Index: 2.1.1/doc/developer/hid_gtk3/gtk2-pcb-rnd_001.png =================================================================== --- 2.1.1/doc/developer/hid_gtk3/gtk2-pcb-rnd_001.png (nonexistent) +++ 2.1.1/doc/developer/hid_gtk3/gtk2-pcb-rnd_001.png (revision 23085) Property changes on: 2.1.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: 2.1.1/doc/developer/hid_gtk3/gtk_hid_architecture.html =================================================================== --- 2.1.1/doc/developer/hid_gtk3/gtk_hid_architecture.html (nonexistent) +++ 2.1.1/doc/developer/hid_gtk3/gtk_hid_architecture.html (revision 23085) @@ -0,0 +1,336 @@ + + + +GTK HID architecture + + +