Install this plugin: http://www.delorie.com/pcb/boardflip.c
And use this script (boardflip): #!/bin/sh # -*- sh -*- FILE=$1 OUTFILE=$2 if [ x"$OUTFILE" = x"" ] then OUTFILE=$FILE mv $FILE $FILE.preflip FILE=$FILE.preflip fi pcb --action-string "BoardFlip(sides) SaveTo(LayoutAs,$OUTFILE) Quit()" $FILE Like this: PCB = \ mypcb1.pcb \ mypcb2.pcb PCF = $(PCB:.pcb=.pcf) all : $(PCF) grouped.pnl grouped.pcb @true grouped.pnl : pcb2panel $(PCB) $(PCF) > grouped.pnl exit 1 grouped.pcb : grouped.pnl $(PCB) $(PCF) panel2pcb grouped.pnl # from gedasymbols drillhelper grouped.pcb # optional %.pcf : %.pcb boardflip $< $...@.tmp ./swaplayers < $...@.tmp > $@ rm $...@.tmp This is ./swaplayers (boardflip doesn't quite get this right): #!/usr/bin/perl # -*- perl -*- while (<>) { print; if (/Groups\("(.*)"\)/) { print STDERR "Groups: <$1>\n"; @groups = split(':', $1); for $g (@groups) { print STDERR "Group: <$g>\n"; @layers = split(',', $g); for $l (@layers) { print STDERR "Layer: <$l>\n"; if ($l eq "s") { $solder = &max(@layers); } if ($l eq "c") { $component = &min(@layers); } } } last; } } print STDERR "C: $component S: $solder\n"; while (<>) { if (/^Layer\((\d+)(.*)/) { $l = $1; $j = $2; if ($l >= $component && $l <= $solder) { $n = ($solder+$component) - $l; print STDERR "L: $l -> $n\n"; s/Layer\(\d+/Layer\($n/; } } if (/thermal\(([^\)]*)\)/) { @t = (); $old = $1; for $t (split (',', $old)) { $t =~ s/(\d+)/($component+$solder-2)-$1/ge; push (@t, $t); } $t = join(',', sort @t); s/thermal\([^\)]*\)/thermal($t)/; } print; } exit 0; sub max { my (@m) = @_; my ($v, $vv) = $m[0]; for $vv (@m) { $v = $vv if $vv =~ /\d/ && $v < $vv; } print STDERR "max ", join(', ', @m), " = ", $v; return $v; } sub min { my (@m) = @_; my ($v, $vv) = $m[0]; for $vv (@m) { $v = $vv if $vv =~ /\d/ && $v > $vv; } print STDERR "min ", join(', ', @m), " = ", $v; return $v; } _______________________________________________ geda-user mailing list geda-user@moria.seul.org http://www.seul.org/cgi-bin/mailman/listinfo/geda-user