Index: trunk/doc/Autostyle.html =================================================================== --- trunk/doc/Autostyle.html (nonexistent) +++ trunk/doc/Autostyle.html (revision 5597) @@ -0,0 +1,14 @@ + + + + + + + +
Main + News + People + Events & timeline + pcb-rnd +
+ Index: trunk/doc/Autostyle.sh =================================================================== --- trunk/doc/Autostyle.sh (nonexistent) +++ trunk/doc/Autostyle.sh (revision 5597) @@ -0,0 +1,71 @@ +#!/bin/sh + +autostyle() +{ + awk -v "template=$1" ' + 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] $0 "\n" + if (reset_curr) { + curr = "" + reset_curr = 0 + } + } + } + + 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: trunk/doc/Autostyle.sh ___________________________________________________________________ Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: trunk/doc/Makefile =================================================================== --- trunk/doc/Makefile (nonexistent) +++ trunk/doc/Makefile (revision 5597) @@ -0,0 +1,32 @@ +MENU_RES=../src/pcb-menu-gtk.lht ../src/pcb-menu-lesstif.lht +MENU_RES_MKEY=../src/pcb-menu-mkey.lht +KEYLIST=../util/keylist.sh +DEBLIST=../util/devhelpers/deblist.sh + +all: keys.html keys_mkey.html features/debian_list.html + ./Autostyle.sh *.html features/*.html + +keys.html: $(MENU_RES) $(KEYLIST) + $(KEYLIST) $(MENU_RES) > keys.html + +keys_mkey.html: $(MENU_RES_MKEY) $(KEYLIST) + $(KEYLIST) $(MENU_RES_MKEY) > keys_mkey.html + +features/debian_list.html: ../debian/control + $(DEBLIST) < ../debian/control > features/debian_list.html + ./Autostyle.sh features/debian_list.html + +install: + cd man && make install + +linstall: + cd man && make linstall + +uninstall: + cd man && make uninstall + +clean: + cd man && make clean + +distclean: + cd man && make distclean Index: trunk/doc/README =================================================================== --- trunk/doc/README (nonexistent) +++ trunk/doc/README (revision 5597) @@ -0,0 +1,10 @@ +pcb-rnd "diff" documentation: this directory contains documentation +on the features that differ from the original pcb version it was forked from. + +Most notable subdirectories: + features/ details of pcb-rnd features + conf/ documentation of the configuration system + hacking/ documentation for developers + devlog/ random thoughts and articles + +Documentation of the original version can be found in ../doc-orig Index: trunk/doc/TODO =================================================================== --- trunk/doc/TODO (nonexistent) +++ trunk/doc/TODO (revision 5597) @@ -0,0 +1,171 @@ +- BUGS + - "unselectable" arc rotated on ps [report:Evan] + - gerber top layer doesn't have pads on A.pcb (layer cleanup) [report:James] + - gerber layer group name [report:James] + ? all route styles deleted when using 'File>load layout data to paste buffer' + + in the 45-deg line mode, while DRC enforce settings toggled 'on' can cause isolated trace crossing, violating DRC + - `--dump-actions` and `--show-actions` ends with segmentation fault (compile without debug) Can't reproduce [report:miloh] + - extend the io_ API so that plugins can be requested to check file headers and decide if they can load the file; this would supress the pcb-related error messages when loading a lihata + - tab doesn't work in the lesstif hid (was already broken in 1.1.2) + +- Lihata persistent save: + - flag compatibility: save unknown, string-flags as loaded by io_pcb + - ind: space in ha:layer name + - ind: symbol height is not in-line on the output + - ind: indentation bug in via and netlists + - ind: indentation bug in inline struct therm: closing } is preceded by indentation whitespace for some reason + - ind: style attribute members in a fresh save + - keep numeric format: test all + - keep unknown subtrees + +- unravel: + - replace "outline" and "route" layer name checks with a central layer call + +- replace settings with lihata (conf_*) + - TEST: + - vendor drill mapping (all functionality, including regex based refdes ignore) + - route style in gtk and lesstif, save, load, 0, 1 or a lot of styles + - route style vs. autorouter + +- query & advanced search + - search expr wizard should pick up the expression from the button when clicked + - field accessors: + - pad area + - pin area + - line (and pad) length and length^2 + - make a run on a large board, speed test, with -O0 and -O3: + - iteration speed (a simple @) + - eval speed (a simple @ with a lot of constants in an expr) + - geo speed + - regex and string cmp match speed vs. select by name + +CLEANUP #5 +- src/check_icon.data - is it used? +- search for move.dst_layer - don't compare pointer to -1! +- make uninstall doesn't remove an scm +- rework the gpmi plugin to make it more standard in regard of the build system and to remove a few directories +- dir rename trunk/pcblib/tru-hole should handle make correctly and not walk on existing web services or user installs +- grid status line label doesn't update when using setvalue(grid,delta) add another hook to update this value [miloh] +- Erich's select undo bug: place an element, select, save & load, unselect, undo 2 times: bad serial +- Erich's gtk lag report: press 's' a lot then move the mouse - 's' ends up in the new loc! +- conf: throw an error if user config can not be written +- 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 +- mark bug - ortho shouldn't use it, it should use last point (crosshair.X2); make sure nothing else abuses it [James] +- conf: + - remove CFN_INCREMENTS, test if saving increments from preferences works + - config pov: change prio + - gtk preferences: check what takes 131 megs of VIRT ram (on top); destroy the dialog structures when closed + - gtk preferences: poly isle area widget missing from the sizes tab + - debug why default layer names from the user config are ignored + - fp_fs_search: kill anything that gets ':' separated string as path list, get a config list instead + - switch the lesstif HID over from attribs to conf + - remove redundancy: don't store values in the PCB struct that are in the design conf + - increments are not really implemented + - if font file is not found: + - embedded version? + - warn when try to write text on pcb? +- action bug: gui_act.c shouldn't reference Crosshair.X directly; check d-fix.patch about how to fix it +- next_gui: keep them open, hide +- look for #warnings +- fix librarychanged: disable update of gedasymbols on-start, make it an explicit refresh button +- libstroke: zoom +- cleanup/rewrite resources: + - load/swap menus (TODO#1) + - gpmi: + - hid: hid_destroy (pair of hid_create) + - cleanup on unload: remove menus +- check whether local copy of gts is needed, bisect when toporouter broke +- check gpmi when pcb-rnd is fully linstalled - broken symlinks? +- multi-key: display state on the gui +- implement loglevels and log style tags in the lesstif HID +- TODO#3: works only on US keyboard +- gsch2pcb: generalize plugin/buildin loading for external tools, check if gsch2pcb can work from plugins + +CLEANUP #6: +- lihata board/fp format: + - pads should be polygons (0 long line can't be rotated!) + - footprint orientation with a vector (just a second point) +- layer groups from config (e.g. CLI) is ignored +- res: + - search for vendor in the hid plugins, there should be no trace of it (vendor should register its in submenus with anchors) + - re-add dynamic menus after a gui change: + - either remember dynamic menus in a separate list so they can be rebuilt + - or provide hooks and let plugins deal with it + - gpmi: auto-remove menus by cookie (TODO#2) + - load new res on the fly (replace the menu system): + - low level reload code (re-add the dynamic menus too!) + - action to reload if file name is known + - gui load dialog with tags listed +- decide about exporter policy: + - png exports selection (even in not-as-shown), others don't + - extend png hid attribs with a flag for this, maybe do the same for others + - document the decision in "hacking" +- reduce + - export_bom: rewrite the string list code using htsp and/or lists + - hash in hid_attrib.c? + - nelma and gcode both invent .png name locally + - get rid of gcode/lists.h, and vector.[ch] (autorouter) + - vendordrill + - search for /units, replace it with pcb-printf something + - add round down + - replace ignore_refdes, ignore_value and ignore_descr with genvector + - mods: + - gpmi (and other buildins/plugins) not showing up in the about box +- self contained + - files + - default font + - action (--show-paths!) and dialog box to print where the actual files are coming from + - project specific menus from extra lihata files - maybe from project.lht +- main.c: + - SIGPIPE - detect it (needed for popen) + +CLEANUP #7: the big object split +- remove pcb_obj_type_t from const.h - use obj_any.h instead + + + + +FEATURES +- BUILD: menuconfig and a config file for scconfig + +Low prio: +- GTK "save as" dialog: there should be an "auto" or "guess by extension" option in the save dialog format +- insert drag&drop strangeness (mainline too): + insert should just insert a new point and stop there, not starting a drag&drop + move; the new point should be marked somehow (e.g. green-find one half of the + object, like arc split does) lines can be inserted mostly only in all-dir-line + which is strange +- missing rotate polygon (mainline too) +- zoom in too deep onto board edge and the implicit outline rectangle behaves strangely [report:Evan] +- scconfig: check if it picks up settings from env vars (for a gentoo build) +- replace mkdtemp() with something safer +- display net names on pins, vias (and maybe tracks?) when zoomed in enough +- DRC should warn for thin poly hair +- rotate shaped vias don't rotate the shape (is via rotated at all?) +- new examples + - blinking led with parametric footprints + - example of nonetlist: 1206 jumpers and logos +- decide what to do with old doc - texi doesn't seem to work at all +- rethink/rewrite the action/change infrastructure - too many void *ptr1 + pointers, too many code duplication +- double sided board, poly on both layers; grab existing lines on one layer and + move then around. If all layers are visible, redraw of the far side layer + is slow and causes flickering elements from that layer until the front is + redrawn. Maybe we should have less flushes? +- gpmi: + - dialog: attribute dialog: mini parser from text + - fix debug draw in the gtk hid + - ACTE_action(): coords should not be int but Coord + - get timers to work +- dmalloc: #include from the bottom from each file. Is this a good idea?! +- win32 port {large} + - clean up central Makefile.in rules: + - remove cat, sed, grep where possible, use scconfig instead +- arc bug: draw an arc with one end out of the drawing area; it will be jumpy and can not be placed properly + -> AttachForCopy() calls SetCrosshairRange() that then sets corsshair max* which + limits the arc to move freely. Problem: this is not arc-specific, this happens with any buffer copy! going for no-design-limit is probably better +- while drawing a line, the temporary outline should reflect the layer color +- push&shove + - keep 45-deg knee when grabbing a point for drag&drop in non-all-dir +- examine current handling of long options [miloh] +- --dump-actions shows gpmi paths ( is this related? it looks unexpected to me) Index: trunk/doc/UNIX.txt =================================================================== --- trunk/doc/UNIX.txt (nonexistent) +++ trunk/doc/UNIX.txt (revision 5597) @@ -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: trunk/doc/contrib.html =================================================================== --- trunk/doc/contrib.html (nonexistent) +++ trunk/doc/contrib.html (revision 5597) @@ -0,0 +1,66 @@ + + + pcb-rnd - contribution + + + + + + + + + +
Main + News + People + Events & timeline + pcb-rnd +
+ + +

pcb-rnd - contribution

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

Contributing as a user

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

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

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

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

Contributing as a developer

+ +The project is lead in an autocratic way by Igor2. + +Developer freedom taken away: + +

+Developer freedom promptly granted: +

+

+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: trunk/doc/developer/mods3/after.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: trunk/doc/developer/mods3/after.png =================================================================== --- trunk/doc/developer/mods3/after.png (nonexistent) +++ trunk/doc/developer/mods3/after.png (revision 5597) Property changes on: trunk/doc/developer/mods3/after.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: trunk/doc/developer/mods3/before.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: trunk/doc/developer/mods3/before.png =================================================================== --- trunk/doc/developer/mods3/before.png (nonexistent) +++ trunk/doc/developer/mods3/before.png (revision 5597) Property changes on: trunk/doc/developer/mods3/before.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: trunk/doc/developer/mods3/export.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: trunk/doc/developer/mods3/export.png =================================================================== --- trunk/doc/developer/mods3/export.png (nonexistent) +++ trunk/doc/developer/mods3/export.png (revision 5597) Property changes on: trunk/doc/developer/mods3/export.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: trunk/doc/developer/mods3/feature.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: trunk/doc/developer/mods3/feature.png =================================================================== --- trunk/doc/developer/mods3/feature.png (nonexistent) +++ trunk/doc/developer/mods3/feature.png (revision 5597) Property changes on: trunk/doc/developer/mods3/feature.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: trunk/doc/developer/mods3/fp.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: trunk/doc/developer/mods3/fp.png =================================================================== --- trunk/doc/developer/mods3/fp.png (nonexistent) +++ trunk/doc/developer/mods3/fp.png (revision 5597) Property changes on: trunk/doc/developer/mods3/fp.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: trunk/doc/developer/mods3/gen.sh =================================================================== --- trunk/doc/developer/mods3/gen.sh (nonexistent) +++ trunk/doc/developer/mods3/gen.sh (revision 5597) @@ -0,0 +1,152 @@ +#!/bin/sh + +path=../../src_plugins + +sloc() +{ + (cd "$1" && sloccount .) | awk '/^Total Phys/ { size=$9; sub(",", "", size); print size }' +} + +gen_pie() +{ + local bn=$1 code_size=$2 color=$3 + echo "" + echo "@slice" + echo "$code_size" + echo "@label" + echo "$bn ($code_size)" + if test ! -z "$color" + then + echo "@color" + echo "$color" + fi +} + +rm -f *.pie *.lines + +echo "#autogenerated by gen.sh" > mods.pie +echo "#autogenerated by gen.sh" > after.pie + +echo Core >&2 +tmp=/tmp/pcb-mods-stat +mkdir $tmp +cp -r ../../src/*.c ../../src/*.h ../../src/Makefile* $tmp +code_size=`sloc $tmp` +gen_pie "core" $code_size "#00ff88" >> after.pie + +#echo 3rd >&2 +#code_size=`sloc ../../src_3rd` +#gen_pie "3rd" $code_size >> after.pie + +echo "" > classes + +( +cat pre.html +for n in $path/* +do + if test -d "$n" + then + echo $n >&2 + bn=`basename $n` + code_size=`sloc $n` + total=$(($total + $code_size)) + class=`sed ' + /^#implements:/ { + s/#implements: *// + s/[()]//g + p + } + { d } + ' < $n/README` + echo "$class" >> classes + + echo "$code_size" >> $class.lines + gen_pie $bn $code_size >> $class.pie + +# case $bn in +# gpmi) echo "@pull" >> mods.pie; echo "0.1" >> mods.pie;; +# esac + + echo "$bn$code_size" + awk ' + /^#/ { + key=$1 + sub("#", "", key) + sub("[:=]", "", key) + $1="" + DB[key]=$0 + next + } + { desc = desc " " $0 } + + function strip(s) { + sub("^[ \t]*", "", s) + sub("[ \t]*$", "", s) + return s + } + + END { + st = DB["state"] + if (st ~ "partial") + clr = "bgcolor=\"yellow\"" + else if (st ~ "works") + clr = "bgcolor=\"lightgreen\"" + else if ((st ~ "fail") || (st ~ "disable")) + clr = "bgcolor=\"red\"" + else + clr="" + + clr2 = clr + if (clr2 != "") { + sub("bgcolor=\"", "", clr2) + sub("\"", "", clr2) + print "@color" >> "mods.pie" + print clr2 >> "mods.pie" + } + + print "" st + if (DB["lstate"] != "") + print "
(" strip(DB["lstate"]) ")" + + dfl = DB["default"] + if (dfl ~ "buildin") + clr = "bgcolor=\"lightgreen\"" + else if (dfl ~ "plugin") + clr = "bgcolor=\"yellow\"" + else if ((dfl ~ "fail") || (dfl ~ "disable")) + clr = "bgcolor=\"red\"" + else + clr="" + + print "" dfl + if (DB["ldefault"] != "") + print "
(" strip(DB["ldefault"]) ")" + print "" DB["implements"] + print "" desc + } + ' < $n/README + fi +done +cat post.html +gen_pie "plugins" "$total" "#0088ff" >> after.pie +) > index.html + +for n in *.lines +do + lines=`awk '{ sum += $1 } END { print sum }' < $n` + bn=${n%%.lines} + gen_pie $bn $lines >> mods.pie +done + + +classes=`sort < classes | uniq` + +for n in $classes after mods +do + animpie < $n.pie | animator -H -d $n + pngtopnm ${n}0000.png | pnmcrop | pnmtopng > $n.png + rm ${n}0000.png +done + + +rm classes Property changes on: trunk/doc/developer/mods3/gen.sh ___________________________________________________________________ Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: trunk/doc/developer/mods3/hid.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: trunk/doc/developer/mods3/hid.png =================================================================== --- trunk/doc/developer/mods3/hid.png (nonexistent) +++ trunk/doc/developer/mods3/hid.png (revision 5597) Property changes on: trunk/doc/developer/mods3/hid.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: trunk/doc/developer/mods3/import.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: trunk/doc/developer/mods3/import.png =================================================================== --- trunk/doc/developer/mods3/import.png (nonexistent) +++ trunk/doc/developer/mods3/import.png (revision 5597) Property changes on: trunk/doc/developer/mods3/import.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: trunk/doc/developer/mods3/index.html =================================================================== --- trunk/doc/developer/mods3/index.html (nonexistent) +++ trunk/doc/developer/mods3/index.html (revision 5597) @@ -0,0 +1,428 @@ + + +

pcb-rnd modularization

+

Why bother...

+I believe good software should be modular. This is especially important in +the context of large software, such as CAD applications. There should be +a thin core that can model the world and provide the basic operations defined +on it but anything else should go in separate modules. +

+Fortunately PCB already had a strong infrastructure supporting this idea. +It has dynamic loadable plugins and the GUI and exporters are in separate +HID modules. While working on pcb-gpmi and later pcb-rnd, I added the +gpmi module as a separate plugin. +

+In version 1.0.8 to 1.1.0 a cosiderable chunk of core code has been moved into +core plugins. A core plugin is just a plugin that is +maintained together with the core, in the same repository, still the code is +somewhat detached from the core. More importantly, the user can choose, for +each plugin, separately: +

+

+I believe such modularization has benefits on multiple levels: +

+ +

Progress in charts

+

Before-after

+All numbers are in SLOC +and are acquired running sloccount on the given directory. While lines of +code alone is not a true measure of complexity, it's a good estimation. The +slices of pie charts are the major components of the pcb-rnd executable. +
+ +
        +
Before modularization: pcb-rnd version 1.0.7 +
Note: gpmi was already a plugin +
+ After modularization: pcb-rnd version 1.1.3 +
Note: gpmi is part of the "plugins" slice +
+
+

Zooming on to the plugins

+

+ + + +
total size per class
+
IO plugins
+
+ + + + +
feature plugins
+
export plugins
+
+ + + +
HID plugins
+
import plugins
+
+ + + +
library plugins
+
footprint plugins
+
+ +

+(Red means the plugin doesn't really work). + +

Progress in numbers

+Below is a table with the summary of core plugins. + +
module size [sloc] status configure
default
class description + + +
autocrop157 + works + buildin + (feature) + Reduce the board dimensions to just enclose the elements. +
autoplace617 + works + buildin + (feature) + Automatically place elements. +
autoroute4341 + works + buildin + (feature) + Automatically route selected or all rats. This is the original autorouter. +
boardflip132 + WIP +
(doesn't update rtrees) +
disabled + (feature) + All objects on the board are up-down flipped. +
dbus486 + WIP +
(needs to install the xml?) +
disabled + (feature) + Remote control PCB using DBUS. +
diag167 + works + disabled + (feature) + Actions for pcb-rnd core diagnostics, intended for developers. These are not in core because end users normally don't need these. As a plugin, due to dynamic loading, it can be dropped on an existing pcb-rnd installation with minimal risk of scaring away a reproducible bug. +
distalign426 + works + buildin + (feature) + Introducing Align() and Distribute(), which work much like the similarly named functions in Visio. Given that PCB does not have the concept of "first selected object" to draw on, the reference points can be selected by arguments. +
distaligntext465 + works + buildin + (feature) + Same as distalign, operates on text objects. +
djopt2320 + works + buildin + (feature) + Various board optimization algorithms. +
draw_fab257 + works + buildin + (feature) + Draw the fab layer (for various exporters). +
export_bboard419 + WIP + disabled + export + Export breadboard +
export_bom230 + works + buildin + export + Export bom (Bill of Materials) +
export_dsn447 + Work-in-progress + disable + export + Export specctra .dsn files +
export_dxf3999 + WIP + disabled + export + Export dxf +
export_gcode2468 + works + buildin + export + Export to gcode +
export_gerber989 + works + buildin + export + Export to gerber +
export_ipcd356467 + Work-in-progress + disable + export + IPC-D-356 Netlist export. +
export_lpr104 + works + buildin + export + Export to lpr (using export_ps to generate postscript) +
export_nelma678 + works + buildin + export + Export to nelma (Numerical capacitance calculator) +
export_openscad1379 + WIP + disabled + export + Export openscad +
export_png1119 + works + buildin + export + Export to png, gif and jpeg +
export_ps1638 + works + buildin + export + Export postscript or embedded postscript. +
export_stat258 + works + buildin + export + Export various board statistics in lihata format +
export_svg566 + works + buildin + export + Scalable Vector Graphics (SVG) exporter +
export_test257 + disabled +
(work in progress) +
buildin + export + A thin layer of code to dump exporter calls for testing the HID exporter API. +
export_xy272 + works + buildin + export + Export XY centroid element data for pick & place. +
fontmode165 + works + buildin + (feature) + Font editing actions. +
fp_fs380 + works + buildin + fp + Footprint: file system based implementation. Used to be called Newlib: load footprints from directories. Run external processes for the parametric footprints. +
fp_wget303 + works + buildin + fp + Footprint: get static (file) footprints from the web, e.g. from http://gedasymbols.org +
gl588 + disabled +
(pcb-rnd has no support for opengl.) +
disabled + (feature) + Common gl functions for hids. +
gpmi3056 + works + buildin +
(if gpmi is installed) +
(feature) + Scriptable plugin system with about 10 scripting languages supported and dynamic load/unload of scripts that can manipulate the GUI, the board, can implement exporters, etc. +
hid_batch317 + works + buildin + hid + HID without GUI; read actions from stdin. +
hid_gtk16254 + works + buildin + hid + GUI: the GTK HID. +
hid_lesstif6917 + works + buildin + hid + GUI: the lesstif HID. +
hid_remote1116 + WIP + disable + hid + Remote access HID: implement a protocol and use it to relay between a core and a remote HID implementation. +
import_dsn115 + Work-in-progress + disable + import + Import specctra .dsn files +
import_edif3624 + works + buildin + import + Import plugin for netlists in the EDIF format. +
import_hyp1547 + WIP + disable + import + Import plugin for hyperlynx geometry. +
import_netlist136 + works + buildin + import + Import plugin for netlists in the classic pcb netlist format. +
import_sch302 + works + buildin + import + Imports element and netlist data from the schematics (or some other source). +
io_kicad2971 + works + buildin + io + Load and save the design and elements in Kicad's s-expression format - this is the new, currently preferred format in Kicad. +
io_kicad_legacy944 + works + buildin + io + Export the design and elements in Kicad's legacy format. +
io_lihata1935 + works + buildin + io + Load and save the design and elements in the lihata board format. +
io_pcb2172 + works + buildin + io + Load and save the design and elements in the original pcb text format. +
jostle445 + works + buildin + (feature) + Pushes lines out of the way. +
lib_gensexpr6 + works + disabled + (lib) + S-expression parser lib +
lib_legacy_func63 + works + buildin + (lib) + Random collection of old/obsolete (legacy) functions. 3rd party plugins may depend on them. This module implements C functions and variables and does not register actions or flags. +
loghid272 + WIP + disabled + (feature) + Sits between a HID (or exporter) and the core and logs all core->plugin calls made through the HID structure. +
mincut904 + works + buildin + (feature) + Use the minimal cut algorithm to indicate shorts: instead of highlighting two random pins/pads, try to highlight the least number of objects that connect the two networks. +
oldactions154 + works + disabled + (feature) + Random collection of old/obsolete actions. Bell(): audible feedback; DumpLibrary(): print footprint library on stdout; a set of debug actions useful for writing pcb scripts: Debug(), DebugXY(), Return(). Old plugin actions to toggle or set settings that are now accessible via the unified config system (vendordrill, djopt) +
polycombine207 + works + buildin + (feature) + The selected polygons are combined together according to the ordering of their points. +
polystitch184 + segfaults + disable + (feature) + The polygon under the cursor (based on closest-corner) is stitched together with the polygon surrounding it on the same layer. Use with pstoedit conversions where there's a "hole" in the shape - select the hole. +
propedit772 + works + buildin + (feature) + List and edit properties of a group of objects. +
puller1887 + works + buildin + (feature) + Pull traces to minimize their length. +
query1834 + works + buildin + (feature) + pcb-rnd query language: execute expressions on objects and rules for the programmed drc. +
renumber308 + works + buildin + (feature) + Renumber elements (renaming them) and generate a text file for back annotation. +
report1019 + works + buildin + (feature) + Report() and ReportObject() actions - print a report about design objects. +
rubberband_orig599 + works + buildin + (feature) + The original rubberband code. +
shand_cmd211 + works + buildin + (feature) + vi-like command shorthands (1..3 character long commands) +
smartdisperse172 + works + buildin + (feature) + Improve the initial dispersion of elements by choosing an order based on the netlist, rather than the arbitrary element order. This isn't the same as a global autoplace, it's more of a linear autoplace. It might make some useful local groupings. For example, you should not have to chase all over the board to find the resistor that goes with a given LED. +
stroke135 + partially works (doesn't work with lesstif; works with the gtk hid, but there's no zoom bindings) + disabled + (feature) + Gesture recognition with libstroke. +
teardrops226 + works + buildin + (feature) + Draw teardrops on pins. +
toporouter6161 + fails +
(infinite loop in gts) +
disabled + (feature) + Automatically route selected or all rats using a topological algorithm. This is the new autorouter from 2009. +
vendordrill516 + works + buildin + (feature) + Vendor drill mapping. +
+ +

Classes

+Each plugin implements a class (rarely a set of classes). Classes are: + +
name description +
(feature) random features directly accessible for the user, usually actions +
(lib) support code library for other plugins (core doesn't depend on these); functionality not directly accessible for the user but other plugins may depend on it +
hid Human Interface Device: interactive user interface, usually GUI +
import load alien formats into the design space +
export save (parts of) the design space in alien formats +
fp footprint (element) library implementation +
io native file format (save & load) implementation +
+ + + Index: trunk/doc/developer/mods3/io.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: trunk/doc/developer/mods3/io.png =================================================================== --- trunk/doc/developer/mods3/io.png (nonexistent) +++ trunk/doc/developer/mods3/io.png (revision 5597) Property changes on: trunk/doc/developer/mods3/io.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: trunk/doc/developer/mods3/lib.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: trunk/doc/developer/mods3/lib.png =================================================================== --- trunk/doc/developer/mods3/lib.png (nonexistent) +++ trunk/doc/developer/mods3/lib.png (revision 5597) Property changes on: trunk/doc/developer/mods3/lib.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: trunk/doc/developer/mods3/mods.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: trunk/doc/developer/mods3/mods.png =================================================================== --- trunk/doc/developer/mods3/mods.png (nonexistent) +++ trunk/doc/developer/mods3/mods.png (revision 5597) Property changes on: trunk/doc/developer/mods3/mods.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: trunk/doc/developer/mods3/post.html =================================================================== --- trunk/doc/developer/mods3/post.html (nonexistent) +++ trunk/doc/developer/mods3/post.html (revision 5597) @@ -0,0 +1,17 @@ + + +

Classes

+Each plugin implements a class (rarely a set of classes). Classes are: + +
name description +
(feature) random features directly accessible for the user, usually actions +
(lib) support code library for other plugins (core doesn't depend on these); functionality not directly accessible for the user but other plugins may depend on it +
hid Human Interface Device: interactive user interface, usually GUI +
import load alien formats into the design space +
export save (parts of) the design space in alien formats +
fp footprint (element) library implementation +
io native file format (save & load) implementation +
+ + + Index: trunk/doc/developer/mods3/pre.html =================================================================== --- trunk/doc/developer/mods3/pre.html (nonexistent) +++ trunk/doc/developer/mods3/pre.html (revision 5597) @@ -0,0 +1,85 @@ + + +

pcb-rnd modularization

+

Why bother...

+I believe good software should be modular. This is especially important in +the context of large software, such as CAD applications. There should be +a thin core that can model the world and provide the basic operations defined +on it but anything else should go in separate modules. +

+Fortunately PCB already had a strong infrastructure supporting this idea. +It has dynamic loadable plugins and the GUI and exporters are in separate +HID modules. While working on pcb-gpmi and later pcb-rnd, I added the +gpmi module as a separate plugin. +

+In version 1.0.8 to 1.1.0 a cosiderable chunk of core code has been moved into +core plugins. A core plugin is just a plugin that is +maintained together with the core, in the same repository, still the code is +somewhat detached from the core. More importantly, the user can choose, for +each plugin, separately: +

+

+I believe such modularization has benefits on multiple levels: +

+ +

Progress in charts

+

Before-after

+All numbers are in SLOC +and are acquired running sloccount on the given directory. While lines of +code alone is not a true measure of complexity, it's a good estimation. The +slices of pie charts are the major components of the pcb-rnd executable. +
+ +
        +
Before modularization: pcb-rnd version 1.0.7 +
Note: gpmi was already a plugin +
+ After modularization: pcb-rnd version 1.1.3 +
Note: gpmi is part of the "plugins" slice +
+
+

Zooming on to the plugins

+

+ + + +
total size per class
+
IO plugins
+
+ + + + +
feature plugins
+
export plugins
+
+ + + +
HID plugins
+
import plugins
+
+ + + +
library plugins
+
footprint plugins
+
+ +

+(Red means the plugin doesn't really work). + +

Progress in numbers

+Below is a table with the summary of core plugins. + +
module size [sloc] status configure
default
class description + + Index: trunk/doc/distros.txt =================================================================== --- trunk/doc/distros.txt (nonexistent) +++ trunk/doc/distros.txt (revision 5597) @@ -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: trunk/doc/gpmi_temp_inst.txt =================================================================== --- trunk/doc/gpmi_temp_inst.txt (nonexistent) +++ trunk/doc/gpmi_temp_inst.txt (revision 5597) @@ -0,0 +1,65 @@ +GPMI system-wide installation +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The installation process is somewhat manual at this early stage. Please +follow the steps below. + +First, you'll need libgpmi - it's a general purpose script glue interface. + +A/1. svn checkout svn://repo.hu/gpmi/trunk gpmi/trunk +A/2. look at doc/languages.txt there; if you have preferred languages, +please install the -dev packages of those. My favorite is mawk, but I +think most of the example pcb scripts would be in lua. Versions should +match; it may be that gpmi works with a newer minor version out of the +box, tho. +A/3. run ./configure +A/4. check if it found the language(s) you wanted; if not, or anything +else breaks, please send me your scconfig/config.log +A/5. make +A/6. make install (as root, but see below) + +There are options to step 6: + +- if you want to check what it'd do, you could run this: + + install_root=/tmp/foo make install + + it's like DESTDIR for autotools: it will do everything but will use + /tmp/foo instead of / so you see what it'd do without using root or + messing with /usr + +- you can use make linstall instead of make install; this creates symlinks +(pointing to the binaries in your user checkout) instead of copying the +files. If gpmi changes and you need to update and recompile, you won't +need to reinstall (until the number of files change). + +- there's a make uninstall, but it's more or less untested (failed once +and worked once for me) + +Second, you'll need pcb-rnd: + +B/1. svn checkout svn://repo.hu/pcb-rnd/trunk pcb-rnd/trunk +B/2. ./configure +B/3. check the output; if anything went wrong, please send me +scconfig/config.log +B/4. make +B/5. you don't need to install it for testing: cd src; ./pcb-rnd + + +There are options in step 2: by default, if gpmi is found, it's compiled +in "buildin" mode, which means script support is compiled into the pcb-rnd +executable. An alternative is to have it as a plugin (dynamic linkable +object). This can be done using the --plugin-gpmi argument for ./configure. + + +GPMI local installation +~~~~~~~~~~~~~~~~~~~~~~~ +GPMI can be installed without root, into a local user directory (typically +under home). To achieve this, follow the above steps with the following +modifications (assuming you want to install gpmi in ~/usr): + +A/3. ./configure --prefix=~/usr +B/2. ./configure --gpmi-prefix=~/usr + +NOTE: you don't need to use install_root; gpmi will install under ~/usr as +if it was /usr. Index: trunk/doc/help.html =================================================================== --- trunk/doc/help.html (nonexistent) +++ trunk/doc/help.html (revision 5597) @@ -0,0 +1,62 @@ + + + pcb-rnd - help wanted + + + + + + + + + +
Main + News + People + Events & timeline + pcb-rnd +
+ + +

pcb-rnd - help wanted

+The project is looking for volunteers for the features listed below. If +you want to contribute, you will need to have an svn client and an email +client. Furthermore an IRC client is strongly recommended. +

+You will become part of the team and get svn commit right immediately +when you start working. +

+Don't have much free time? Don't worry: the tasks below are split up in +very small (1..2 hours) chunks. Coordination is granted, the administrative +overhead is almost zero - you can focus on the task, and finish it whenever +you have a free hour. +

+Worrying about your contribution to go in /dev/null? Don't: pcb-rnd +has very short loops; you start contributing and get immediate feedback. Your +work is part of the official thing immediately and revised and accepted (or +rarely refused) within hours or at most days. +There are no bitrotting branches. +

+You are not confident enough with your skills? pcb-rnd is an optimal +project for learning. If you start contributing, you get support. There +are small and simple entry level tasks. Most of the tasks don't require +any programming skills. +

+Sign up: mail to pcb-rnd (at) igor2.repo.hu . +If you want to work on a feature not listed below, feel free to drop me +a mail. +

+ +
ID skill required description +
tutorial geda user tutorial projects +
windows geda user generic testing on windows +
mtest geda user systematic manual testing +
doc geda user, html write sections of user documentation +
logo designer the official pcb-rnd logo +
banner designer pcb-rnd banner for the homepage +
icons designer icons, other graphical elements for the GTK HID +
css designer CSS for the homepage (only design/style, no content). +
atest C/beginner program automated test cases +
+ + Index: trunk/doc/index.html =================================================================== --- trunk/doc/index.html (nonexistent) +++ trunk/doc/index.html (revision 5597) @@ -0,0 +1,124 @@ + + + pcb-rnd - main + + + + + + + + + +
Main + News + People + Events & timeline + pcb-rnd +
+ + +
+ + +
+

Summary

+ +
+
pcb-rnd
+
+ is a flexible, modular Printed Circuit Board editor +

historically is a fork of PCB +

is an informal part of the geda project +

features a lot of small and large improvements and bugfixes + + +

Version Control svn://repo.hu/pcb-rnd/trunk +
Download source releases +
Comments, feedback, patches live chat with the developer
or mail to: pcb-rnd (at) igor2.repo.hu
Mailing list: pcb-rnd (at) list.repo.hu (send a mail with subject: subscribe) +
Contribution and support + How to join or contribute +
We are looking for help. +
Do you have a feature request? + +
Key features + editor for multilayer Printed Circuit Boards +
scriptable in 10+ different scripting languages +
parametric footprint generation, web footprints +
modular code with a flexible plugin system +
fits well in a UNIXy workflow +
supports CLI and server applications +
active development, frequent releases +
friendly and efficient developer and user community +
predictable development cycles +
compatible with KiCad and gEDA/PCB + +
Suported platforms + Linux desktop (various distributions, from source) +
Mac OS X +
Arch Linux (user package) + +
IRIX 5.3 +
(Likely: any 90's UNIX system with motif) +
Screen resolution as small as 800x600 +
GUI options: motif/lesstif, gtk +
+
+ + +
+ + + +

What is -rnd?

+
+ +
RaNDom + When it started, it used to be a random collection of small fixes and improvements. We got much further than that by now. +
+ +

+ + + +
RespoNsive Developers + Developers try to respond on user needs, adding features that are actually needed by current users. +
+ +

+ + +
+ Response Not Delayed + Bugrepots, user requests and patches submitted are answered ASAP. There are no patches bitrotting for months. There are no forgotten bugreports. +
+ +

+ + + +
Research
&
Development
+
+
+ Rázós,
Nehéz
Döntések
(Brave, hard decisions) +
There is a constant experimentation with new features and directions. We are willing to try strange/unusual ideas without risking the stability of the daily workflow. +
+ +

+ + + +
Rants
Now
Dissipating
+
Instead of talking and ranting a lot about what could work better, we just sit down and make it work better. +
+ +

+ + + +
Rather
Nicely
Decentralized
+
Slim, generic core; most of the code organized in replacable plugins. Most plugins depend only on the core. +
+ + + Index: trunk/doc/irc.html =================================================================== --- trunk/doc/irc.html (nonexistent) +++ trunk/doc/irc.html (revision 5597) @@ -0,0 +1,43 @@ + + + pcb-rnd - IRC + + + + + + + + + +
Main + News + People + Events & timeline + pcb-rnd +
+ + +

Live support via IRC (chat)

+
Irc server: repo.hu       Port: 6667       Channel: #pcb-rnd +
  +

I'm normally online as Igor2 between 5:00 CET and 19:00 CET; on Sunday there's an AFK-window between 11:00 CET and 16:00 CET. If I don't answer in a few minutes I'm probably away doing something, please be patient; say hi before you type your long question so you see if I'm available. +


+

+Below is an iframe of +kiwiirc irc client configured with the above settings. If it doesn't +work, please visit their page and +try to manually configure it, it's just 4 fields. +

+Using the web client: you may change your nickname; there's no password +or registration or channel key or ssl of any form. Your real IP won't be +shown on the IRC network (check kiwiirc's page about thier privacy +policy). +

+Connecting with the web client may take some time, give it a minute. +


+ + + + + Index: trunk/doc/keys.html =================================================================== --- trunk/doc/keys.html (nonexistent) +++ trunk/doc/keys.html (revision 5597) @@ -0,0 +1,684 @@ + +

Key to action bindings

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
key pcb-menu-lesstif.lht pcb-menu-gtk.lht +
. + 'All-direction' lines
conf(toggle, editor/all_direction_lines, design) +
'All-direction' lines
conf(toggle, editor/all_direction_lines, design) +
/ + Cycle Clip
Display(CycleClip) +
Cycle Clip
Display(CycleClip) +
0 + Select Layer 10
SelectLayer(10) +
Select Layer 10
SelectLayer(10) +
0-alt + Select Layer 20
SelectLayer(20) +
Select Layer 20
SelectLayer(20) +
0-alt-ctrl + Toggle Layer 20
ToggleView(20) +
Toggle Layer 20
ToggleView(20) +
0-ctrl + Toggle Layer 10
ToggleView(10) +
Toggle Layer 10
ToggleView(10) +
1 + Select Layer 1
SelectLayer(1) +
Select Layer 1
SelectLayer(1) +
1-alt + Select Layer 11
SelectLayer(11) +
Select Layer 11
SelectLayer(11) +
1-alt-ctrl + Toggle Layer 11
ToggleView(11) +
Toggle Layer 11
ToggleView(11) +
1-ctrl + Toggle Layer 1
ToggleView(1) +
Toggle Layer 1
ToggleView(1) +
1-shift + #1
PasteBuffer(1) +
Select Buffer #1
PasteBuffer(1) +
2 + Select Layer 2
SelectLayer(2) +
Select Layer 2
SelectLayer(2) +
2-alt + Select Layer 12
SelectLayer(12) +
Select Layer 12
SelectLayer(12) +
2-alt-ctrl + Toggle Layer 12
ToggleView(12) +
Toggle Layer 12
ToggleView(12) +
2-ctrl + Toggle Layer 2
ToggleView(2) +
Toggle Layer 2
ToggleView(2) +
2-shift + #2
PasteBuffer(2) +
Select Buffer #2
PasteBuffer(2) +
3 + Select Layer 3
SelectLayer(3) +
Select Layer 3
SelectLayer(3) +
3-alt + Select Layer 13
SelectLayer(13) +
Select Layer 13
SelectLayer(13) +
3-alt-ctrl + Toggle Layer 13
ToggleView(13) +
Toggle Layer 13
ToggleView(13) +
3-ctrl + Toggle Layer 3
ToggleView(3) +
Toggle Layer 3
ToggleView(3) +
3-shift + #3
PasteBuffer(3) +
Select Buffer #3
PasteBuffer(3) +
4 + Select Layer 4
SelectLayer(4) +
Select Layer 4
SelectLayer(4) +
4-alt + Select Layer 14
SelectLayer(14) +
Select Layer 14
SelectLayer(14) +
4-alt-ctrl + Toggle Layer 14
ToggleView(14) +
Toggle Layer 14
ToggleView(14) +
4-ctrl + Toggle Layer 4
ToggleView(4) +
Toggle Layer 4
ToggleView(4) +
4-shift + #4
PasteBuffer(4) +
Select Buffer #4
PasteBuffer(4) +
5 + Select Layer 5
SelectLayer(5) +
Select Layer 5
SelectLayer(5) +
5-alt + Select Layer 15
SelectLayer(15) +
Select Layer 15
SelectLayer(15) +
5-alt-ctrl + Toggle Layer 15
ToggleView(15) +
Toggle Layer 15
ToggleView(15) +
5-ctrl + Toggle Layer 5
ToggleView(5) +
Toggle Layer 5
ToggleView(5) +
5-shift + #5
PasteBuffer(5) +
Select Buffer #5
PasteBuffer(5) +
6 + Select Layer 6
SelectLayer(6) +
Select Layer 6
SelectLayer(6) +
6-alt + Select Layer 16
SelectLayer(16) +
Select Layer 16
SelectLayer(16) +
6-alt-ctrl + Toggle Layer 16
ToggleView(16) +
Toggle Layer 16
ToggleView(16) +
6-ctrl + Toggle Layer 6
ToggleView(6) +
Toggle Layer 6
ToggleView(6) +
7 + Select Layer 7
SelectLayer(7) +
Select Layer 7
SelectLayer(7) +
7-alt + Select Layer 17
SelectLayer(17) +
Select Layer 17
SelectLayer(17) +
7-alt-ctrl + Toggle Layer 17
ToggleView(17) +
Toggle Layer 17
ToggleView(17) +
7-ctrl + Toggle Layer 7
ToggleView(7) +
Toggle Layer 7
ToggleView(7) +
8 + Select Layer 8
SelectLayer(8) +
Select Layer 8
SelectLayer(8) +
8-alt + Select Layer 18
SelectLayer(18) +
Select Layer 18
SelectLayer(18) +
8-alt-ctrl + Toggle Layer 18
ToggleView(18) +
Toggle Layer 18
ToggleView(18) +
8-ctrl + Toggle Layer 8
ToggleView(8) +
Toggle Layer 8
ToggleView(8) +
9 + Select Layer 9
SelectLayer(9) +
Select Layer 9
SelectLayer(9) +
9-alt + Select Layer 19
SelectLayer(19) +
Select Layer 19
SelectLayer(19) +
9-alt-ctrl + Toggle Layer 19
ToggleView(19) +
Toggle Layer 19
ToggleView(19) +
9-ctrl + Toggle Layer 9
ToggleView(9) +
Toggle Layer 9
ToggleView(9) +
: + Command
Command() +
Command Entry
Command() +
= + SimpleOpts
djopt(simple) +
Simple optimization
djopt(simple) +
=-shift + Auto-Optimize
djopt(auto) +
Auto-Optimize
djopt(auto) +
[ + Temp Arrow ON
Mode(Save); Mode(Arrow); Mode(Notify) +
Temp Arrow ON
Mode(Save); Mode(Arrow); Mode(Notify) +
\ +   + Full screen
fullscreen(toggle) +
] + Temp Arrow OFF
Mode(Release); Mode(Restore) +
Temp Arrow OFF
Mode(Release); Mode(Restore) +
` + Zoom Toggle
Zoom(Toggle) +
  +
a + Set Same
SetSame() +
Set Same
SetSame() +
a-alt + Select all visible
Select(All) +
Select all visible
Select(All) +
a-alt-shift + Unselect all
Unselect(All) +
Unselect all
Unselect(All) +
b + Flip Object
Flip(Object) +
Flip Object
Flip(Object) +
b-alt-ctrl +   + netlist patch for back annotation
SavePatch() +
b-shift + Move selected elements to other side
Flip(SelectedElements) +
Move selected elements to other side
Flip(SelectedElements) +
backspace + Remove
Delete(Selected) +
Remove Selected
RemoveSelected() +
backspace-shift + Remove Connected
Atomic(Save); Connection(Reset); Atomic(Restore); Unselect(All); Atomic(Restore); Connection(Find); Atomic(Restore); Select(Connection); Atomic(Restore); RemoveSelected(); Atomic(Restore); Connection(Reset); Atomic(Restore); Unselect(All); Atomic(Block) +
Remove Connected
Atomic(Save); Connection(Reset); Atomic(Restore); Unselect(All); Atomic(Restore); Connection(Find); Atomic(Restore); Select(Connection); Atomic(Restore); RemoveSelected(); Atomic(Restore); Connection(Reset); Atomic(Restore); Unselect(All); Atomic(Block) +
c + Center cursor
Center() +
Center cursor
Center() +
c-ctrl + Copy selection to buffer
GetXY(Click to set the snap point for this buffer); PasteBuffer(Clear); PasteBuffer(AddSelected); Mode(PasteBuffer) +
Copy selection to buffer
GetXY(Click to set the snap point for this buffer); PasteBuffer(Clear); PasteBuffer(AddSelected); Unselect(All); Mode(PasteBuffer) +
d + Pins/Via show Name/Number
Display(PinOrPadName) +
Pins/Via show Name/Number
Display(PinOrPadName) +
d-shift + Pinout
Display(Pinout) +
Error: key prefix collision +
Pinout
Display(Pinout) +
delete + Delete selected objects
Delete(Selected) +
Remove
Mode(Save); Mode(Remove); Mode(Notify); Mode(Restore) +
delete-shift + Remove Connected
Atomic(Save); Connection(Reset); Atomic(Restore); Unselect(All); Atomic(Restore); Connection(Find); Atomic(Restore); Select(Connection); Atomic(Restore); RemoveSelected(); Atomic(Restore); Connection(Reset); Atomic(Restore); Unselect(All); Atomic(Block) +
Remove selected objects
RemoveSelected() +
down + Step Down
Cursor(Warp,0,-1,grid) +
Step Down
Cursor(Warp,0,-1,grid) +
down-shift + Step +Down
Cursor(Pan,0,-50,view) +
Step +Down
Cursor(Pan,0,-50,view) +
e + Erase rats-nest
DeleteRats(AllRats) +
Erase rats nest
DeleteRats(AllRats) +
e-ctrl +   + Edit properties of selected...
PropEdit(Selected) +
e-shift + Erase selected rats
DeleteRats(SelectedRats) +
Erase selected rats
DeleteRats(SelectedRats) +
enter + "Click"
Mode(Notify); Mode(Release) +
Click
Mode(Notify); Mode(Release) +
escape + Cancel
Mode(Cancel) +
Cancel
Mode(Escape) +
f + Find Connections
Connection(Reset); Connection(Find) +
Find Connections
Connection(Reset); Connection(Find) +
f-alt-shift +   + Replace footprint
ReplaceFootprint() +
f-ctrl + Lookup connection to object
GetXY(Click on the object); Connection(Find) +
Lookup connection to object
GetXY(Click on the object); Connection(Find) +
f-shift + Reset all connections
Connection(Reset); Display(Redraw) +
Reset all connections
Connection(Reset); Display(Redraw) +
f1 + Via
Mode(Via) +
Via
Mode(Via) +
f10 + Thermal
Mode(Thermal) +
Thermal
Mode(Thermal) +
f11 + Arrow
Mode(Arrow) +
Arrow
Mode(Arrow) +
f12 + Lock
Mode(Lock) +
Lock
Mode(Lock) +
f2 + Line
Mode(Line) +
Line
Mode(Line) +
f3 + Arc
Mode(Arc) +
Arc
Mode(Arc) +
f4 + Text
Mode(Text) +
Text
Mode(Text) +
f5 + Rectangle
Mode(Rectangle) +
Rectangle
Mode(Rectangle) +
f6 + Polygon
Mode(Polygon) +
Polygon
Mode(Polygon) +
f7 + Buffer
Mode(PasteBuffer) +
Buffer
Mode(PasteBuffer) +
f7-shift + Rotate buffer 90 deg CCW
Mode(PasteBuffer); PasteBuffer(Rotate,1) +
Rotate buffer 90 deg CCW
Mode(PasteBuffer); PasteBuffer(Rotate,1) +
f8 + Remove
Mode(Remove) +
Remove
Mode(Remove) +
f9 + Rotate
Mode(Rotate) +
Rotate
Mode(Rotate) +
g + Grid +5mil
SetValue(Grid,+5,mil) +
Grid +5mil
SetValue(Grid,+5,mil) +
g-ctrl + Grid +0.05mm
SetValue(Grid,+0.05,mm) +
Grid +0.05mm
SetValue(Grid,+0.05,mm) +
g-ctrl-shift + Grid -0.05mm
SetValue(Grid,-0.05,mm) +
Grid -0.05mm
SetValue(Grid,-0.05,mm) +
g-shift + Grid -5mil
SetValue(Grid,-5,mil) +
Grid -5mil
SetValue(Grid,-5,mil) +
h + ToggleHideName Object
ToggleHideName(Object) +
ToggleHideName Object
ToggleHideName(Object) +
h-ctrl + ChangeHole Object
ChangeHole(Object) +
ChangeHole Object
ChangeHole(Object) +
h-shift + ToggleHideName SelectedElement
ToggleHideName(SelectedElements) +
ToggleHideName SelectedElement
ToggleHideName(SelectedElements) +
i +   + Library
DoWindows(Library) +
insert + Insert Point
Mode(InsertPoint) +
Insert Point
Mode(InsertPoint) +
j + ChangeJoin Object
ChangeJoin(Object) +
ChangeJoin Object
ChangeJoin(Object) +
j-shift + ChangeJoin SelectedObject
ChangeJoin(SelectedObjects) +
ChangeJoin SelectedObject
ChangeJoin(SelectedObjects) +
k + Clear Object +2 mil
ChangeClearSize(Object,+2,mil) +
Clear Object +2 mil
ChangeClearSize(Object,+2,mil) +
k-ctrl + Clear Selected +2 mil
ChangeClearSize(SelectedObjects,+2,mil) +
Clear Selected +2 mil
ChangeClearSize(SelectedObjects,+2,mil) +
k-ctrl-shift + Clear Selected -2 mil
ChangeClearSize(SelectedObjects,-2,mil) +
Clear Selected -2 mil
ChangeClearSize(SelectedObjects,-2,mil) +
k-shift + Clear Object -2 mil
ChangeClearSize(Object,-2,mil) +
Clear Object -2 mil
ChangeClearSize(Object,-2,mil) +
l + Line Tool size +5 mil
SetValue(LineSize,+5,mil) +
Line Tool size +5 mil
SetValue(LineSize,+5,mil) +
l-shift + Line Tool size -5 mil
SetValue(LineSize,-5,mil) +
Line Tool size -5 mil
SetValue(LineSize,-5,mil) +
left + Step Left
Cursor(Warp,-1,0,grid) +
Step Left
Cursor(Warp,-1,0,grid) +
left-shift + Step +Left
Cursor(Pan,-50,0,view) +
Step +Left
Cursor(Pan,-50,0,view) +
m + Move Object to current layer
MoveToCurrentLayer(Object) +
Move Object to current layer
MoveToCurrentLayer(Object) +
m-ctrl + MarkCrosshair
MarkCrosshair() +
MarkCrosshair
MarkCrosshair() +
m-shift + Move selected to current layer
MoveToCurrentLayer(Selected) +
Move selected to current layer
MoveToCurrentLayer(Selected) +
n + Change text on layout
ChangeName(Object) +
text on layout
ChangeName(Object) +
n-alt +   + Nonetlist
ChangeNonetlist(Element) +
n-ctrl + Start new layout
New() +
Start New Layout
New() +
n-ctrl-shift + Change text on layout
ChangeName(Object, Number) +
pin on layout
ChangeName(Object, Number) +
n-shift + Select shortest rat
AddRats(Close) +
Select shortest rat
AddRats(Close) +
o + Optimize rats-nest
Atomic(Save); DeleteRats(AllRats); Atomic(Restore); AddRats(AllRats); Atomic(Block) +
Optimize rats nest
Atomic(Save); DeleteRats(AllRats); Atomic(Restore); AddRats(AllRats); Atomic(Block) +
o-ctrl + ChangeOctagon Object
ChangeOctagon(Object) +
ChangeOctagon Object
ChangeOctagon(Object) +
o-shift + AddRats to selected pins
Atomic(Save); DeleteRats(AllRats); Atomic(Restore); AddRats(SelectedRats); Atomic(Block) +
AddRats to selected pins
Atomic(Save); DeleteRats(AllRats); Atomic(Restore); AddRats(SelectedRats); Atomic(Block) +
p + Polygon PreviousPoint
Polygon(PreviousPoint) +
Polygon PreviousPoint
Polygon(PreviousPoint) +
p-alt + Manage plugins...
ManagePlugins() +
Manage plugins...
ManagePlugins() +
p-ctrl + Auto-place selected elements
AutoPlaceSelected() +
Auto-place selected elements
AutoPlaceSelected() +
p-ctrl-shift + Thin draw poly
conf(toggle, editor/thin_draw_poly, design) +
Thin draw poly
conf(toggle, editor/thin_draw_poly, design) +
p-shift + Polygon Close
Polygon(Close) +
Polygon Close
Polygon(Close) +
q + ChangeSquare Object
ChangeSquare(Object) +
ChangeSquare Object
ChangeSquare(ToggleObject) +
q-ctrl + Quit Program
Quit() +
Quit Program
Quit() +
r + Report net length
Report(NetLength) +
  +
r-alt + Auto-route selected rats
AutoRoute(SelectedRats) +
Auto-route selected rats
AutoRoute(SelectedRats) +
r-ctrl + Generate object report
ReportObject() +
Generate object report
ReportObject() +
r-shift + Redo last undone operation
Redo() +
Redo last undone operation
Redo() +
right + Step Right
Cursor(Warp,1,0,grid) +
Step Right
Cursor(Warp,1,0,grid) +
right-shift + Step +Right
Cursor(Pan,50,0,view) +
Step +Right
Cursor(Pan,50,0,view) +
s + ChangeSize +5 mil
ChangeSize(Object,+5,mil) +
ChangeSize +5 mil
ChangeSize(Object,+5,mil) +
s-alt + ChangeDrill +5 mil
ChangeDrillSize(Object,+5,mil) +
ChangeDrill +5 mil
ChangeDrillSize(Object,+5,mil) +
s-alt-shift + ChangeDrill -5 mil
ChangeDrillSize(Object,-5,mil) +
ChangeDrill -5 mil
ChangeDrillSize(Object,-5,mil) +
s-ctrl + Save layout
Save(Layout) +
Save Layout
Save(Layout) +
s-ctrl-shift + Save layout as...
Save(LayoutAs) +
Save Layout As...
Save(LayoutAs) +
s-shift + ChangeSize -5 mil
ChangeSize(Object,-5,mil) +
ChangeSize -5 mil
ChangeSize(Object,-5,mil) +
space + Arrow
Mode(Arrow) +
Arrow Mode
Mode(Arrow) +
t + Text Tool scale +10 mil
SetValue(TextScale,+10,mil) +
Text Tool scale +10 mil
SetValue(TextScale,+10,mil) +
t-shift + Text Tool scale -10 mil
SetValue(TextScale,-10,mil) +
Text Tool scale -10 mil
SetValue(TextScale,-10,mil) +
tab + Flip up/down
SwapSides(V) +
Flip up/down
SwapSides(V) +
tab-ctrl + Spin 180°
SwapSides(R) +
Spin 180 degrees
SwapSides(R) +
tab-ctrl-shift + Swap Sides
SwapSides() +
Swap Sides
SwapSides() +
tab-shift + Flip left/right
SwapSides(H) +
Flip left/right
SwapSides(H) +
u + Undo last operation
Undo() +
Undo last operation
Undo() +
u-ctrl-shift + Clear undo-buffer
Undo(ClearList) +
Clear undo-buffer
Undo(ClearList) +
up + Step Up
Cursor(Warp,0,1,grid) +
Step Up
Cursor(Warp,0,1,grid) +
up-shift + Step +Up
Cursor(Pan,0,50,view) +
Step +Up
Cursor(Pan,0,50,view) +
v + Zoom Max
Zoom() +
Zoom Max
Zoom() +
v-alt + Via Tool drill +5 mil
SetValue(ViaDrillingHole,+5,mil) +
Via Tool drill +5 mil
SetValue(ViaDrillingHole,+5,mil) +
v-alt-shift + Via Tool drill -5 mil
SetValue(ViaDrillingHole,-5,mil) +
Via Tool drill -5 mil
SetValue(ViaDrillingHole,-5,mil) +
v-ctrl + Paste buffer to layout
Mode(PasteBuffer) +
Paste buffer to layout
Mode(PasteBuffer) +
v-ctrl-shift + Via Tool size -5 mil
SetValue(ViaSize,-5,mil) +
Via Tool size -5 mil
SetValue(ViaSize,-5,mil) +
v-shift + Via Tool size +5 mil
SetValue(ViaSize,+5,mil) +
Via Tool size +5 mil
SetValue(ViaSize,+5,mil) +
w + Add All Rats
AddRats(AllRats) +
Add All Rats
AddRats(AllRats) +
w-shift + AddRats Selected
AddRats(SelectedRats) +
AddRats Selected
AddRats(SelectedRats) +
x +   + Cycle object being dragged
CycleDrag() +
x-ctrl + Cut selection to buffer
GetXY(Click to set the snap point for this buffer); PasteBuffer(Clear); PasteBuffer(AddSelected); RemoveSelected(); Mode(PasteBuffer) +
Cut selection to buffer
GetXY(Click to set the snap point for this buffer); PasteBuffer(Clear); PasteBuffer(AddSelected); RemoveSelected(); Mode(PasteBuffer) +
x-shift +   + Swap nets on two selected pins
net(swap) +
y + Puller
Puller() +
Puller
Puller() +
y-shift + ChangeSizes to Route style
ChangeSizes(Object,style,mil) +
ChangeSizes to Route style
ChangeSizes(Object,style,mil) +
z + Zoom In 20%
Zoom(-1.2) +
Zoom In 20%
Zoom(-1.2) +
z-alt + Undo
Undo() +
  +
z-shift + Zoom Out 20%
Zoom(+1.2) +
Zoom Out 20%
Zoom(+1.2) +
| + Thin draw
conf(toggle, editor/thin_draw, design) +
Thin draw
conf(toggle, editor/thin_draw, design) +
+
pcb-menu-lesstif.lht: d-shift vs. d-shift; + Index: trunk/doc/keys_mkey.html =================================================================== --- trunk/doc/keys_mkey.html (nonexistent) +++ trunk/doc/keys_mkey.html (revision 5597) @@ -0,0 +1,508 @@ + +

Key to action bindings

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
key pcb-menu-mkey.lht +
. + 'All-direction' lines
conf(toggle, editor/all_direction_lines, design) +
/ + Cycle Clip
Display(CycleClip) +
0 + Select Layer 10
SelectLayer(10) +
0-alt + Select Layer 20
SelectLayer(20) +
0-alt-ctrl + Toggle Layer 20
ToggleView(20) +
0-ctrl + Toggle Layer 10
ToggleView(10) +
1 + Select Layer 1
SelectLayer(1) +
1-alt + Select Layer 11
SelectLayer(11) +
1-alt-ctrl + Toggle Layer 11
ToggleView(11) +
1-ctrl + Toggle Layer 1
ToggleView(1) +
1-shift + Buffer/Select Buffer #1
PasteBuffer(1) +
2 + Select Layer 2
SelectLayer(2) +
2-alt + Select Layer 12
SelectLayer(12) +
2-alt-ctrl + Toggle Layer 12
ToggleView(12) +
2-ctrl + Toggle Layer 2
ToggleView(2) +
2-shift + Buffer/Select Buffer #2
PasteBuffer(2) +
3 + Select Layer 3
SelectLayer(3) +
3-alt + Select Layer 13
SelectLayer(13) +
3-alt-ctrl + Toggle Layer 13
ToggleView(13) +
3-ctrl + Toggle Layer 3
ToggleView(3) +
3-shift + Buffer/Select Buffer #3
PasteBuffer(3) +
4 + Select Layer 4
SelectLayer(4) +
4-alt + Select Layer 14
SelectLayer(14) +
4-alt-ctrl + Toggle Layer 14
ToggleView(14) +
4-ctrl + Toggle Layer 4
ToggleView(4) +
4-shift + Buffer/Select Buffer #4
PasteBuffer(4) +
5 + Select Layer 5
SelectLayer(5) +
5-alt + Select Layer 15
SelectLayer(15) +
5-alt-ctrl + Toggle Layer 15
ToggleView(15) +
5-ctrl + Toggle Layer 5
ToggleView(5) +
5-shift + Buffer/Select Buffer #5
PasteBuffer(5) +
6 + Select Layer 6
SelectLayer(6) +
6-alt + Select Layer 16
SelectLayer(16) +
6-alt-ctrl + Toggle Layer 16
ToggleView(16) +
6-ctrl + Toggle Layer 6
ToggleView(6) +
7 + Select Layer 7
SelectLayer(7) +
7-alt + Select Layer 17
SelectLayer(17) +
7-alt-ctrl + Toggle Layer 17
ToggleView(17) +
7-ctrl + Toggle Layer 7
ToggleView(7) +
8 + Select Layer 8
SelectLayer(8) +
8-alt + Select Layer 18
SelectLayer(18) +
8-alt-ctrl + Toggle Layer 18
ToggleView(18) +
8-ctrl + Toggle Layer 8
ToggleView(8) +
9 + Select Layer 9
SelectLayer(9) +
9-alt + Select Layer 19
SelectLayer(19) +
9-alt-ctrl + Toggle Layer 19
ToggleView(19) +
9-ctrl + Toggle Layer 9
ToggleView(9) +
: + Command Entry
Command() +
= + Simple optimization
djopt(simple) +
=-shift + Auto-Optimize
djopt(auto) +
[ + Grid -5mil
SetValue(Grid,-5,mil) +
\ + Full screen
fullscreen(toggle) +
] + Grid +5mil
SetValue(Grid,+5,mil) +
a-alt + Select all visible
Select(All) +
a-alt-shift + Unselect all
Unselect(All) +
a
 c +
Library
DoWindows(Library) +
b + Flip Object
Flip(Object) +
b-alt-ctrl + netlist patch for back annotation
SavePatch() +
b-shift + Move selected elements to other side
Flip(SelectedElements) +
backspace + Remove Selected
RemoveSelected() +
backspace-shift + Remove Connected
Atomic(Save); Connection(Reset); Atomic(Restore); Unselect(All); Atomic(Restore); Connection(Find); Atomic(Restore); Select(Connection); Atomic(Restore); RemoveSelected(); Atomic(Restore); Connection(Reset); Atomic(Restore); Unselect(All); Atomic(Block) +
c + Center cursor
Center() +
c-ctrl
  +
Copy selection to buffer
GetXY(Click to set the snap point for this buffer); PasteBuffer(Clear); PasteBuffer(AddSelected); Unselect(All); Mode(PasteBuffer) +
d + Pins/Via show Name/Number
Display(PinOrPadName) +
d-shift + Pinout
Display(Pinout) +
delete + Remove
Mode(Save); Mode(Remove); Mode(Notify); Mode(Restore) +
delete-shift + Remove selected objects
RemoveSelected() +
down + Step Down
Cursor(Warp,0,-1,grid) +
down-shift + Step +Down
Cursor(Pan,0,-50,view) +
e-shift + Erase selected rats
DeleteRats(SelectedRats) +
e
 c +
Copy selection to buffer
GetXY(Click to set the snap point for this buffer); PasteBuffer(Clear); PasteBuffer(AddSelected); Unselect(All); Mode(PasteBuffer) +
e
 d +
Remove
Mode(Save); Mode(Remove); Mode(Notify); Mode(Restore) +
e
 i +
Buffer/Mirror buffer (up/down)
Mode(PasteBuffer); PasteBuffer(Mirror) +
e
 r +
Rotate buffer 90 deg CCW
+
e
 r-shift +
Redo last undone operation
Redo() +
e
 u-shift +
Undo last operation
Undo() +
e
 x +
text on layout
ChangeName(Object) +
enter + Click
Mode(Notify); Mode(Release) +
f-alt-shift + Replace footprint
ReplaceFootprint() +
f-ctrl + Lookup connection to object
GetXY(Click on the object); Connection(Find) +
f-shift + Reset all connections
Connection(Reset); Display(Redraw) +
f
 a +
Save Layout As...
Save(LayoutAs) +
f
 c +
Quit Program
Quit() +
f
 i +
Export layout...
ExportGUI() +
f
 n +
Start New Layout
New() +
f
 o +
Load layout
Load(Layout) +
f
 p +
Print layout...
Print() +
f
 r +
Revert
Load(Revert,none) +
f
 s +
Save Layout
Save(Layout) +
g + Grid +5mil
SetValue(Grid,+5,mil) +
g-ctrl + Grid +0.05mm
SetValue(Grid,+0.05,mm) +
g-ctrl-shift + Grid -0.05mm
SetValue(Grid,-0.05,mm) +
g-shift + Grid -5mil
SetValue(Grid,-5,mil) +
h-ctrl + ChangeHole Object
ChangeHole(Object) +
h-shift + ToggleHideName SelectedElement
ToggleHideName(SelectedElements) +
h
 a +
About...
About() +
j + ChangeJoin Object
ChangeJoin(Object) +
j-shift + ChangeJoin SelectedObject
ChangeJoin(SelectedObjects) +
k + Clear Object +2 mil
ChangeClearSize(Object,+2,mil) +
k-ctrl + Clear Selected +2 mil
ChangeClearSize(SelectedObjects,+2,mil) +
k-ctrl-shift + Clear Selected -2 mil
ChangeClearSize(SelectedObjects,-2,mil) +
k-shift + Clear Object -2 mil
ChangeClearSize(Object,-2,mil) +
l + Line Tool size +5 mil
SetValue(LineSize,+5,mil) +
l-shift + Line Tool size -5 mil
SetValue(LineSize,-5,mil) +
left + Step Left
Cursor(Warp,-1,0,grid) +
left-shift + Step +Left
Cursor(Pan,-50,0,view) +
m + Move Object to current layer
MoveToCurrentLayer(Object) +
m-ctrl + MarkCrosshair
MarkCrosshair() +
m-shift + Move selected to current layer
MoveToCurrentLayer(Selected) +
n + text on layout
ChangeName(Object) +
n-alt + Nonetlist
ChangeNonetlist(Element) +
n-ctrl + Start New Layout
New() +
n-ctrl-shift + pin on layout
ChangeName(Object, Number) +
n-shift + Select shortest rat
AddRats(Close) +
o + Optimize rats nest
Atomic(Save); DeleteRats(AllRats); Atomic(Restore); AddRats(AllRats); Atomic(Block) +
o-ctrl + ChangeOctagon Object
ChangeOctagon(Object) +
o-shift + AddRats to selected pins
Atomic(Save); DeleteRats(AllRats); Atomic(Restore); AddRats(SelectedRats); Atomic(Block) +
p + Polygon PreviousPoint
Polygon(PreviousPoint) +
p-alt + Manage plugins...
ManagePlugins() +
p-ctrl + Auto-place selected elements
AutoPlaceSelected() +
p-ctrl-shift + Thin draw poly
conf(toggle, editor/thin_draw_poly, design) +
p-shift + Polygon Close
Polygon(Close) +
q + ChangeSquare Object
ChangeSquare(ToggleObject) +
q-ctrl + Quit Program
Quit() +
r-alt + Auto-route selected rats
AutoRoute(SelectedRats) +
r-ctrl + Generate object report
ReportObject() +
r-shift + Redo last undone operation
Redo() +
right + Step Right
Cursor(Warp,1,0,grid) +
right-shift + Step +Right
Cursor(Pan,50,0,view) +
s + ChangeSize +5 mil
ChangeSize(Object,+5,mil) +
s-alt + ChangeDrill +5 mil
ChangeDrillSize(Object,+5,mil) +
s-alt-shift + ChangeDrill -5 mil
ChangeDrillSize(Object,-5,mil) +
s-ctrl + Save Layout
Save(Layout) +
s-ctrl-shift + Save Layout As...
Save(LayoutAs) +
s-shift + ChangeSize -5 mil
ChangeSize(Object,-5,mil) +
space + Arrow Mode
Mode(Arrow) +
t + Text Tool scale +10 mil
SetValue(TextScale,+10,mil) +
t-shift + Text Tool scale -10 mil
SetValue(TextScale,-10,mil) +
tab + Flip up/down
SwapSides(V) +
tab-ctrl + Spin 180 degrees
SwapSides(R) +
tab-ctrl-shift + Swap Sides
SwapSides() +
tab-shift + Flip left/right
SwapSides(H) +
u + Undo last operation
Undo() +
u-ctrl-shift + Clear undo-buffer
Undo(ClearList) +
up + Step Up
Cursor(Warp,0,1,grid) +
up-shift + Step +Up
Cursor(Pan,0,50,view) +
v-alt + Via Tool drill +5 mil
SetValue(ViaDrillingHole,+5,mil) +
v-alt-shift + Via Tool drill -5 mil
SetValue(ViaDrillingHole,-5,mil) +
v-ctrl + Paste buffer to layout
Mode(PasteBuffer) +
v-ctrl-shift + Via Tool size -5 mil
SetValue(ViaSize,-5,mil) +
v-shift + Via Tool size +5 mil
SetValue(ViaSize,+5,mil) +
v
 e +
Zoom Max
Zoom() +
v
 f +
Zoom Max
Zoom() +
v
 i +
Zoom In 2X
Zoom(-2) +
v
 o +
Zoom Out 2X
Zoom(+2) +
w + Add All Rats
AddRats(AllRats) +
w-shift + AddRats Selected
AddRats(SelectedRats) +
x + Cycle object being dragged
CycleDrag() +
x-ctrl + Cut selection to buffer
GetXY(Click to set the snap point for this buffer); PasteBuffer(Clear); PasteBuffer(AddSelected); RemoveSelected(); Mode(PasteBuffer) +
x-shift + Swap nets on two selected pins
net(swap) +
y + Puller
Puller() +
y-ctrl + Redo last undone operation
Redo() +
y-shift + ChangeSizes to Route style
ChangeSizes(Object,style,mil) +
z + Zoom In 20%
Zoom(-1.2) +
z-ctrl + Undo last operation
Undo() +
z-shift + Zoom Out 20%
Zoom(+1.2) +
| + Thin draw
conf(toggle, editor/thin_draw, design) +
+ + Index: trunk/doc/logo.pcb =================================================================== --- trunk/doc/logo.pcb (nonexistent) +++ trunk/doc/logo.pcb (revision 5597) @@ -0,0 +1,91 @@ +# release: pcb-rnd 1.1.0 + +# To read pcb files, the pcb version (or the git source date) must be >= the file version +FileVersion[20070407] + +PCB["" 15240000nm 15240000nm] + +Grid[635000nm 0 0 1] +Cursor[13335000nm 8890000nm 0.000000] +PolyArea[3100.006200] +Thermal[0.500000] +DRC[304800nm 228600nm 254000nm 177800nm 381000nm 254000nm] +Flags("nameonpcb,clearnew,snappin") +Groups("1,3,4,c:2,5,6,s:7:8") +Styles["Signal,254000nm,1999996nm,800100nm,508000nm:Power,508000nm,2199894nm,999998nm,508000nm:Fat,2032000nm,3500120nm,1199896nm,635000nm:Sig-tight,254000nm,1625600nm,800100nm,304800nm"] + +Symbol['r' 304800nm] +( + SymbolLine[127000nm 889000nm 127000nm 1270000nm 203200nm] + SymbolLine[127000nm 889000nm 254000nm 762000nm 203200nm] + SymbolLine[254000nm 762000nm 508000nm 762000nm 203200nm] + SymbolLine[0 762000nm 127000nm 889000nm 203200nm] +) +Symbol['n' 304800nm] +( + SymbolLine[127000nm 889000nm 127000nm 1270000nm 203200nm] + SymbolLine[127000nm 889000nm 254000nm 762000nm 203200nm] + SymbolLine[254000nm 762000nm 381000nm 762000nm 203200nm] + SymbolLine[381000nm 762000nm 508000nm 889000nm 203200nm] + SymbolLine[508000nm 889000nm 508000nm 1270000nm 203200nm] + SymbolLine[0 762000nm 127000nm 889000nm 203200nm] +) +Symbol['d' 304800nm] +( + SymbolLine[508000nm 254000nm 508000nm 1270000nm 203200nm] + SymbolLine[381000nm 1270000nm 508000nm 1143000nm 203200nm] + SymbolLine[127000nm 1270000nm 381000nm 1270000nm 203200nm] + SymbolLine[0 1143000nm 127000nm 1270000nm 203200nm] + SymbolLine[0 889000nm 0 1143000nm 203200nm] + SymbolLine[0 889000nm 127000nm 762000nm 203200nm] + SymbolLine[127000nm 762000nm 381000nm 762000nm 203200nm] + SymbolLine[381000nm 762000nm 508000nm 889000nm 203200nm] +) + + +Attribute("PCB::grid::unit" "mil") +Attribute("PCB::conf::editor/buffer_number" "0") +Attribute("PCB::conf::editor/draw_grid" "true") +Attribute("PCB::conf::editor/show_solder_side" "0") +Attribute("PCB::conf::editor/view/flip_x" "0") +Attribute("PCB::conf::editor/view/flip_y" "0") + +Element["" "dip(2)" "rnd" "2*300" 0 6985000nm 6350000nm 635000nm 0 115 ""] +( + Pin[7620000nm 0 2540000nm 1270000nm 2692400nm 999998nm "" "2" "thermal(0X,1X)"] + + ) +Layer(1 "component") +( + Polygon("clearpoly") + ( + [635000nm 635000nm] [14605000nm 635000nm] [14605000nm 14605000nm] [635000nm 14605000nm] + ) +) +Layer(2 "solder") +( +) +Layer(3 "comp-GND") +( +) +Layer(4 "comp-power") +( +) +Layer(5 "sold-GND") +( +) +Layer(6 "sold-power") +( +) +Layer(7 "signal3") +( +) +Layer(8 "outline") +( +) +Layer(9 "silk") +( +) +Layer(10 "silk") +( +) Index: trunk/doc/logo128.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: trunk/doc/logo128.png =================================================================== --- trunk/doc/logo128.png (nonexistent) +++ trunk/doc/logo128.png (revision 5597) Property changes on: trunk/doc/logo128.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: trunk/doc/logo16.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: trunk/doc/logo16.png =================================================================== --- trunk/doc/logo16.png (nonexistent) +++ trunk/doc/logo16.png (revision 5597) Property changes on: trunk/doc/logo16.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: trunk/doc/logo256.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: trunk/doc/logo256.png =================================================================== --- trunk/doc/logo256.png (nonexistent) +++ trunk/doc/logo256.png (revision 5597) Property changes on: trunk/doc/logo256.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: trunk/doc/logo32.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: trunk/doc/logo32.png =================================================================== --- trunk/doc/logo32.png (nonexistent) +++ trunk/doc/logo32.png (revision 5597) Property changes on: trunk/doc/logo32.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: trunk/doc/logo64.png =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: trunk/doc/logo64.png =================================================================== --- trunk/doc/logo64.png (nonexistent) +++ trunk/doc/logo64.png (revision 5597) Property changes on: trunk/doc/logo64.png ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: trunk/doc/mac.txt =================================================================== --- trunk/doc/mac.txt (nonexistent) +++ trunk/doc/mac.txt (revision 5597) @@ -0,0 +1,22 @@ +State on MacOSX +~~~~~~~~~~~~~~~ + +Source releases starting from 1.1.0 should compile and run out-of-the-box. + +Requirements for GUI: x11 and gtk+ + - X11 server and client libraries for OS X are available from the XQuartz + download and install + - gtk+ is available from brew + * brew install dependencies (gtk+ and libgd) with the following commands + brew install libgd + brew install gtk+ + * if you want to use gEDA with PCB-RND you may want to install it as well + via brew + brew install homebrew/science/geda-gaf + +Known issues: + - application window opens behind other windows; it seems to be a gtk bug + that can not be worked around from the application + - slow rendering and error messages about invalid numerics on the console + +Considerations listed in ../INSTALL apply. Index: trunk/doc/motivation.html =================================================================== --- trunk/doc/motivation.html (nonexistent) +++ trunk/doc/motivation.html (revision 5597) @@ -0,0 +1,109 @@ + + + pcb-rnd - motivation + + + + + + + + + +
Main + News + People + Events & timeline + pcb-rnd +
+ + +

pcb-rnd motivation

+

Phase 1: At the beginning... (2013..2014)

+I use PCB a lot on various computers. I used to try to join the mainstream +development with small contribution (minor patches) and was active on +IRC and the mailing lists for a while. However, it didn't work out well, +and: +
    +
  • PCB already knew 95% of everything I'd ever need years ago +
  • the remaining 5% was not on the TODO list of developers and generally no one shown much interest in getting patches for those +
  • meanwhile a lot of new features have been added, from which most I find totally useless: +
      +
    • dbus +
    • gl - transparency makes even simple 2 sided boards unusable; slower than the classic version sw render on all my computers +
    • preparation for a C++ transition +
    • 3d support in core (I believe communication to 3d cad programs should be via exporter plugins) +
    +
  • the official Debian package enables (requires, depends on) both dbus and gl +
  • DVCS - it almost always results in chaos, and has no benefit for such a small group of developers; there are posts from time to time on the mailing list about how to handle the chaos; my choice is to stick with a simple, centralized version control system +
  • DVCS always results in increased administration, which I hate to spend my time on - I'd rather invest the time in bugfixing, documentation or implementing new features +
  • it's nearly impossible to get small patches applied^1: +
      +
    • often no one has the time to revise and commit them +
    • communication requires web2.0 (lp) +
    • there are too many cycles of "please fix this and change that first" +
    • with the chaos VCS, it's too likely that new feature patches would require ongoing maintenance while sitting in a "feature branch", to avoid that a large scale merge (or rebase, whatever) breaks it when it finally hits the official branch +
    • there are too much pondering and too less prototyping; there are features that are being considered for years (for example back annotation, internal connections) with multiple concurrent ideas, but no code. Instead, I'd like to implement some code from the early phase of the idea, test it, and deprecate it if it didn't work out well. +
    • I wouldn't even dream about getting larger patches in the official release +
    +
  • no stable release for years; maintaining a set of patches (like pcb-gpmi) and porting them to new releases is too much hassle +
+I was pondering a fork for years. The trigger was that one day I've upgraded +Debian on my lab computer and the new version of PCB came with gl enabled; this +made PCB absolutely unusable (had to wait like 10 seconds for a scroll) while +all the transparent polys over traces made the whole screen a mess. I should +have recompiled everything and built a new Debian package with gl disabled or +install from source (but I have too many computers for that). My decision +was to set up my own .deb but then build it from a fork (it's not much of +an extra effort), so I can add some of the features I miss in daily use. +My plans with this fork: +
    +
  • I stick with my fork and will use it on all my computers for all my designs +
  • Because of that, there's no emphasis on keeping the file formats compatible - breaking compatibility is not a goal either; as long as mainline doesn't change the format, pcb-rnd is about 98% compatible (the 2% is where pcb-rnd features are not supported by mainline) +
  • I won't actively seek ways to get my changes into the mainstream; I will keep on using my svn repo in a manner that (as a side effect) makes such merges easier, tho. If PCB developers decide to pick them up from svn and merge them in the official repo, it's fine (but I personally will keep using my fork anyway). +
  • Most probably I won't merge anything back from the mainstream to my fork - the past few years showed that it's unlikely there would be new features I'd need +
  • My plans for new features were: +
      +
    • pin shapes (a preliminary version is already implemented) +
    • 1206 jumpers without having to add them on the schematics/netlist (done: [intconn] and [nonetlist] are the PCB-side features for this) +
    • merge pcb-gpmi; GPMI would be an optional addon, it'd probably stay a plugin, but there should not be a separate repo ( done ) +
    +
+

+Footnotes: +

    +
  • ^1: this may have changed lately and pcb developers are more open to newcomers; there seems to be a shortage of developers tho, which still makes it slow to get bigger patches through +
+ +

Phase 2: major cleanups (2015..2016)

+In the first phase I was mostly implementing a set of small features and fixes. +As I got more familiar with the code base, I decided to bite the bullet and +do some refactoring: +
    +
  • replaced the footprint mapping/loading code; instead of a hardwired m4 dependency, parametric (generated-on-the-fly) footprints can be written in any language +
  • replaced the default footprint library shipped with the software; the new library ships a small, well organized collection of essentials, omitting special/rarely used footprints +
  • got the code much more modular - a lot of core code got converted into plugins +
  • threw out the resource parser and file format (manu.res and friends) in favor of lihata; this removed a lot of code duplication and a strangely designed resource tree data structure I really hated; as a side effect the gtk hid has multi-stroke hotkeys +
  • replaced glib with a set of mini libs in core and most of the plugins; at the end only the gtk hid should depend on glib; this made the code easier to maintain and debug; a lot of checks are now compile-time (through the C type system) instead of runtime (glib lists) +
  • replaced the settings/rc/preferences system with a central, lihata based configuration system - long term hid attributes will be converted too +
+

+Plans for the future includes: +

    +
  • turning most of the core code into a library for external tools to reuse +
  • extending the core to provide an infrastructure for composite objects handled by plugins +
  • support for saving and loading pcb and footprint files in the lihata format +
  • plans for a set of smallish features that can be implemented in a weekend or two each. +
+ +

Phase 3: community requested features (from 2016 onward)

+Overlapping phase 2 there is an ongoing + feature poll . If there +are enough active users/testers for a feature, it gets implemented in +phase 3. +

+There is a small, active, constructive community forming around pcb-rnd. Future +directions will be mainly set by their need. + + + Index: trunk/doc/myfeature.html =================================================================== --- trunk/doc/myfeature.html (nonexistent) +++ trunk/doc/myfeature.html (revision 5597) @@ -0,0 +1,69 @@ + + + pcb-rnd - my feature + + + + + + + + + +
Main + News + People + Events & timeline + pcb-rnd +
+ + +

pcb-rnd - how to get my favorite feature implemented

+ +The list below is sorted: top items have higher priority, but you +are free to choose any. + +

1. If you are a programmer with free time to spend

+Read the contribution howto and join the project. +You are welcome to work only on the feature you are interested in. You get +all the support (e.g. for understending the API, to get a blank plugin +set up so you need to fill in only the feature-specific parts, etc.). Success +rate shoudl be near to 100%. + +

2. If you are not a programmer and have free time

+You can join and work on things you don't need that much, but others do. +This will build your reputation in the community which in turns encourages +others to implement your favorite feature even if they wouldn't do it for +themselves. The success rate is somewhat more random, obviously. + +

3. If you don't have free time

+Consider donation: buy someone else's time. To do so, contact me +(see the contribution howto page). Since +you don't need to cover all costs and the hourly rates are much lower +on a pet project, and your feature may be simpler than it looks, and +someone who already knows the code also saves the learning cureve, it may +all be cheaper than you think. The success rate should be close to 100%. +

+However, this is a last resort solution, the above ones are clearly preferred. + + +

4. If you don't have anything to contribute with

+[DEL:Vote for it in the +feature poll. If your feature is not there, ask on the mailing list. +Chance for success: if it's a popular demand on the feature poll, chances +are somewhat good. Else chances are very low, but not zero.:DEL] +

+Because of 100% passivity of the geda community, I decided not to spend more +time on community-related tasks. The poll is there, you can use it, +but you will have to orgnaize at least 5 active, capable users who are +commited enough to spend significant time on testing/supporting development. +I will consider implementing your feature only if you can bring and keep +those people motivated and active. + +

5. If you tried everything, even point 4. and all failed...

+Complain loudly on the mailing list, advertise your opinion, try pushing +the thing - a.k.a. go trolling. Success rate is exactly 0%, +you make a lot of good friends enemies that will make it harder +to ask or contribute later for another feature, but it may make you feel +better. </irony>. + Index: trunk/doc/news.html =================================================================== --- trunk/doc/news.html (nonexistent) +++ trunk/doc/news.html (revision 5597) @@ -0,0 +1,53 @@ + + + pcb-rnd - news + + + + + + + + + +
Main + News + People + Events & timeline + pcb-rnd +
+ + +
+ +

News

+ +
+ + + +
+ 2016-09-04 +
+ Rebranding +
+ We have a new main page reflecting the transition how we regard pcb-rnd: + it is not much of just a fork of geda/pcb by now, but a separate PCB + editor with its own team and own course. File save/load compatibility is + maintained. + +
+ 2016-08-24 +
+ Release 1.1.1 +
+ Available at the download page . +
+ The next development cycle will focus on editable/searchable attributes + and a new native file format. + +
+
+ + + Index: trunk/doc/packaging.txt =================================================================== --- trunk/doc/packaging.txt (nonexistent) +++ trunk/doc/packaging.txt (revision 5597) @@ -0,0 +1,90 @@ +Packaging pcb-rnd for a distribution +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +1. program, libs, desktop integration + +Pcb-rnd is an interactive printed circuit board editor program. A typical +user is an electric engineer. This sort of programs are often called EDA, +Electronics Design Automation. + +Pcb-rnd has different frontends: graphical and stdio/text based batch +processing. There are different graphical frontends - pcb-rnd does not +depend on gtk or motif, the specific frontend modules may depend on them. + +Pcb-rnd is scriptable if libgpmi is available. Since libgpmi is not +a mainstream library for the scripting feature it should also be packaged. + +Pcb-rnd is intended for UNIX-fans. It is heavily keyboard-oriented and it +doesn't assume its users don't want to understand or learn how it works. +Many typical user workflows include Makefiles and it's a common thing to +start pcb-rnd from a shell. Thus desktop integration is not in focus +at the moment. If you fixed things for this while packaging, please let +us know, we may merge your patches (see below). + +2. options, plugins, dependencies + +Pcb-rnd is a modular software with a lot of options. Majority of these options +are selected by the state of a module. A module has three states: + - disable: (not compiled at all) + - buildin: enabled and static linked + - plugin: enabled and dynamic loaded (from a .so) + +The configure script takes --disable-*, --building-* and --plugin-* +arguments with * substituted with the name of the module. The configure +script also determines the dependencies according to the selection. Special +arguments --all=plugin and --all=buildin are provided in configure to select +all working modules to be plugins or buildins. + +For binary distributions it's strongly recommended to have most of the +modules compiled as plugins and have them in separate packages. This +would let the user to install a core pcb-rnd package and then the GTK +or the lesstif plugin (or both) from separate packages. This also reduces +package dependencies. + +This is less relevant for source distributions, if the user has full control +over the configuration. + +If non-critical dependencies are not met, modules are automatically disabled +by ./configure. + +3. typical ./configure options - scconfig vs. auto* + +./configurfe --prefix works as expected. DESTDIR is called install_root. + +Typical commands for configuring pcb-rnd for packaging would be: + + ./configure --all=plugin --prefix=/usr + make all + install_root=/tmp/pkg_tmp make install + +We are happy with scconfig. Please don't write about how much better +autoconf or cmake would be, we won't switch. + +4. release cycles, tarballs, svn trunk - what to package + +Development happens in svn trunk/, there are usually no branches. While +we try to keep trunk/ compilable any time, it's not guaranteed that it +would work out-of-the-box between releases. It is not recommended to +package trunk/ - please package stable releases instead. + +We follow the "release early, release often" rule. Source release tarballs +are always considered stable. Beside the project web page, releases are +also accessible as svn tags: svn://repo.hu/pcb-rnd/tags . + +Sometimes we have minor releases with 1..2 month period, sometimes a +longer period passes between releases. + +There's no automated release notification at the moment; if you want to +get notified about new releases, please contact me (email +pcb-rnd (at) igor2.repo.hu) + +5. bug reporting and fixes for packaging + +There's no special method for reporting packaging related bugs and +feature requests, please follow the normal bug report instructions or just +drop me a mail. Please mention that the issue is related to packaging, this +usually gives it a higher priority. + +We are willing to make minor changes to make packaging easier - if you bump +into something you'd need to work around while packaging, please let us know, +we may just fix it "upstream". + Index: trunk/doc/screenshot.jpg =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: trunk/doc/screenshot.jpg =================================================================== --- trunk/doc/screenshot.jpg (nonexistent) +++ trunk/doc/screenshot.jpg (revision 5597) Property changes on: trunk/doc/screenshot.jpg ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: trunk/doc/user/06_feature/query/tutor_cli.html =================================================================== --- trunk/doc/user/06_feature/query/tutor_cli.html (nonexistent) +++ trunk/doc/user/06_feature/query/tutor_cli.html (revision 5597) @@ -0,0 +1,168 @@ + + + +

advanced search, command line tutorial: query language

+ +

scope

+ +pcb-rnd from version 1.1.3 features a flexible advnced search that helps +the user selecting/unselecting objects that match a given logical expression. +The core of the feature is the pcb-rnd query language. The same language +is used in the programmable DRC (see also: +a more formal description of the language). +

+The current document is a walk through of the practical aspects of the +language. It starts with the simplest examples while working towards more +complex cases. +

+A limited version of the functionality is accessible through a GUI +wizard when using the GTK HID. A separate +tutorial is dealing with that feature. + +

Actions

+The query(act, expr) action creates the list called "@", which contains all +objects of the design. Then it iterates over this list (if needed) and +evaluates the query expression on each object. For each evaluation "act" +is performed; "act" is one of: +
    +
  • select - add the matching object to the selections if expr evaluated to true +
  • unselect - remove the matching object from the selections if expr evaluated to true +
  • eval - print the result of the expression to stdout +
  • dump - this inhibits evaluating; it compiles the expression and dumps the parse tree (useful for debugging) +
+

+The symbol @ in the query represents the iterator, or in other words, +the current object we are checking. The engine iterates over all +copper objects, silk objects, pins, holes, layers and nets. A simple query +that selects all objects looks like this: +

+query(select, '@')
+
+The actual query experssion was a single @ in this case. This made +the iteration happen, got the expression evaluated one each object. The +result of each evaluation was the given object. Since these objects +were all existing, valid objects, they were taken as logical value TRUE, +thus for each the add-to-selection was performed. +

+Note: it's usually a good idea to write the expression in single quotes, because +it may contain commas, double quotes and parenthesis that pcb-rnd's action parser may +take as action syntax. +

+The same expression can ran with eval would print the result of each +evaluation: +

+query(eval, '@')
+
+This is visible on the terminal pcb-rnd was started from - on X, it's a good +idea to start a terminal and run pcb-rnd from that instead from a menu or +icon. The rest of this tutorial will use the eval query because it's easier +to include the result of an eval than of a selection. Most examples will +specify the query expression only, without quotes - the reader should +add the query(eval, ' ') part. + +

iteration vs. evaluate once

+If an expression does not reference the @ object, no iteration is performed +and the expression is ran only once: +
+query(eval, '1')
+
+This will calculate the value of 1 and prints it to the standard output. Since +theres no iteration, this can not result in changes in selection. However, +it makes it easy to demonstrate some basic concepts of the query language. +

+Note: if @ is present multiple times in the expression, it's still only +one loop over all objects. When evaluating the expression for a given object, +all instances of @ are substituted with the same object in that iteration. + + +

grammar: arithmetics and logics

+For example the integer and floating point numbers and the usual +arithmetic and logical operators work as expected: + + +
expression result explanation +
42 42 the integer value 42 +
3.14 3.14 the floating point value 3.14 +
10 mil 254000 a number with a unit suffix is converted to pcb-rnd's internal coordinate unit (nanometers) +
1+2 3 sum of 1 and 2 +
2*4 8 multiplication +
47/4 11 integer division (because both operands were integers) +
47/4.0 11.75 floating point division (because at least one of the operands was a float) +
(1+2)*5 15 parenthesis works as usual +
1 && 0 0 logical AND - the result is 1 if both operands were TRUE, 0 else +
1 || 0 1 logical OR - the result is 1 if either operand was TRUE, 0 else +
!2 0 logical NOT - 2 is non-zero, so it is TRUE, negate this to get the result (FALSE, which is 0) +
4 > 2 1 because four is greater than two; all the usual relational operats work: == is equal, != is not-equal, <, <=, > and >=. +
+ +

grammar: object properties

+Object have named properties, e.g. the thickness of a line (or arc, or +trace in general) is called ".thickness", so the thickness of +the current object is: +
+	@.thickness
+
+

+Next, we can already select all traces thicker than 10 mil: +

+	query(select, '@.thickness > 10 mil')
+
+

+Because logical expressions are available, it's easy to select all medium-thick +lines: +

+	(@.thickness >= 10 mil) && (@.thickness <= 30 mil)
+
+

+or any trace that's too thin or too thick: +

+	(@.thickness < 10 mil) || (@.thickness > 30 mil)
+
+

+or traces that don't match our preferred 8, 10 and 15 mil thicnkess values: +

+	(@.thickness != 8 mil) && (@.thickness != 10 mil) && (@.thickness != 15 mil)
+
+ +

grammar: invalid value

+But how comes an expression like '@.thickness > 10 mil' works while +@ iterates over non-trace objects, like layers, nets or elements that +clearly have no thickness? +

+The answer is the invalid value, which is neither true nor false. If +a property does not exist in a given object, the result is the invalid value +or invalid for short. The invalid is treated specially: +

    +
  • in arithmetic operations it propagates: if either operand is invalid, the result is invalid, e.g. 1+invalid = invalid; this affects +, -, *, / and all the relational operators +
  • in binary logic operations (&& and ||), it is ignored: it is assumed to be true in a && and false in a || so the outcome depends on the other operand +
  • in logical NOT (!), TODO +
+When @ refers to a non-trace object, @.thickness is invalid and +'@.thickness > 10 mil' is evaluated t invalid. If the result is not TRUE, +the requested action is not performed. +

+The invalid value is generated only when the expression is valid but the +actual object doesn't have the feature needed. If the expression is wrong, +an error is generated and the expression stops evaluating immediately. + +

grammar: more properties

+Some properties are a single numeric value, like thickness, or the +.name of a layer (which is a string) but others are objects. For +example the .layer property of a line or arc refers to the layer +object the given line or arc is drawn on. These in turn can be combined, +and the "name of the layer the current object is on": +
+	@.layer.name
+
+

+Referencing non-existing properties yields an error, e.g. @.thickness.layer +is an error - in contrast with @.layer, which may evaluate to the +invalid value (e.g. for vias or nets, because they don't have layers). +The difference is that tickness can not have a layer ever (thus is an error) +while @.layer is either applicable or not, but potentially could work, this +when it doesn't, it's only an invalid value. +

+Further useful property combinatons: +TODO +

+There is a full list of all properties. Index: trunk/doc/user/08_util/install_cgi.html =================================================================== --- trunk/doc/user/08_util/install_cgi.html (nonexistent) +++ trunk/doc/user/08_util/install_cgi.html (revision 5597) @@ -0,0 +1,45 @@ + + +

Installation of the footprint CGIs

+

system requirements, 3rd party software

+ The following software needs to be installed on the system + that will host the scripts: +
    +
  • /bin/bash (did not test with POSIX shell) +
  • awk (tested with gawk, may work with other modern implementation) +
  • common binutils, e.g. ls, find +
  • animator, the svn HEAD version; NOTE: it is possible to manually compile animator into a static executable (useful on dedicated web servers) +
  • a web server that can execute plain old CGI scripts +
  • a full checkout of pcb-rnd/trunk from svn://repo.hu/pcb-rnd/trunk +
+ +

Installation

+Since the CGIs are just demo scripts for repo.hu and are not really installed +anywhere else normally, there is no install script but a manual installation +process. For both the parametric and the static footprint CGI: +
    +
  1. check out pcb-rnd/trunk in a directory readable (but not writable) by www-data (or whatever user the CGI will run with) +
  2. copy the config file pcblib.cgi.conf from pcb-rnd/trunk/util to /etc +
  3. edit the config file; ignore setting sdir for now +
  4. hardlink, copy, or wrap the cgi files from under pcb-rnd/trunk/util into the web server's CGI directory +
+

+For the static footprint CGI (set up the map cache): +

    +
  1. cd to trunk/util/pcblib-map in the checkout and run make - NOTE: some awk scripts have hardwired CGI paths yet (TODO) +
  2. copy this directory to a web-accessible directory +
  3. set sdir to the absolute path of the web-accessible copy in /etc/pcblib.cgi.conf +
+ +

Tips and tricks

+

cgi wrapping

+Making the checkout directly into the cgi-bin dir is not a good idea. Using +a hard link on each CGI between the checkout and the cgi-bin dir is better, +but an svn up will silently break the link leaving the old version live. +The most stable solution is placing a wrapper script in the cgi-bin dir: +
+#!/bin/bash
+. /full/path/to/the/checkout/util/pcblib-param.cgi
+
+ + Index: trunk/doc/windows.txt =================================================================== --- trunk/doc/windows.txt (nonexistent) +++ trunk/doc/windows.txt (revision 5597) @@ -0,0 +1,38 @@ +State on windows +~~~~~~~~~~~~~~~~ + +Does not work yet. This file documents how far we got. The situation +is constantly improving. + +1. Cross compilation from Linux to win32 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +(developers may need this, if you are an user, skip to 2.) + +TODO: deps with mpk + +Use mingw and wine: + + ./configure --emu="wine cmd /c" --target=i586-mingw32msvc "$@" + +(Replace i586- with whatever toolchain prefix you have) + +2. download the binary pack +~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Temporary URL: http://igor2.repo.hu/tmp/pcb-rnd-pack.zip + +Download, unpack, run setup.bat then pcb-rnd.bat + +All binaries in the pack are cross-compiled from source, using mingw and +mpk. All binaries are 32-bit. The pack is self-contained, no gtk or other +external dependencies. + +Known bugs: + - inserting elements fail (even static ones) + - no shell and awk in the pack -> parametric footprints fail + - text (including menu text) doesn't appear on XP + - no exporters that depend on libgd (png, jpeg, gif, nelma) + +Worked on systems: + - Windows 8.1 pro, Hungarian, 32 bit + - Windows 7 pro, Hungarian, 64 bit + - Windows 7 pro, English, 64 bit Index: trunk/doc/wishlist.txt =================================================================== --- trunk/doc/wishlist.txt (nonexistent) +++ trunk/doc/wishlist.txt (revision 5597) @@ -0,0 +1,34 @@ +Active user wishes: + W1: cschem [Chris] + W2: (BLOCKED: lihata testing) proper primitives [Chris] + W3: (BLOCKED: lihata testing) more generic footprints [Chris, Evan] + W4: user doc [Miloh] + W5: (BLOCKED: lihata testing) 3d modeller export [Miloh, Evan] + W7: (BLOCKED: lihata testing) programmable drc (star grounding) [James] + W8: (BLOCKED: need resources) gl support [Erich, Evan] + W9: push & shove [Erich, Evan] + +User wishes fulfilled: + W6: GUI access to object attributes: gtk editor, find/select by attrib [James] + +Plan (parallel threads of development): + + A. file format and model + Steps: + 1. (done) lihata persistency + 2. (done) native lihata file format + 3. (done) extend the file format + - everything should have an attribute hash -> W6 + - footprints should have optional attachments (e.g. 3d models) -> W5 + This helps us testing out the persistent-lihata idea that'd be + later used in chscem from the start -> W1 + This is also needed for more generic footprint implementation -> W3 + + B. visible attribute support + Steps: + 1. (done) GTK dialog box for attribute edition + 2. (done) search & select should work by attribute + 3. (done) extend the routing style system to auto-add attributes + (this needs A., the new file format) + Allows the user to manage properties like "50 ohm net" in attributes, + to group objects by property, and to select them by property. -> W6