diff --git a/cad/pcb/Makefile b/cad/pcb/Makefile
index 651aec40456c..31a10a308be6 100644
--- a/cad/pcb/Makefile
+++ b/cad/pcb/Makefile
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile,v 1.6 2000/08/08 07:39:24 rh Exp $
+# $NetBSD: Makefile,v 1.7 2000/08/31 14:55:29 dmcmahill Exp $
# FreeBSD Id: Makefile,v 1.19 1998/10/31 18:05:31 jseger Exp
#
@@ -9,12 +9,20 @@ MASTER_SITES= ftp://ftp.linuxppc.org/pub/linuxppc/users/harry/PCB/ \
EXTRACT_SUFX= .tgz
MAINTAINER= packages@netbsd.org
+HOMEPAGE= http://bach.ece.jhu.edu/~haceaton/pcb/
DEPENDS+= m4-1.4:../../devel/m4
-.if make(install-run-depends)
-DEPENDS+= teTeX>=1.0.7:../../print/teTeX
-.endif
USE_IMAKE= yes
+INFO_FILES= pcb.info
+
+post-install:
+ ${INSTALL_MAN_DIR} ${PREFIX}/share/doc/pcb/
+ ${INSTALL_MAN} ${FILESDIR}/index.html ${PREFIX}/share/doc/pcb/
+ ${INSTALL_MAN} ${FILESDIR}/pcb.html ${PREFIX}/share/doc/pcb/
+ ${INSTALL_MAN} ${FILESDIR}/pcb.info ${PREFIX}/info/
+ ${INSTALL_MAN} ${FILESDIR}/pcb.ps ${PREFIX}/share/doc/pcb/
+ ${INSTALL_MAN} ${FILESDIR}/refcard.ps ${PREFIX}/share/doc/pcb/
+
.include "../../mk/bsd.pkg.mk"
diff --git a/cad/pcb/files/index.html b/cad/pcb/files/index.html
new file mode 100644
index 000000000000..c8d0d6e25c20
--- /dev/null
+++ b/cad/pcb/files/index.html
@@ -0,0 +1,109 @@
+
+
+
+
+Pcb 1.6.3 - Table of Contents
+
+
+Pcb
+an interactive
+printed circuit board
+layout system for X11
+Thomas Nau
+
+
+
+
+This document was generated on 31 August 2000 using
+texi2html 1.56k.
+
+
diff --git a/cad/pcb/files/patch-sum b/cad/pcb/files/patch-sum
index aea420901631..ef6bcaec5395 100644
--- a/cad/pcb/files/patch-sum
+++ b/cad/pcb/files/patch-sum
@@ -1,4 +1,5 @@
-$NetBSD: patch-sum,v 1.1 1999/07/09 13:50:21 agc Exp $
+$NetBSD: patch-sum,v 1.2 2000/08/31 14:55:31 dmcmahill Exp $
MD5 (patch-aa) = 3b394845186c2f0cec9bb03f70c20eee
MD5 (patch-ab) = 6953bf71ba2952d783b7f2294b2aa704
+MD5 (patch-ac) = 6e33a104c5ac7ad2453a5575edc6c207
diff --git a/cad/pcb/files/pcb.html b/cad/pcb/files/pcb.html
new file mode 100644
index 000000000000..2a0e02218f1c
--- /dev/null
+++ b/cad/pcb/files/pcb.html
@@ -0,0 +1,5715 @@
+
+
+
+
+Pcb 1.6.3
+
+
+Pcb
+an interactive
+printed circuit board
+layout system for X11
+Thomas Nau
+
+
+
+
+
+
+
+
+
+
+Copyright (C) 1994,1995,1996,1997 Thomas Nau
+
+
+
+This program is free software; you may redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANT-ABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+
+
+
+
+
+
+Pcb
is a handy tool for laying out printed circuit
+boards.
+It was first written for an Atari ST in 1990 and ported to UNIX
and
+X11
in 1994.
+I never had the intention to create another professional layout system,
+but to write a tool which supports people like you who do some
+home-developing of hardware. For this reason it has no auto-router nor
+auto-placement code.
+
+
+
+The second release 1.2 included menus for the first time. This made
+PCB
easier to use and thus a more important tool.
+
+
+
+Release 1.3 introduced undo for highly-destructive commands,
+more straightforward action handling and scalable fonts. Layer-groups
+were introduced to group signal-layers together.
+
+
+
+Release 1.4 provided support for add-on device drivers.
+Two layers (the solder and the component side)
+were added to support SMD elements. The handling of libraries
+was also improved in 1.4.1. Support for additional devices like
+GERBER plotters started in 1.4.4. The undo feature was expanded
+and the redo-feature added in 1.4.5.
+
+
+
+Release 1.5 provides support for rats-nest generation from simple net
+lists. It also allows for automatic clearances around pins that pierce
+a polygon. A variety of other enhancments including a Gerber RS274X
+driver and NC drill file generation have also been added.
+harry eaton (haceaton@aplcomm.jhuapl.edu)
+was responsible for most of the changes found in this release.
+
+
+
+Release 1.6 provides automatic screen updates of changed regions.
+This should elliminate most of the need for the redraw (r) key.
+Also some changes to what order items under the cursor are selected
+were made for better consistancy - it is no longer possible to
+accidentally move a line or line point that is completely obscured
+by a polygon laying over top of it. Larger objects on the upper
+most layers can be selected ahead of smaller objects on lower layers.
+These changes make operations more intuitive. A new mode of line
+creation was added that creates two line on 45 degree angles
+with a single click. The actual outline of the prospective line(s) are
+now shown during line creation. An arc creation mode was added.
+Drawn arcs are quarter circles and can be useful for high frequency
+controlled impedance lines. (You can have eighth circle arc if the
+source is compiled with -DARC45, but be aware that the ends of such
+arcs can never intersect a grid point). Two new flags for pins and
+vias were created - one indicates that the pin or via is purely a
+drill hole and has no copper annulus. You can only toggle this flag
+for vias - for elements, it must be an integral part of the element
+definition. The other flag controls whether the pad will be round
+or octagonal. There is also now a feature for converting the contents
+of a buffer into an element. Vias become the pins (or mounting holes),
+lines and arcs on the solder layer become silkscreen, and lines on the
+component layer become the pads. Action commands entered via the colon
+command entry are no longer proceeded with "a ", just type the command
+directly. Several bugs have also been fixed. New
+ones were probably introduced since extensive changes were made.
+harry eaton was responsible for these changes.
+
+
+
+Release 1.6.1 adds the ability to make groups of action commands bound to
+a single X11 event to be undone by a single undo. Also a simple design rule
+checker was added - it checks for minimum spacing and overlap rules. Plus
+many fixes for bugs introduced with the many changes of 1.6
+harry is responsible for these changes too.
+
+
+
+Special thanks goes to:
+
+
+Bernhard Daeubler (Bernhard.Daeubler@physik.uni-ulm.de)
+Harald Daeubler (Harald.Daeubler@physik.uni-ulm.de)
+Roland Merk (merk@faw.uni-ulm.de)
+Erland Unruh (Erland.Unruh@malmo.trab.se)
+Albert John FitzPatrick III (ajf_nylorac@acm.org)
+Boerge Strand (borges@ifi.uio.no)
+harry eaton (haceaton@aplcomm.jhuapl.edu)
+Andre M. Hedrick (hedrick@Astro.Dyer.Vanderbilt.Edu)
+
+
+
+who did most of the alpha and beta testing, helped to port PCB
to
+several operating systems and platforms and corrected several typos in the
+manuals. In addition to these, many others donated time for bug-fixing and
+other important work. Some of them can be identified in the source code
+files. Thanks to all of them.
+
+
+
+
+
+
+
+
+Each layout consists of several, mostly independent, objects. This chapter
+gives an overview of the object types and their relationship to each other.
+For a complete description of how to use Pcb
, refer to
+section Getting Started.
+The layout is generated on-screen on a grid that has its origin in the
+upper left corner of the screen.
+The x coordinate increases to the right, y increases down to the bottom.
+All distances and sizes in Pcb
are measured in mils (0.001 inch).
+One unit on the display grid is one mil in distance on the board.
+The sections in this chapter are sorted by the
+order of appearance of the objects within a layout file.
+
+
+
+
+
+
+
+
+
+
+
+
+The top object is the layout itself. It uses a set of symbols
+that resides at the first logical level. Each symbol is uniquely identified
+by a seven bit ASCII
code. All layout objects share the same set of
+symbols. These symbols are used to form text objects on the silkscreen
+and copper layers. Undefined symbols are drawn as filled rectangles.
+
+
+
+Every font file is preprocessed by a user-defined command when it is loaded.
+For details see `fontCommand', section Non-Standard X11 Application Resources.
+
+
+
+
+
+
+
+
+Vias are identical to the pins used by elements except that they can be added
+or removed individually.
+The purpose of vias is to provide connections between different layers.
+Don't use vias for adding elements to the layout, even if that seems
+easier than creating a new element.
+Vias are useful for defining arbitrary drill points such as
+those used for mounting a board.
+You can assign a name to a via even though you probably won't ever want to.
+Vias reside at the first logical level; therefore, each
+via exists on all layers. (i.e.
+blind vias are not supported)
+
+
+
+
+
+
+
+
+
+Elements represent the components on a board.
+Elements are loaded from ASCII
coded files in a
+similar manner to the layout file itself.
+They are composed of lines and arcs on the silk-screen
+layer (used to define the package outline) , pins
+(or pads for SMD) and three labels that define the
+description, the element's layout-name (which also
+appears on the silk- screen layer) and its value.
+Element pins are contained on the first logical level
+and so reside on all layers.
+A mark is used to position the element with
+respect to the cursor cross-hair during pasting.
+SMD elements use pads instead of pins.
+Pads are handled similarly to lines on a layer but they must be oriented
+either vertically or horizontally.
+Pads can have either rounded or square ends.
+All parts of an element are treated as one unit.
+It is not possible to delete a single pin or break
+an element into pieces on the layout.
+You can resize separate pieces of an element,
+but doing so is usually a bad idea.
+
+
+
+Elements are supported by several special layers: silk, pins/pads and
+far-side. The silk layer shows the package outline and
+also holds legend text and element names. The pins/pads layer is used to toggle
+whether the element's pins and pads are displayed. The far-side layer controls visibility
+of objects (silkscreen and pads) that are on the far (i.e. not currently viewed) side
+of the board.
+
+
+
+Every element file is preprocessed by a user-defined command when the file is read.
+For details see `elementCommand', section Non-Standard X11 Application Resources. m4
, the default
+value of `elementCommand', allows you to create libraries for
+package definitions that are shared by all elements.
+The element libraries distributed with Pcb
expect m4
or an
+equivalent to be the elementCommand.
+
+
+
+Pcb
can create a list of
+all connections from one (or all) elements to the others or a list of
+unconnected pins.
+It can also verify the layout connections against a netlist file.
+The element's `layout-name' is the name used to identify an element
+in a netlist file.
+The pin numbering for an element is defined by unique strings assigned to
+each pin. In addition to the "pin number" string, each pin has a "name"
+which describes its function. Previously element pin number was established
+by the order of appearance of the pin definitions in the layout or element
+file. Since the "number" strings for each pin are a new feature, if they are
+absent then the numbering is again established by the order of pin appearance
+in the file.
+In other words, the first pin appearing in the file is pin one, the
+next pin is pin two and so on.
+Usually the names assigned to pins are simply numbers, but they don't
+have to be. It is only necessary that the "number" string for the pin
+matches exactly the "number" string in the netlist file.
+Be aware that a few of the library parts may still be incorrectly
+implemented regarding pin-numbering. All of the DIL (Dual-
+Inline-Pins) parts are correct and most of the others are too,
+but you should verify the pin numbering
+of any non-DIL part (use the Report Menu to see what Pcb
thinks a pin's
+number is) before using the rats nest feature with a library part. Hopefully sometime
+soon someone will volunteer to cross-check all of the element libraries and make
+fixes available as necessary.
+Pcb
can also check a layout to see that it meets minimum spacing
+and overlap rules.
+
+
+
+You can make your own quick-and-dirty element definitions graphically now.
+Simply draw vias for the pins
+and lines and arcs on a solder layer for the silkscreen
+outline. You should name each via with the pin number.
+If you want to create a SMD device, draw lines for the pads on a
+component side layer (You must draw these in pin number order since lines can't
+be named). They must be
+either horizontal or vertical or they will not be recognized as pads. Once
+you are happy with the geometry, select everything that is to become part of
+the element, then choose "cut to buffer" from the menu. Now select "convert
+buffer to element" from the menu. Viola'! Afterwards you can make pin one
+square (or pads) if you like, and give the element its various names. Note that the
+element mark corresponds to the cut position when everything was put into the
+buffer. If the vias are not named, then the pin numbering will correspond to the
+order in which the vias were placed.
+
+
+
+
+
+
+
+
+Every layout consists of several layers that can be used independently
+or treated as a group.
+Layer groups can be used to logically separate (and color-code)
+different traces (e.g. power and signal); however, all
+layers within a group reside on the same physical
+copper layer of a board, so using different layers within the same
+group won't provide electrical separation where they touch or overlap.
+For details, see `layerGroups', section Non-Standard X11 Application Resources.
+Each layer is drawn in a color defined in the resource file (for
+details see `layerColor', section Non-Standard X11 Application Resources) and identified by a name
+that you can change.
+Layers are really just containers for line, polygon, and text objects. The
+component and solder layers contain SMD elements as well, but the
+file structure doesn't reflect that fact directly. Each layer group
+represents a physical layer on the printed circuit board. If you want to make
+a four layer board, you'll need to have four layer groups.
+Connections between layer groups are established only through element pins and vias.
+The relationship between a specific layer and the board itself is configureable from
+the `Edit layer groups' option in the `Objects' menu.
+The layer groups corresponding to the physical layers component-side
+and solder-side are always defined, and you must map at least one
+logical layer to each.
+Of course, you are not obligated to put tracks on either of them.
+SMD-elements always reside on either the component-side or the solder-side
+layer group.
+You can swap which side of the board you are viewing by pressing
+<Key>Tab.
+You can decide which layer group will be the solder side and which will be
+the component side.
+The layers groups just have a name or number associated with them - where
+they are sandwiched in the board is left to the manufacturing processes.
+
+
+
+
+
+
+
+
+Lines are used to draw tracks on the pc board.
+When in the line mode, each <Btn1>
+press establishes one end of a line.
+Once the second point is defined, the line is drawn
+and a new line started where the first one ended.
+You can abondon the new starting point in favor
+of another by pressing Ctrl<Btn1>.
+The undo function (<Key>u) will take you back
+point by point if you use it while in the line mode.
+New lines can be restricted to 45 degree angles if desired. You can toggle this
+restriction on and off while creating lines by pressing <Key>. (that is the
+period key). If the 45 degree restriction is turned on, then the <Key>/
+can be used to cylce through three different modes of 45 degree line creation.
+One mode just creates a single line forced to the nearest 45 degree vector. The next
+mode creates two lines from the start to end points such that the first line leaves the
+start point at a 90 degree vector, and the second line enters the end point on a 45
+degree vector. The next mode creates two lines such that the first line leaves the
+start point on a 45 degree vector and arrives at the end point on a 90 degree vector.
+You can temporarily swap between the last two modes by holding the shift key down.
+It is simple to edit a line type object by breaking it into pieces (insert point mode),
+moving an end point (or the whole line) (<Btn2Down><drag><Btn2Up>),
+or changing the layer it resides on (<Key>m moves the line under the pointer
+to the active layer).
+In the case when two line segments meet at exactly the same
+point you can delete the intermediate point, otherwise the delete mode removes an entire line.
+Feel free to experiment
+since Pcb
will allow you to undo anything that materially affects your work.
+If you switch active layers in the midst of placing lines a via will automatically be
+placed, when necessary, in order to continue the connection.
+
+
+
+
+
+
+
+
+With version 1.6 it is possible to draw copper arcs. The arcs are restricted to
+be quarter circles. This means they always bend a right angle. They are very similar
+to lines otherwise. They are created on the current layer and have the same thickness
+that new lines will have. The various clicks for creating lines work pretty much the
+same way for creating arcs. The start point for the arc is at the first <Btn1>
+position. In order to make the arc curve in the direction desired, drag the mouse along
+the tangent line from the starting position towards the end position. If the grid is
+too coarse, it may not be possible to distinguish whether you've moved over then up,
+or up then over, so if you can't seem to make the arc go the direction you want, you
+should decrease the grid spacing. Alternatively you could drawn the wrong arc, then
+rotate and move it where you want. Like the line tool, after an arc is drawn a new
+starting point is established at the end point. Whenever a start point is established
+by either the line or arc tools it will be retained if you switch directly between the
+tools (e.g. <Key>F2 for Lines, <Key>F8 for Arcs. Of course connection
+searches, undo and all the other features you'd expect work with arcs now.
+
+
+
+
+
+
+
+
+Sometimes it's useful to fill large areas with solid copper.
+The way to do this is with polygons.
+Polygons can be created in either the polygon mode or the rectangle mode.
+In the polygon mode, you'll have to define each corner of the polygon
+with a mouse click (<Btn1>). When the last point is clicked
+exactly on top of the starting point, the polygon is finished.
+Since this can be hard to do, the Shift<Key>p will enter the
+final point for you, closing the polygon.
+If the 45 degree angle restriction is turned on
+and you try to close the polygon when it is not possible, you'll get a
+warning instead. If you haven't finished entering a polygon, but want to
+undo one (or more) of the points that you've already defined, use the
+undo command (<Key>u).
+With the rectangle tool, defining
+the two opposite corners is sufficient, but of course the resulting
+polygon is a rectangle.
+Like lines, a polygon can by edited by deleting, inserting and moving the points
+that define it.
+Pcb
is capable of handling complex polygons, but
+using a number of simpler ones improves performance of the connection tracing code.
+
+
+
+A new feature in version 1.5 of Pcb
automatically creates clearance
+regions around pins and vias that pierce a polygon. This means that they
+aren't electrically connected to the polygon unless you add "thermals"
+to cross the clearance region.
+Thermals can be added and removed by selecting the thermal mode and clicking
+<Btn1> on the pin or via.
+Remember that this only creates connections to the polygon on the active layer.
+The great advantage to this new polygon behavior is that simple or complex ground
+and/or power planes can be easily made with polygons and seen on the screen.
+If you don't want this auto-clearance behavior, or you load a layout created by
+an earlier version of Pcb
, the old behavior
+(shorts to all piercing pins and vias) is available. A `ChangeSize'
+operation (<Key>s) toggles a polygon between the new and old polygon/pin
+behavior.
+
+
+
+
+
+
+
+
+
+Text objects should be used to label a layout or to put additional
+information on the board, but not to identify elements because elements
+have their own labels.
+Text is always horizontal when first created, but the
+rotate mode can align it along 0, 90, 180 and 270 degree angles.
+Text can be moved from any layer to the silk-screen layer with a
+command in the `selection menu'.
+Text that is moved to the silk-screen layer will appear on the
+solder-side silk-screen if it originating on a solder-side layer.
+Otherwise moving it to the silk-screen layer will put it on the
+component-side silk-screen.
+To move text back to a copper layer from
+the silk-screen, use the `MoveToCurrentLayer' (<Key>m) command.
+Text on the far side of the board will automatically appear mirror-imaged.
+
+
+
+TEXT OBJECTS ON A COPPER LAYER CREATE COPPER LINES BUT THEY ARE NOT SCANNED FOR
+CONNECTIONS OR TESTED FOR CREATING SHORTS VS. THE NETLIST. NEITHER ARE TEXT OBJECTS TESTED AGAINST ANY DESIGN RULES.
+
+
+
+
+
+
+
+
+The goal of this chapter is to give you enough information to learn how
+Pcb
works and how to develop your layouts to make the best use of Pcb
's
+features. All event translations (i.e. the buttons and keys you
+press) refer to the default application resource file shipped with Pcb
.
+There is probably no need to change them unless your window
+manager uses some of the button events itself; however, if you want
+to customize the behavior of Pcb
then changing the resource file
+is usually the best way to do it.
+
+
+
+Get yourself a printout of this chapter and User Commands, if you
+haven't already done so, and follow the examples.
+An example layout may be found in `example/68HC11'.
+An example illustrating some version 1.5 features is found in
+`example/LED' along with its corresponding netlist file `example/LED.NET'.
+
+
+
+Start Pcb
(the actual command will use all lower-case letters)
+without any additional options.
+If you get the error message:
+
+
+
+
+ can't find default font-symbol-file 'default_font'
+
+
+
+then the font searchpath or filename in the application resource
+file is wrong. Be sure that your m4
program supports searchpaths.
+If not, get GNU m4
.
+For other messages, see section Troubleshooting.
+Another quick-start is provided by pcbtest.sh
in the `src'
+directory.
+
+
+
+
+
+
+
+
+
+The main window consists of five areas:
+the menu at the top, the control panel in the upper left corner, the mode buttons
+located below the control panel, the drawing area to the right of these, and the
+status line at the bottom of the window.
+
+
+
+
+
+
+
+
+
+
+
+
+
+The status-line is located at the bottom edge of the main window.
+During normal operation the status information is visible there.
+When a selected menu operation requires an additional button click, the
+status-line is replaced by a message telling you to position the cursor
+and click.
+When a text input is required, the status-line is replaced by the
+Input-field which has a prompt for the typed input.
+
+
+
+The status-line shows, from left to right, the side of the board that you
+are viewing (<Key>Tab changes this), if an absolute
+(abs) or relative (rel) grid is used, if new lines are restricted to 45 degrees,
+which type of 45 degree line mode is active, whether rubberband move and
+rotate mode is on (R), the current grid values, and the zoom factor.
+This information is followed by the line-width, via-size
+and drilling hole in mil, text scaling, the active buffer number and the
+name of the layout. An asterisk appearing at the left edge indicates the
+layout has been modified since the last save.
+Note that the name of the layout is not the same
+thing as the filename of the layout.
+
+
+
+The input-field pops up (temporarily replacing the status-line) whenever user input
+is required. Two keys are bound to the input field: <Key>Escape
+aborts the input, <Key>Return finishes it.
+
+
+
+The present cursor position is displayed in the upper right corner of the window.
+Normally this position is an absolute coordinate, but with
+version 1.5 of Pcb
you can anchor a marker at
+the current cursor location by pressing Ctrl<Key>m then the
+display will read both the absolute cursor position as well as the difference
+between it and the marker. Pressing Ctrl<Key>m again turns the marker off.
+
+
+
+
+
+
+
+
+
+
+
+The control panel, located at the left side of the window, is used to turn on
+and off the display of layer groups and to select the active drawing layer.
+If a layer hasn't been named, the label "(unknown)" is used as the defualt.
+
+
+
+The upper control box is used to switch layers on and off. Click
+<Btn1Down> on one or more of them. Each click toggles the setting.
+The currently active layer can't be switched off.
+The layout is refreshed when the pointer reenters the drawing area. This
+prevents excessive redrawing when the visibility of several layers is changed.
+When the layers are grouped, clicking on these fields will toggle
+the visibility of all layers in the same group. This is a good idea because
+layers in the same group reside on the same physical layer of
+the actual board.
+Use the `Edit layer groups' option in the `Objects' menu to
+change the layer groupings.
+Grouping layers is only useful for helping you to color-code
+signals in your layout. Note that grouping layers actually reduces the number
+of different physical layers available for your board, thus to make an eight
+layer board, you cannot group any layers.
+
+
+
+far side turns on and off the visibility of elements
+(including SMD pads) on the opposite
+board side, as well as silk screening on that side. It does not automatically
+hide the x-ray view of the other copper layers, these must be turned off
+separately if desired. Use the tab key to view the entire board from the other
+side. To see a view of what the back side of the board will actually look like,
+make the solder layer the active layer then press tab until the status
+line says "solder" on the right, then turn off the visibility of all other layers
+except pins/pads, vias, and silk.
+
+
+
+The lower control menu, named active, is used to change the active
+drawing layer. <Btn1Down> pops up a menu to select a one.
+Each entry is labeled with the layer's name and drawn in its color.
+The new drawing layer is automatically made visible.
+Try changing the active layer's name to ABC by selecting
+`set name of layer' from the `File' menu.
+Changing the active layer also is available with <Key>1..8.
+
+
+
+
+
+
+
+
+
+The mode selector buttons reside below the control panel.
+They are used to select the operation mode of Pcb
. A mode can be
+thought of as a tool that gets used when <Btn1> is pressed.
+Each mode causes the cursor to take on a unique shape that identifies the tool.
+The buttons themselves are icons that illustrate their function.
+The drawing modes can also be selected from the keyboard:
+
+
+ <Key>Escape reset mode
+ <Key>F1 via-mode
+ <Key>F2 line-mode
+ <Key>F3 pastebuffer-mode
+ <Key>F4 rectangle-mode
+ <Key>F5 text-mode
+ <Key>F6 polygon-mode
+ <Key>Insert insert-point-mode
+ <Key>F7 thermal-mode
+ <Key>F8 arc-mode
+
+
+
+The <Key>Space cycles through all of the modes in the
+mode button palette.
+
+
+
+Reset-mode is really no mode, and <Btn1> has no effect with
+this setting.
+Some of the modes are very simple, such as the via-mode. Clicking
+<Btn1> while in this mode creates a via at the cross-hair position.
+The pastebuffer-mode is similar. With this mode, <Btn1> copies
+the contents of the active buffer to the layout, but only
+those parts that reside on visible layers are copied.
+The rotate-mode allows you to rotate elements and text objects
+90 degrees counter-clockwise with each click.
+The line-mode is explained in detail in section Lines.
+The arc-mode is explained in detainl in section Arcs.
+Rectangle-mode, polygon-mode and thermal-mode are explained in detail in
+section Polygons.
+Remember that the thermal-mode will only create and destroy thermals
+to polygons on the active layer.
+
+
+
+The insert-point-mode is an editing tool that allows you to add
+points into lines or polygons. With version 1.5 of Pcb
, the
+insert-point-mode enforces the 45 degree line
+rule. You can force only the shorter line segment to 45
+degrees by holding the shift key down while inserting the point.
+The delete-mode deletes the smallest object beneath the cursor with each
+<Btn1> click.
+If you use click at an end-point
+that two lines have in common, it will replace the two lines with a single line
+spanning the two remaining points. This can be used to delete an "inserted"
+point in a line, restoring the previous line.
+
+
+
+
+
+
+
+
+The drawing area is made from a viewport widget that also includes two
+scrollbars. The cursor changes shape depending
+on the current operation mode when the pointer is moved into the drawing area.
+A crosshair follows the X11 pointer with respect to the grid setting.
+Move around and watch the cursor position displayed in the upper right of
+the window.
+Now select a new grid from the Display menu.
+The new value is updated in the statusline.
+Now move again and watch the difference. A different way to change the grid is
+Shift<Key>g to decrease or <Key>g to increase
+it. The grid setting is saved along with the data when you save a pcb layout.
+For homemade layouts a value around 50 is a good setting.
+The cursor also may be moved with the cursor keys or, for larger
+distances, by pressing the shift modifier together with a cursor key.
+
+
+
+
+
+
+
+
+
+The menus are located at the top of the drawing area. Most, but not all,
+of their functions are also available from the keyboard.
+Some of the entries such as center require a certain cursor position.
+In this case a statusline will popup at the bottom with wording similar to
+the following:
+
+
+ move pointer to the appropriate screen position and press a button
+
+
+
+Any mouse button will do the job, whereas any key except the cursor keys
+will cancel the operation. For details see section Actions.
+
+
+
+
+- `About'
+
-
+
+
+There is no menu hiding behind this button, but a small information box will
+pop up.
+
+
+
- `File'
+
-
+This menu offers a choice of loading, saving and printing data, saving
+connection information to a file or quitting the application.
+You also may change the layout's or the active layer's name. Selecting
+print layout pops up a printer control dialog which is, hopefully,
+self explaining. This box contains a panner widget (only
X11R5
and later)
+which simplifies adjusting the offsets. With earlier releases the printout
+will always appear in the upper left corner with respect to the media margins.
+
+A selection of several device drivers is available from the printer control
+dialog. Presently PostScript, encapsulated PostScript,
+and GerberX are supported. GerberD support may be forthcoming.
+It requires a rastering engine that pcb presently lacks.
+
+
+
+
+
+
+
+ - `Display'
+
-
+The display menu supports the most needed functions related to
+screen output. The entries are used to change the grid to some popular
+values, the zoom factor, the displayed element name and also are used
+to center or refresh the output.
+You also may switch grid-displaying on or off and select between
+absolute grid (origin at (0,0)) or relative grid (origin at the position where
+the grid has been changed). The relative grid position is now
+established at the actual pointer position, NOT necessarily the same
+as the crosshair position. This allows you to shift the grid without
+changing the grid spacing. I recommend that you zoom in as close as
+possible before setting a relative grid so that you're sure the grid
+lines fall where you want.
+The clipping to 45-degree lines is selected in this menu, as well as
+enabling rubberband mode (see description of Mode).
+
+
+
- `Sizes'
+
-
+This menu allows you to select a group of line thickness, via diameter and via drill
+size (collectively called a "routing style") to be coppied to the "active" sizes.
+You can also change the names given to these styles and adjust their values from
+this menu. You can also edit the "active" sizes (the initial size of new vias,
+drilling holes, lines, text-objects and the current maximum size of the layout)
+from this menu.
+
+
+
+
+
- `Objects'
+
-
+Displaying the pinout of an element and changing its names, the one
+that is currently selected by the Display menu, as well as
+editing a text object is offered by this menu. The latter two selections
+require an additional pointer button click at the object's position.
+A dialog for changing the layer groupings is also reached from this
+menu.
+
+
+
+
+
+
+
- `Selection'
+
-
+This menu covers most of the operations that work with selected objects.
+You may either (un)select all visible objects of a layout or only the ones
+which have been found by the last connection scan. The mouse can also
+be used to change which things are and are not selected:
+toggle the selection of a single object by pressing
+<Btn3Down> and releasing without moving the mouse.
+Pressing Mod1<Btn3Down>, moving and
+releasing the button selects all visible objects inside the
+rectangle. Pressing the modifier key Shift too, unselects all
+objects in the area. You can delete all selected objects from this
+menu, and also move selected text objects to the silk-screen layer.
+The other entries change the sizes of visible and selected objects.
+
+
+
+
- `Buffer'
+
-
+This menu handles pastebuffer related actions. You may select one out of five
+(per viewing side) buffers to use, rotate or clear its contents and paste
+it to the layout. You can also gather objects in the buffer into an element definition
+from this menu.
+Note: only visible objects are pasted to the layout.
+
+
+
- `Connections'
+
-
+The entries available through the connections menu button allow the user to find
+connections from pins or vias and to manipulate these.
+The connection lists may be saved by selecting entries from the
+File menu. In many cases it is desireable to use the ratsnest
+function to check connections against a netlist file instead of using the
+connections menu to generate text connection lists.
+
+
+
- `Undo'
+
-
+This menu is a frontend for managing the reversing of operations
+such as remove, copy, move, name changes, etc. The number of
+operations is unlimited (depending on memory). The list is cleared if
+new layout data is loaded or by selecting the appropriate entry from
+this menu. The inverse operation, redo, is also available.
+
+
+
- `Report'
+
-
+This menu allows you to generate a dialog that summerizes information
+about an object such as sizes and coordinates. You can also get a report
+about all of the drills that are used on the board.
+
+
+
+
+
+
+
+
+
+
+This optional window is used to display all kind of messages including
+the ones written to stderr by external commands. The main advantage is
+that its contents are saved in a scrolling list until the
+program exits. Disabling this feature by setting the resource
+useLogWindow to false will generate popup windows to display
+messages. The stderr of external commands will appear on Pcb
s
+stderr which normally is the parent shell. I suggest you iconify
+the window after startup for example by setting *log.iconic to
+true. If raiseLogWindow is set true,
+the window will deiconify and raise itself whenever new messages are to be
+displayed.
+
+
+
+
+
+
+
+
+First appearing in 1.4.1 the library window is one of the best new features
+in my opinion. It simplifies loading circuits quiet a lot just by selecting
+the appropriate type from the menu at the top. A circuit is then selected
+by simply double-clicking on the text line. For details on libraries
+check-out section Library File Format and section Library Contents File Format.
+
+
+
+
+
+
+
+
+
+
+
+There are several ways of creating new objects: you may draw them yourself,
+you may copy an existing object or you may load an element from a file or
+library. Creating new objects is normally related to a special
+mode depending on the object type.
+The notation of key and button events is the same as described in the
+X11 Intrinsics manual.
+
+
+
+The operation mode may be selected by one of the mode selectors in the bottom
+left corner, by one of the function keys listed earlier in this chapter,
+or by pressing the space bar to cycle through the modes.
+<Btn1Down> sends a notify request to the application which
+responds by creating or changing the appropriate object or at least takes
+the first step to do so. Switching to a mode causes the cursor to take
+on a unique shape and also causes the cooresponding
+mode selector button to be drawn with thick lines. You can use either cue
+to see which mode is currently selected.
+
+
+
+Removing objects is possible using <Key>BackSpace (or <Key>Delete
+on some machines)
+which deletes the object at the cursor location. If more than one object
+is located at the same position, the smallest matching type will be chosen.
+If two or more of the same type are the smallest at the position, then the
+newest one will be deleted.
+You also may change to remove-mode and click <Btn1Down>
+at the location of the objects which are to be removed. If you "remove"
+the end-point where two lines connect, it will remove the point of
+connection leaving a single line that spans the far end points.
+
+
+
+Rotating works in a similar fashion. Change the mode and press
+<Btn1Down> at the object's location. Remember only text,
+elements and arcs can be rotated. (Anything including groups of objects
+may be rotated inside a buffer using the rotate buffer menu option.)
+
+
+
+Insert mode provides the capability of inserting new points into existing
+polygons or lines. The 45 degree line clipping is now enforced when selected.
+Press and hold the shift key while positioning the new point to only clip
+the line segment to the nearer of the two existing points to 45 degrees.
+You can also toggle the 45-degree clipping in the middle of a point
+insertion by pressing the <Key>.
+If the shift key is not depressed and the 45 degree line clipping mode
+is on, both new line segments must be on 45 degree angles - greatly
+restricting where the new point may be placed. In some cases this can cause
+confusion as to whether an insertion has been started since the two new
+lines may be forced to lie parallel on top of the original line until the
+pointer is moved far from the end points.
+
+
+
+Removing objects, changing their size or moving them only applies to objects
+that are visible when the command is executed.
+
+
+
+
+
+
+
+
+
+
+
+
+There are several keystrokes and button events refering to an object
+without identifying its type. Here's a list of them:
+
+
+
+<Btn1Down> creates (or deletes) an object depending on the
+current mode.
+
+
+
+<Key>BackSpace or <Key>Delete removes the visible
+object at the cursor location. When more than one object exists at the
+location, the order of removal is: via, line, text, polygon and
+element. The drawn layer order also affects the search - whatever is
+top - most (except elements) is affected before lower items. Basically
+all this means that what is removed is probably just what you expect.
+If for some reason it isn't, undo and try again.
+Only one object is removed for each keystroke. If two or more
+of the same type match, the newest one is removed.
+
+
+
+Use <Key>s and Shift<Key>s to change the size (width)
+of lines, arcs, text objects, pins, pads and vias, or to toggle the style
+of polygons (whether pins and vias automatically have clearances).
+
+
+
+<Key>n changes the name of pins, pads, vias, the
+string of a text object, or the currently displayed label of an element.
+
+
+
+<Key>m moves the line, arc, or polygon under the crosshair to the
+active layer if it wasn't on that layer already.
+
+
+
+<Key>u (undo) recovers from an unlimited number of operations
+such as creating, removing, moving, copying, selecting etc. It works like
+you'd expect even if you're in the midst of creating something.
+
+
+
+Shift<Key>r restores the last undone operation provided no other
+changes have been made since the undo was performed.
+
+
+
+<Key>tab changes the board side you are viewing.
+
+
+
+For a complete list of keystrokes and button events see section Default Translations.
+
+
+
+
+
+
+
+
+
+To draw new lines you have to be in line-mode. Get there either by
+selecting it from the Tool palette or by pressing <Key>F2.
+Each successive notify event creates a new line. The
+adjustment to 45 degree lines is done automatically if it is selected from the
+Display menu. You can toggle the 45 degree mode setting by
+pressing the <Key>. (That is the period key). When 45 degree enforcement
+is turned on there are three distinct modes of line creation: a single
+line on the closest 45 degree vector towards the crosshair (but not necessarily
+actually ending at the crosshair), two lines created such that the first leaves
+the start point on a 90 degree vector and the second arrives at the crosshair
+on a 45 degree vector, and finally two lines created such that the first leaves
+the start point on a 45 degree vector and the second arrives at the crosshair
+on a 90 degree vector. These last two modes always connect all the way from
+the start and end points, and all lines have angles in 45 degree multiples.
+The <Key>/ cycles through the three modes. The status line shows a
+text icon to indicate which of the modes is active and the lines following
+the crosshair motion show the outline of the line(s) that will actually be created.
+Press <Key>Escape to leave line-mode.
+
+
+
+<Key>l, Shift<Key>l and the entries in the
+Sizes menu change the initial width of new lines. This width is also
+displayed in the status line.
+
+
+
+
+
+
+
+
+An Arc is drawn with the arc-tool. Get there either by selecting it
+from the Tool palette or by pressing <Key>F8. Press Btn1 to
+define the starting point for the arc. Drag the mouse towards the desired
+end point along the path you want the arc to follow. The outline of the arc that
+will be created is shown on the screen as you move the mouse. Arcs are always
+forced to be 90 degrees and have symmetrical length and width ( i.e. they are
+a quarter circle). The next Btn1 click creates the arc. It will have
+the same width as new lines (displayed in the status line) and appear on the
+active layer. The arc leaves the starting point towards the crosshair along
+the axis whose distance from the crosshair is largest. Normally this means that
+if you drag along the path you want the arc to follow, you'll get what you
+want. If the grid is set to the arc radius, then the two distances will be
+equal and you won't be able to get all of the possible directions. If this
+is thwarting your desires, reduce the grid spacing (!Shift<Key>G) and
+try again.
+
+
+
+
+
+
+
+
+
+
+
+A polygon is drawn by defining all of its segments as a series of
+consecutive line segments. If the first point matches a new one and if
+the number of points is greater than two, then the polygon is closed.
+Since matching up with the first point may be difficult, you may use
+Shift<Key>p to close the polygon. The Shift<Key>p won't
+work if clipping to 45 degree lines is selected
+and the final segment cannot match this condition.
+I suggest you create simple convex polygons in order to avoid a strong
+negative impact on the performance of the connection scanning routines.
+The rectangle-mode is just an easy way to generate rectangular polygons.
+Polygon-mode also is selected by <Key>F6 whereas
+rectangle-mode uses <Key>F4.
+Pressing a <Btn1Down> at two locations creates a rectangle by
+defining two of its corners.
+<Key>Insert brings you to insert-point-mode which lets you
+add additional points to an already existing polygon.
+Single points may be removed by moving the crosshair to them and selecting
+one of the delete actions (remove-mode, BackSpace, or Delete. This only works
+if the remaining polygon will still have three or more corners.
+Pressing <Key>u or <Key>p while entering a new polygon
+brings you back to the previous corner. Removing a point does not
+force clipping to 45 degree angles (because it's not generally possible).
+Newly created polygons will not connect to pins or vias
+that pierce it unless you create a thermal (using the thermal mode) to make
+the connection. If the edge of a polygon gets too close to a pin or via that
+lies outside of it, a warning will be issued and the pin will be given a
+special color. Increasing the distance between them will remove the warning
+color.
+
+
+
+
+
+
+
+
+
+Pressing <Key>F5 or clicking one of the text selector buttons
+changes to text-mode.
+Each successive notify event (<Btn1Down>)
+pops up the input line at the bottom and queries for a string.
+Enter it and press <Key>Return to confirm or
+<Key>Escape to abort.
+The text object is created with its upper left corner at the current pointer
+location.
+The initial scaling is changed by <Key>t and
+Shift<Key>t or from the Sizes menu.
+
+
+
+Now switch to rotate-mode and press
+<Btn1Down> at the text-objects location. Text objects
+on the solder side of the layout are automatically mirrored and
+flipped so that they are seen correctly when viewing the solder-side.
+
+
+
+Use <Key>n to edit the string.
+
+
+
+TEXT OBJECTS ON COPPER LAYERS CREATE COPPER LINES BUT THEY ARE NOT SCANNED FOR
+CONNECTIONS. If they are moved to the silkscreen layer, they
+no longer create copper.
+
+
+
+
+
+
+
+
+
+The initial size of new vias may be changed by <Key>v and
+Shift<Key>v or by selecting the appropriate entry from the
+Sizes menu. Mod1<Key>v and Mod1 Shift<Key>v do
+the same for the drilling hole of the via.
+The statusline is updated with the new values.
+Creating a via is similar to the other objects. Switch to via-mode
+by using either the selector button or <Key>F1 then press
+<Key>] or <Btn1Down> to create one.
+<Key>n changes the name of a via. If you want to create a mounting
+hole for your board, then you can place a via where you want the hole to
+be then convert the via into a hole. The conversion is done by pressing
+!Ctrl<Key>h with the crosshair over the via. Conceptually it is
+still a via, but it has no copper annulus. If you create such a hole in
+the middle of two polygons on different layers, it will short the layers.
+Theoretically you could arrange for such a hole not to be plated, but a
+metal screw inserted in the hole would still risk shorting the layers.
+A good rule is to realize that holes in the board really are vias between
+the layers and so place them where they won't interfere with connectivity.
+You can convert a hole back into a normal via with the same keystroke used
+to convery it in the first place.
+
+
+
+
+
+
+
+
+
+Some of the functions related to elements only work if both the package
+layer and the pin layer are switched on.
+
+
+
+Now that you're familiar with many of the basic commands, it is
+time to put the first element on the layout.
+First of all, you have to load data into the paste buffer.
+There are four ways to do this:
+
+
+ 1) load the data from a library
+ 2) load the data from a file
+ 3) copy data from an already existing element
+ 4) convert objects in the buffer into an element
+
+
+
+We don't have any elements on the screen yet nor anything in the
+buffer, so we use number one.
+
+
+
+
+
+Select lsi from the menu in the library window press
+<Btn1Down> twice at the appropriate text-line to get
+the MC68030 CPU.
+The data is loaded and the mode is switched to pastebuffer-mode.
+Each notify event now creates one of these beasts. Leave the mode
+by selecting a different one or by <Key>Escape which resets
+all modes..
+The crosshair is located at the mark position as defined by
+the data file. Rotating the buffer contents is done by selecting
+the rotate entry of the Buffer menu or by pressing
+Shift<Key>F3. The contents of the buffer
+are valid until new data is loaded into it either by a cut-to-buffer
+operation, copy-to-buffer operation or by loading a new data file.
+There are 5 buffers
+available. Switching between them is done by selecting a menu entry or
+by Shift<Key>1..5.
+Each of the two board sides has its own buffers.
+
+
+
+The release includes all data files for the circuits that are used
+by the demo layout. The elements in the LED example are not found in the library,
+but you can lift them from the example itself if you want.
+If you have problems with the color of the crosshair, change the resource
+crosshairColor setting to a different one.
+
+
+
+
+
+
+Now load a second circuit, the MC68882 FPU for example.
+Create the circuit as explained above. You now have two different unnamed
+elements. Unnamed means that the layout-name of the element
+hasn't been set yet. Selecting description from the Display
+menu displays the description string of the two circuits which
+are CPU and FPU. The values of the circuits are set to MC68030 and MC68882.
+Each of the names of an element may be changed
+by <Key>n at the elements location and editing the old name in
+the bottom input line. Naming pins and vias is similar to elements.
+You can hide the element name so that it won't appear on the board
+silkscreen by pressing <key>h with the cursor over the element.
+Doing so again un-hides the element name.
+
+
+
+Entering :le and selecting an element data file is
+the second way to load circuits.
+
+
+
+The third way to create a new element is to copy an existing one.
+Please refer to section Moving and Copying.
+
+
+
+
+
+
+
+The fourth way to create a new element is to convert a buffer's contents
+into an element. Here's how it's done: Select the Via-tool from the
+Tool pallette. Set the grid spacing to something appropriate for
+the element pin spacing. Now create a series of vias where the pins
+go. Create them in pin number order. It is often handy to place a reference
+point (!Ctrl<Key>m) in the center of the first pin in order to measure
+the location of the other pins. Next make a solder-side layer the active
+layer from the active-layer popup menu. Now draw the outline of
+the element using lines and arcs. When you're done, select everything that
+makes up the element with a box selection (<Btn3Down> drag,
+<Btn3Up>). Now select "cut selection to buffer" from the Buffer
+menu. Position the cursor over the center of pin 1 and press the left
+button to load the data into the buffer.
+Finally select "convert buffer to element" from the Buffer menu.
+You'll only want to create elements this way if they aren't already in the
+library. It's also probably a good idea to do this before starting any of
+the other aspects of a layout, but it isn't necessary.
+
+
+
+To display the pinout of a circuit move to it and press Shift<Key>d
+or select show pinout from the Objects menu. A new window
+pops up and displays the complete pinout of the element. This display can
+be difficult to read if the component has been rotated 90 degrees :-(
+therefore, the new window will show an un-rotated view so the pin names
+are readable.
+<Key>d displays the name of one or all pins/pads inside the
+drawing area, this is only for display on-screen, it has no effect on any
+printing of the layout.
+
+
+
+You also may want to change a pin's or pad's current size by pressing
+<Key>s to increase or Shift<Key>s to decrease it. While
+this is possible, it is not recommended since care was probably taken
+to define the element structure in the first place. You can also change the thickness
+of the element's silkscreen outline with the same keys. You can
+change whether a pin or SMD pad is rounded or square with the <Key>q.
+SMD pads should usually have squared ends. Finally, you can change whether
+the non-square pins are round or octagonal with the !Ctrl<Key>o.
+
+
+
+SMD elements and silkscreen objects are drawn in the "invisible object"
+color if they are located on the opposite side of the board.
+
+
+
+For information on element connections refer to section Connection Lists.
+
+
+
+
+
+
+
+
+
+
+
+The linestack and element-buffer of former releases have been replaced
+by 5 multi-purpose buffers that are selected by
+Shift<Key>1..5. The status line shows which buffer is
+the active one.
+You may load data from a file or layout into them.
+Cut-and-paste works too.
+If you followed the instructions earlier in this chapter you should
+now have several objects on the screen. Move the crosshair to one of them
+and press <Btn3Down> to toggle its selection flag. (If you drag the
+mouse while the button is down, a box selection will be attempted instead
+of toggling the selection.) The object
+is redrawn in a different color. You also may want to try
+moving the pointer while holding the third button down and
+release it on a different location. This selects all objects inside the
+rectangle and unselects everything else. If you want to add a box selection
+to an existing selection, drag with Mod1<Btn3Down> instead.
+Dragging Shift Mod1<Btn3Down> unselects objects in a box.
+Now change to pastebuffer-mode and select some operations from the
+Buffer menu. Copying objects to the buffer is available as
+Mod1<Key>c while cutting them uses Mod1<Key>x as
+shortcut. Both clear the buffer before new data is added.
+If you use the menu entries, you have to supply a crosshair position by
+pressing a mouse button. The objects are attached to the pastebuffer
+relative to that crosshair location.
+Element data or PCB data may be merged into an existing layout by loading
+the datafiles into the pastebuffer. Both operations are available from
+the File menu or as user commands.
+
+
+
+
+
+
+
+
+
+
+All objects can be moved including element-names, by
+<Btn2Down>, draging the pointer while holding the button down
+and releasing it at the new location of the object. If you use
+Mod1<Btn2Down> instead, the object is copied. Copying does not work for
+element-names of course. You can move all selected objects with
+Shift <Btn1Down>. This uses the Pastebuffer, so
+it will remove whatever was previously in the Pastebuffer.
+Please refer to section Pastebuffer.
+If you want to give a small nudge to an object, but you don't think
+that the mouse will give you the fine level of control that you want,
+you can position the cursor over the object, press <Key>[,
+move it with the arrow keys, then press <Key>] when it's at the
+desired position. Remember that all movements are forced onto grid coordinates, so
+you may want to change the grid spacing first.
+
+
+
+
+
+
+
+
+
+
+After your first experience with Pcb
you will probably want to save
+your work. :s name passes the data to an external program which
+is responsible for saving it. For details see saveCommand in
+section Non-Standard X11 Application Resources.
+Saving also is available from the File menu, either with or
+without supplying a filename. Pcb
reuses the last
+filename if you do not pass a new one to the save routine.
+
+
+
+To load an existing layout either select load layout data from the
+File menu or use :l filename. A file select box pops up if you
+don't specify a filename. Merging existing layouts into the new one is
+supported either by the File menu or by :m filename.
+
+
+
+
+
+
+
+
+
+Pcb
saves a backup of the current layout depending on the resource
+backup. The file is named `/tmp/PCB.%i.backup'. During critical
+sections of the program or when data would be lost it is saved as
+`/tmp/PCB.%i.save'.
+%i is replaced by the process ID.
+
+
+
+
+
+
+
+
+
+Pcb
now has support for device drivers,
+PostScript
, encapsulated PostScript,
+and Gerber X drivers are
+available so far. The Gerber X
+driver generates a NC drill file for automated drilling.
+ I recommend the use of GhostScript
if you
+don't have a PostScript
printer for handling the PostScript
+output. Printing always generates
+a complete set of files for a specified driver.
+See the page about
+the Print() action for addtional information about the filenames.
+The control panel offers a number of options. Most of them are not avilable
+for Gerber output because it wouldn't make sense, for example, to scale the gerber output
+(you'd get an incorrectly made board!) The options are:
+
+
+
+
+- `device'
+
-
+
+
+
+The top menu button selects from the available device drivers.
+
+
+
- `rotate'
+
-
+Rotate layout 90 degrees counter-clockwise before printing (default).
+
+
+
- `mirror'
+
-
+Mirror layout before printing. Use this option depending
+on your production line.
+
+
+
- `color'
+
-
+Created colored output. All colors will be converted to black if this option
+is inactive.
+
+
+
- `outline'
+
-
+Add a board outline to the output file. The size is determined by the
+maximum boardsize changeable from the sizes menu. The outline appears
+on the top and bottom sides of the board, but not on the internal layers.
+An outline can be useful for determining where to shear the board from the
+panel, but be aware that it creates a copper line. Thus it has the potential
+to cause short circuits if you don't leave enough room from your wiring
+to the board edge. Use a viewer to see what the output outline looks like
+if you want to know what it looks like.
+
+
+
- `alignment'
+
-
+Additional alignement targets are added to the output. The distances between
+the board outline is set by the resource alignmentDistance. Alignment
+targets should only be used if you know for certain that YOU WILL BE USING
+THEM YOURSELF. It is extremely unlikely that you will want to have alignment
+targets if you send gerber files to a commercial pcb manufacture to be made.
+
+
+
- `scaling'
+
-
+It's quite useful to enlarge your printout for checking the layout.
+Use the scrollbar to adjust the scaling factor to your needs.
+
+
+
+
- `media'
+
-
+Select the size of the output media from this menu. The user defined size
+may be set by the resource media either from one of the well known
+paper sizes or by a
X11
geometry specification.
+This entry is only available if you use X11R5
or later.
+For earlier releases the user defined size or, if not available, A4
+is used.
+Well known size are:
+
+
+ A3
+ A4
+ A5
+ letter
+ tabloid
+ ledger
+ legal
+ executive
+
+
+
+
+ - `offset'
+
-
+Adjust the offsets of the printout by using the panner at the right side
+of the dialog box.
+This entry is only available if you use
X11R5
or later. A zero
+offset is used for earlier releases.
+
+
+ - `8.3 filenames'
+
-
+Select this button to generate DOS compatible filenames for the output files.
+The command input area will disappear if selected.
+
+
+
- `commandline'
+
-
+Use this line to enter a command (starts with |) or a filename.
+A %f is replaced by the current filename.
+The default is set by the resource printCommand.
+
+
+
+
+The created file includes some labels which are guaranteed to stay unchanged
+
+
+- `PCBMIN'
+
-
+identifies the lowest x and y coordinates in mil.
+
+
- `PCBMAX'
+
-
+identifies the highest x and y coordinates in mil.
+
+
- `PCBOFFSET'
+
-
+is set to the x and y offset in mil.
+
+
- `PCBSCALE'
+
-
+is a floating point value which identifies the scaling factor.
+
+
- `PCBSTARTDATA'
+
-
+
- `PCBENDDATA'
+
-
+all layout data is included between these two marks. You may use them with an
+
awk
script to produce several printouts on one piece of paper by
+duplicating the code and putting some translate
commands in front.
+Note, the normal PostScript
units are 1/72 inch.
+
+
+
+
+
+
+
+
+
+After completing parts of your layout you may want to check if all drawn
+connections match the ones you have in mind. This is probably best done
+in conjunction with a net-list file: see section Rats Nest.
+The following examples give more rudimentary ways to examine
+the connections.
+
+
+ 1) create at least two elements and name them
+ 2) create some connections between their pins
+ 3) optionally add some vias and connections to them
+
+
+
+Now select lookup connection from the Connections menu,
+move the cursor to a pin or via and press any mouse button. Pcb
+will look for all other pins and/or vias connected to the one you have
+selected and display the objects in a different color.
+Now try some of the reset options available from the same menu.
+
+
+
+There also is a way to scan all connections of one element. Select
+a single element from the menu and press any button at the
+element's location. All connections of this element will be saved
+to the specified file.
+Either the layout name of the element or its canonical name is used to
+identify pins depending on the one which is displayed on the screen
+(may be changed by Display menu).
+
+
+
+An automatic scan of all elements is initiated by choosing
+all elements. It behaves in a similar fashion to scanning a single
+element except the resource resetAfterElement
+is used to determine if connections should be reset before a new element is
+scanned. Doing so will produce very long lists because the power lines are
+rescanned for every element. By default the resource is set to false
+for this reason.
+
+
+
+To scan for unconnected pins select unused pins from the same
+menu.
+
+
+
+
+
+
+
+
+Some commands mentioned earlier in this chapter also are able to operate on all
+selected and visible objects.
+Now go back to the layout and toggle the selection flag of a single one
+by <Btn3Down>. Try <Btn3Down>, move the pointer while
+holding the button down and release it on a different location.
+This selects all objects inside the rectangle and unselects everything else.
+Dragging with Mod1<Btn3Down> adds everything in the box to the
+existing selection. Dragging Shift <Btn3Down> unselects objects in the
+box.
+
+
+
+The entries of the Selection menu are hopefully self-explanatory.
+Many of the Action Commands can take various key words that make
+them function on all or some of the selected items.
+
+
+
+
+
+
+
+
+
+
+If you have a netlist that corresponds to the layout you are working on, you
+can use the rats-nest feature to add rat-lines to the layout.
+First you will need to load a netlist file (see :rn,
+section User Commands).
+<Key>w adds rat-lines on the active layer using the current
+line thickness shown in the status line (usually you'll want them to be thin lines).
+Only those rat-lines that fill in missing connectivity (since you have
+probably routed some connections already) are added.
+If the layout is already completely wired, nothing will be added, and you will
+get a message that the wiring is complete.
+
+
+
+Rat-lines are lines having the special property that they only connect to pins and
+pads at their end points. Rat-lines are drawn on the screen with a stippled pattern
+to make them easier to identify since they have special behavior and cannot
+remain in a completed layout.
+Rat-lines are added in the minimum length straight-line tree pattern
+(always ending on pins or pads) that satisfies the missing connectivity in the circuit.
+Used in connection with moves and rotates of the elements, they are extremely useful for
+deciding where to place elements on the board. The rat-lines will always automatically
+rubberband to the elements whether or not the rubberband mode is on. The only way for
+you to move them is by moving the parts they connect to.
+This is because it is never desireable to have the rat-lines disconnected from
+their element pins. Rat-lines will normally criss-cross
+all over which gives rise to the name "rats nest" describing a layout connected with
+them. If a SMD pad is unreachable on the active layer, a warning will be issued
+about it and the rat-line to that pad will not be generated.
+
+
+
+A common way to use rats nests is to place some
+elements on the board, add the rat-lines, and then use a series of moves/rotates of the
+elements until the rats nest appears to have minimum tangling. You may want to iterate this step
+several times. Don't worry if the layout looks messy - as long as you can get a sense for whether
+the criss-crossing is better or worse as you move things, you're fine.
+After moving some elements arround, you may want to optimize the rats nest <Key>o
+so that the lines are drawn between the closest points (this can change once you've moved components).
+Adding rat-lines only to selected pads/pins (Shift<Key>w)
+is often useful to layout a circuit a little bit at a time.
+Sometimes you'll want to delete all the rat-lines (<Key>e) or
+selected rat-lines (Shift<Key>e) in order to reduce confusion.
+With a little practice you'll be able to achieve a near optimal component placement with
+the use of a rats nest.
+
+
+
+Rat-lines are not only used for assisting your element placement, they can also help
+you to route traces on the board.
+Use the <Key>m to convert a rat-line under the cursor into
+a normal line on the active layer.
+Inserting a point into a rat-line will also cause the two new lines to be normal lines
+on the board.
+Another way that you can use rat-lines is to
+use the <Key>f with the cursor over a pad or pin. All of the pins and
+pads and rat-lines belonging to that net will be highlighted. This is a helpful way to
+distinguish one net from the rest of the rats nest. You can then route those tracks,
+turn off the highlighting (Shift<Key>f) and repeat the process. This will work even
+if the layer that the rat-lines reside on is made invisible - so only the pins and pads
+are highlighted.
+Be sure to erase the rat-lines (<Key>e erases them all) once you've
+duplicated their connectivity by adding your own lines.
+When in doubt, the <Key>o will delete only those
+rat-lines that are no longer needed.
+
+
+
+If connections exist on the board that are not listed in the netlist when
+<Key>w is pressed, warning messages are issued and the affected pins and
+pads are drawn in a special warnColor until the next Notify() event.
+If the entire layout agrees completely with the netlist, a message informs you that
+the layout is complete and no rat-lines will be added (since none are needed).
+If the layout is complete, but still has rat-lines then you will be warned
+that rat-lines remain. If you get no message at all it's probably because some
+elements listed in the net list can't be found and where reported in an earlier
+message.
+There shouldn't be any rat-lines left in a completed layout, only normal lines.
+
+
+
+The Shift<Key>w is used to add rat-lines to only those missing connections among
+the selected pins and pads. This can be used to add rat-lines in an incremental
+manner, or to force a rat-line to route between two points that are not the
+closest points within the net. Often it is best to add the rats nest in an incremental fashion, laying
+out a sub-section of the board before going further. This is easy to accomplish since
+new rat-lines are never added where routed connectivity already makes the necessary
+connections.
+
+
+
+
+
+
+
+
+
+
+
+After you've finished laying out a board, you may want to check
+to be certain that none of your interconnections are too closely
+spaced or too tenuously touching to be reliably fabricated. The design
+rule checking (DRC) function does this for you. Use the command ":DRC()" (without
+the quotes of course) to invoke the checker. If there are no problem areas,
+you'll get a message to that effect. If any problem is encountered, you will get
+a message about it and the affected traces will be highlighted. One part of the
+tracks of concern will be selected, while the other parts of concern will have the
+"FindConnection" highlighting. The screen will automatically be centered in the
+middle of the object having the "FindConnection" (Green) highlighting. The middle of
+the object is also the coordinates reported to be "near" the problem. The actual trouble
+region will be somewhere on the boundary of this object. If the two parts are
+from different nets then there is some place where they approach each
+other closer than the minimum rule. If the parts are from the same net, then
+there is place where they are only barely connected. Find that place and connect
+them better.
+
+
+
+After a DRC error is found and corrected you must run the DRC again because
+the search for errors is halted as soon as the first problem is found. Unless you've
+been extremely careless there should be no more than a few design rule errors
+in your layout. The DRC checker does not check for minimum spacing rules to
+copper text, so always be very careful when adding copper text to a layout.
+The rules for the DRC are specified in the application resource file. The minimum
+spacing value (in mils) is given by the Settings.Bloat value. The default
+is 7 mils. The minimum touching overlap (in mils) is given by the
+Settings.Shrink value. This value defaults to 5 mils. Check with your
+fabrication process people to determine the values that are right for you.
+
+
+
+If you want to turn off the highlighting produced by the DRC, perform an
+undo (assuming no other changes have been made). To restore the highlighting,
+use redo. The redo will restore the highlighting quickly without re-running
+the DRC checker.
+
+
+
+
+
+
+
+
+
+The entering of user-commands is initiated by the action routine
+Command() (the (":")
character) and finished by either
+<Key>Return
+or <Key>Escape to confirm or to abort. These two keybindings
+cannot be changed from the resource file.
+The triggering event, normally a key press, is ignored.
+The input area will replace the bottom statusline. It pops
+up when Command() is called. The arguments of the user-commands
+are passed to the external commands without modification.
+See also, the resource saveInTMP.
+
+
+
+There are simple usage dialogs for each command and one for the
+complete set of commands.
+
+
+
+
+- `l [filename]'
+
-
+
+
+
+
+Loads a new datafile (layout) and, if confirmed, overwrites any existing unsaved data.
+The filename and the searchpath (filePath) are passed to the
+command defined by fileCommand.
+If no filename is specified a file select box will popup.
+
+
+
+
+
- `le [filename]'
+
-
+Loads an element description into the paste buffer.
+The filename and the searchpath (elementPath) are passed to the
+command defined by elementCommand.
+If no filename is specified a file select box will popup.
+
+
+
+
+
+
+
- `m [filename]'
+
-
+Loads an layout file into the paste buffer.
+The filename and the searchpath (filePath) are passed to the
+command defined by fileCommand.
+If no filename is specified a file select box will popup.
+
+
+
+
+
- `q[!]'
+
-
+Quits the program without saving any data (after confirmation).
+q! doesn't ask for confirmation, it just quits.
+
+
+
+
+
- `s [filename]'
+
-
+Data and the filename are passed to the command defined by the resource
+saveCommand. It must read the layout data from stdin.
+If no filename is entered, either the last one is used
+again or, if it is not available, a file select box will pop up.
+
+
+
+
+
+
- `rn [filename]'
+
-
+Reads in a netlist file. If no filename is given
+a file select box will pop up.
+The file is read via the command defined by the
+RatCommand resource. The command must send its output to stdout.
+The netlist received by pcb must have this simple text form:
+
+netname NAME-PINNUM NAME2-PINNUM2 NAME3-PINNUM3 ... [\]
+
+where "netname" is the name of the net (currently its value is ignored but
+it must be present nonetheless),
+NAME is the layout-name given to an element, and PINNUM is the (usually numeric)
+pin number of the element that is part of the net (see section Elements
+for details on pin numbering).
+Spaces or tabs separate the fields.
+If the line ends with a "\" the
+net continues on the next line and the "\" is treated exactly as if it
+were a space. If the NAME ends with a lower-case letter,
+all lower-case letters are stripped from end of the NAME to determine the
+matching name-on-board name. For example:
+
+Data U1-3 U2abc-4 FLOP1a-7 Uabc3-A9
+
+would specifiy that pin 3 of U1 be connected to pin 4 of U2, to pin 7 of
+FLOP1 and to pin A9 of Uabc3. Note that if pin numbers contain alphabetic
+characters, they must match the case contained in the "number" string defining the
+pin number on the cooresponding element.
+It is up to you to name the elements so that their layout-names agrees with the netlist.
+Netlists are used for generating rats nest (see section Rats Nest) and for
+verifying the board layout (which is also accomplished by the Ratsnest
+command.
+
+
+
+
+
- `w[q] [filename]'
+
-
+These commands have been added for the convenience of
vi
users and
+have the same functionality as s combined with q.
+
+
+
+
+ - `actionCommand'
+
-
+Causes the actionCommand to be executed. This allows you to initiate actions
+for which no bindings exist in the resource file. It can be used to initiate any
+action with whatever arguments you enter. This makes it possible to do things
+that otherwise would be extremely tedious. For example, to change the drilling
+hole diameter of all vias in the layout to 32 mils, you could select everything using the
+selection menu, then type ":ChangeDrillSize(SelectedVias, 32)". (This will
+only work provided the via's diameter is sufficiently large to accomodate a 32 mil hole).
+Another example might be to set the grid to 1 mil by typing ":SetValue(Grid, 1)".
+Note that some actions use the current cursor location, so be sure to place the cursor
+where you want before entering the command. This is one of my favorite new
+features in 1.5 and can be a powerful tool. Study the section Actions section to
+see what actions are available.
+
+
+
+
+
+
+
+
+
+
+There are several resources which may be set or reset in addition to the
+standard toolkit command-line options. For a complete list refer to
+section Non-Standard X11 Application Resources.
+
+
+
+The synopsis is:
+
+
+
+pcb [-option ...] [-toolkit_option ...] [layout-file]
+
+
+
+or
+
+
+
+pcb -specialoption
+
+
+
+
+
+
+
+
+
+
+- `-alldirections/+alldirections'
+
-
+
+
+
+
+
+
+Disables or enables line clipping to 45 degree angles. Overwrites the
+resource allDirectionLines.
+
+
+
+
+
- `-backup value'
+
-
+Time between two backups in seconds. Passing zero disables the backup feature.
+Overwrites the resource backupInterval.
+
+
+
+
+
+
+
- `-c value'
+
-
+Number of characters per output line. The resource charactersPerLine is
+overwritten.
+
+
+
+
+
+
+
- `-fontfile filename'
+
-
+The default set of symbols (font) for a new layout is read from this file.
+All directories as defined by the resource fontPath are scanned
+for the file. The scan is only performed if the filename doesn't contain
+a directory component. The fontFile resource is changed.
+
+
+
+
+
+
+
+
+
- `-lelement command-line'
+
-
+Sets the command to be executed when an element is loaded from a file to the
+paste buffer. The command may contain %f and %p to pass the requested filename
+and the searchpath to the command. It must write the data to its
+standard output. The related resource is elementCommand.
+
+
+
+
+
+
+
+
+
- `-lfile command-line'
+
-
+Sets the command to be executed when a new layout is loaded from a file.
+The command may contain %f and %p to pass the requested filename
+and the searchpath to the command. It must write the data to its
+standard output. The related resource is fileCommand.
+
+
+
+
+
+
+
+
+
+
- `-lfont command-line'
+
-
+Sets the command to be executed when a font is loaded from a file.
+The command may contain %f and %p to pass the requested filename
+and the searchpath to the command. It must write the data to its
+standard output. The related resource is fontCommand.
+
+
+
+
+
+
- `-lg layergroups'
+
-
+This option overwrites the resource layerGroups. See its description
+for more information. The value is used for new layouts only.
+
+
+
+
+
- `-libname filename'
+
-
+The default filename for the library. Overwrites the resource
+libraryFilename.
+
+
+
+
+
- `-libpath path'
+
-
+The default search path for the the library. Overwrites the resource
+libraryPath.
+
+
+
+
+
+
+
+
- `-llib command-line'
+
-
+Sets the command to be executed when an element is loaded from the library.
+The command may contain %f and %p to pass the requested filename
+and the searchpath to the command. %a is replaces by the three arguments
+template, value and package. The command must write
+the data to its standard output. The related resource is libraryCommand.
+
+
+
+
+
+
+
- `-llibcont command-line'
+
-
+The command lists the contents of the library.
+The command may contain %f and %p to pass the library filename
+and the searchpath to the command. Also refer to section Library File Format
+and section Library Contents File Format.
+The related resource is libraryContentsCommand.
+
+
+
+
+
- `-loggeometry geometry'
+
-
+Determines the geometry of the log window.
+
+
+
+
+
+
+
- `-pnl value'
+
-
+Restricts the displayed length of the name of a pin in the pinout window to
+the passed value. See also, the resource pinoutNameLength.
+
+
+
+
+
+
- `-pz value'
+
-
+Sets the zoom factor for the pinout window according to the formula:
+scale = 1:(2 power value). The related resource is pinoutZoom.
+
+
+
+
+
+
+
- `-reset/+reset'
+
-
+If enabled, all connections are reset after each element is scanned.
+This feature is only used while scanning connections to all elements.
+See also, resetAfterElement.
+
+
+
+
+
+
- `-ring/+ring'
+
-
+Overrides the resource ringBellWhenFinished. If enabled, the bell
+sounds when connection searching has finished.
+
+
+
+
+
- `-rs string'
+
-
+Overrides the resource routeStyle. The string defines a colon
+separated list of route styles. The route styles consist of a
+comma separated list of name, line thickness, via diameter, and via drill size.
+e.g. "Fat,50,100,40:Skinny,8,35,20:75Ohm,110,110,20"
+
+
+
+
+
+
+
- `-s/+s'
+
-
+Enables/Disables the saving of the previous commandline. Overrides the
+saveLastCommand resource.
+
+
+
+
+
+
+
+
+
+
+
- `-save/+save'
+
-
+See the resource description of saveInTMP for details.
+
+
+
+
+
+
+
+
+
- `-sfile command-line'
+
-
+Sets the command to be executed when an layout file is saved.
+The command may contain %f which is replaced by the filename. The command
+must read its data from the standard input.
+The resource saveCommand is overwritten.
+
+
+
+
+
+
- `-size <width>x<height>'
+
-
+Overrides the resource size which determines the maximum size
+of a layout.
+
+
+
+
+
+
- `-v value'
+
-
+Sets the volume of the X speaker. The value is passed to
XBell()
and
+must be in the range -100..100.
+
+
+
+
+
+
+
+There are some special options available in addition to normal command line
+options. Each of these must be the only option specified on a command line.
+The available special options are:
+
+
+
+
+- `-copyright'
+
-
+
+
+
+Prints out the copyright notice and terminates.
+
+
+
+
+
- `-version'
+
-
+Prints out the version ID and terminates.
+
+
+
- `-help'
+
-
+Prints out the usage message and terminates.
+
+
+
+
+
+
+
+
+
+This chapter gives an overview about the additional X11
resources which
+are defined by Pcb
as well as the defined action routines.
+
+
+
+
+- Resources: Non-standard
X11
application resources.
+ - Actions: A list of available action routines.
+
- Translations: A list of the default key translations (as shipped).
+
+
+
+
+
+
+
+
+
+In addition to the toolkit resources, Pcb
defines the
+following resources:
+
+
+
+
+- `absoluteGrid (boolean)'
+
-
+
+
+
+Selects if either the grid is relative to the position where it has changed
+last or absolute, the default, to the origin (0,0).
+
+
+
+
- `alignmentDistance (dimension)'
+
-
+Specifies the distance between the boards outline to the alignment targets.
+
+
+
+
+
- `allDirectionLines (boolean)'
+
-
+Enables (default) or disables clipping of new lines to 45 degree angles.
+
+
+
+
- `backupInterval (int)'
+
-
+
Pcb
has an automatic backup feature which saves the current data
+every n seconds. The default is 300 seconds. A value of zero disables
+the feature. The backup file is named `/tmp/PCB.%i.backup'.
+%i is replaced by the process ID.
+See also, the command-line option -backup.
+
+
+
+
+ - `Bloat (dimension)'
+
-
+Specifies the minimum spacing design rule in mils.
+
+
+
+
+
+
- `charactersPerLine (int)'
+
-
+
Pcb
uses this value to determine the page width when creating lists.
+N, the number of characters per line, defaults to 80.
+See also, the command-line option -c.
+
+
+
+
+ - `connectedColor (color)'
+
-
+All pins, vias, lines and rectangles which are selected during a connection
+search are drawn with this color. The default value is determined by
+XtDefaultForeground.
+
+
+
+
+
- `crosshairColor (color)'
+
-
+This color is used to draw the crosshair cursor. The color is a result of
+a XOR operation with the contents of the drawing area. The result
+also depends on the default colormap of the
X11
server because only
+the colormap index is used in the boolean operation and Pcb
doesn't
+create its own colormap. The default setting is XtDefaultForeground.
+
+
+
+
+
+ - `elementColor (color)'
+
-
+
- `elementSelectedColor (color)'
+
-
+The elements package part is drawn in these colors, for normal and selected
+mode, respectively, which both default to XtDefaultForeground.
+
+
+
+
+
+
+
+
+
- `elementCommand (string)'
+
-
+
Pcb
uses a user defined command to read element files. This resources
+is used to set the command which is executed by the users default shell.
+Two escape sequences are defined to pass the selected filename (%f) and the
+current search path (%p). The command must write the element data
+to its standard output. The default value is
+
+
+ M4PATH="%p";export M4PATH;echo 'include(%f)' | m4
+
+
+Using the GNU version of m4
is highly recommended.
+See also, the command-line option -lelement.
+
+
+
+
+
+
+ - `elementPath (string)'
+
-
+A colon separated list of directories or commands (starts with '|').
+The path is passed to the program specified in elementCommand together
+with the selected elementname. A specified command will be executed in order
+to create entries for the fileselect box. It must write its results to
+stdout one entry per line.
+See also, the user-command le[!].
+
+
+
+
+
+
+
+
+
- `fileCommand (string)'
+
-
+The command is executed by the user's default shell whenever existing layout
+files are loaded. Data is read from the command's standard output.
+Two escape sequences may be specified to pass the selected filename (%f)
+and the current search path (%p). The default value is:
+
+
+ cat %f
+
+
+See also, the command-line option -lfile.
+
+
+
+
+
+
+ - `filePath (string)'
+
-
+A colon separated list of directories or commands (starts with '|').
+The path is passed to the program specified in fileCommand together
+with the selected filename. A specified command will be executed in order
+to create entries for the fileselect box. It must write its results to
+stdout one entry per line.
+See also, the user-command l[!].
+
+
+
+
+
+
+
+
+
+
- `fontCommand (string)'
+
-
+Loading new symbol sets also is handled by an external command. You again
+may pass the selected filename and the current search path by passing
+%f and %p in the command string. Data is read from the commands standard
+output. This command defaults to
+
+
+ cat %f
+
+
+See also, the command-line option -lfont.
+
+
+
+
+ - `fontFile (string)'
+
-
+The default font for new layouts is read from this file which is searched
+in the directories as defined by the resource fontPath.
+Searching is only performed if the filename does not contain a directory
+component.
+The default filename is `default_font'.
+See also, the command-line option -fontfile.
+
+
+
+
+
+
+
+
- `fontPath (string)'
+
-
+This resource, a colon separated list of directories, defines the searchpath
+for font files. See also, the resource fontFile.
+
+
+
+
+
- `grid (int)'
+
-
+This resources defines the initial value of one cursor step. It defaults
+to 100 mil and any changes are saved together with the layout data.
+
+
+
+
+
- `gridColor (color)'
+
-
+This color is used to draw the grid. The color is a result of
+a INVERT operation with the contents of the drawing area. The result
+also depends on the default colormap of the
X11
server because only
+the colormap index is used in the boolean operation and Pcb
doesn't
+create its own colormap. The default setting is XtDefaultForeground.
+
+
+
+
+ - `elementColor (color)'
+
-
+Elements localted on the opposite side of the board are drawn in this color.
+The default is XtDefaultForeground.
+
+
+
+
+
+
- `layerColor1..8 (color)'
+
-
+
- `layerSelectedColor1..8 (color)'
+
-
+These resources define the drawing colors of the different layers in
+normal and selected state. All values are preset to XtDefaultForeground.
+
+
+
+
+
- `layerGroups (string)'
+
-
+The argument to this resource is a colon separated list of comma separated
+layernumbers (1..8). All layers within one group are switched on/off
+together. The default setting is 1:2:3:...:8 which means
+all layers are handled separatly. Grouping layers one to three looks like
+1,2,3:4:...:8
+See also, the command-line option -lg.
+
+
+
+
- `layerName1..8 (string)'
+
-
+The default name of the layers in a new layout are determined by these
+resources. The defaults are empty strings.
+
+
+
+
+
+
- `libraryCommand (string)'
+
-
+
Pcb
uses a command to read element data from libraries.
+The resources is used to set the command which is executed by the users
+default shell. Three escape sequences are defined to pass the selected
+filename (%f), the current search path (%p) as well (%a) as the three
+parameters template, value and package to the command.
+It must write the element data to its standard output. The default value is
+
+
+ /usr/X11R6/lib/X11/pcb/QueryLibrary.sh %p %f %a
+
+
+
+
+
+
+ - `libraryContentsCommand (string)'
+
-
+Similar to libraryCommand,
Pcb
uses the command specified
+by this resource to list the contents of a library.
+
+
+ /usr/X11R6/lib/X11/pcb/ListLibraryContents.sh %p %f
+
+
+is the default.
+
+
+
+
+ - `libraryFilename (string)'
+
-
+The resource specifies the name of the library. The default value is
+pcblib.
+
+
+
+
+
+
- `libraryPath (string)'
+
-
+A colon separated list of directories that will be passed to the commands
+specified by elementCommand and elementContentsCommand.
+
+
+
+
+
+
- `lineThickness (dimension)'
+
-
+The value, int the range [1..250], defines the
+initial thickness of new lines. The value is preset to ten mil.
+
+
+
+
+
+
- `media (<predefined> | <width>x<height>+-<left_margin>+-<top_margin>)'
+
-
+The default (user defined) media of the
PostScript
device. Predefined
+values are a3, a4, a5, letter, tabloit,
+ledger, legal, and executive.
+The second way is to specify the medias width, height and margins in mil.
+The resource defaults to a4 size.
+
+
+
+
+ - `offLimitColor (color)'
+
-
+The area outside the current maximum settings for width and height is drawn
+with this color. The default value is determined by XtDefaultBackground.
+
+
+
+
+
+
- `pinColor (color)'
+
-
+
- `pinSelectedColor(color)'
+
-
+This resource defines the drawing color of pins and pads in both states.
+The values are preset to XtDefaultForeground.
+
+
+
+
+
- `pinoutFont (string)'
+
-
+This fonts are used to display pin names. There is one font for each zoom
+value. The values are preset to XtdefaultFont.
+
+
+
+
+
+
- `pinoutNameLength (int)'
+
-
+This resource limits the number of characters which are displayed for
+pin names in the pinout window. By default the string length is limited
+to eight characters per name.
+See also, the command-line option -pnl.
+
+
+
+
+
- `pinoutOffsetX (int)'
+
-
+
- `pinoutOffsetY (int)'
+
-
+These resources determine the offset in mil of the circuit from the
+upper left corner of the window when displaying pinout information.
+Both default to 100 mil.
+
+
+
+
+
- `pinoutTextOffsetX (int)'
+
-
+
- `pinoutTextOffsetY (int)'
+
-
+The resources determine the distance in mil between the drilling hole of a pin
+to the location where its name is displayed in the pinout window.
+They default to X:50 and Y:0.
+
+
+
+
+
- `pinoutZoom (int)'
+
-
+Sets the zoom factor for the pinout window according to the formula:
+scale = 1:(2 power value). Its default value is two which results in
+a 1:4 scale.
+See also, the command-line option -pz.
+
+
+
+
- `printCommand (string)'
+
-
+Default file for printouts. If the name starts with a '|' the output
+is piped through the command. A %f is replaced by the current filename.
+There is no default file or command.
+
+
+
+
+
- `raiseLogWindow (boolean)'
+
-
+The log window will be raised when new messages arrive if this resource
+is set true, the default.
+
+
+
+
+
- `ratCommand (string)'
+
-
+Default command for reading a netlist. A %f is replaced by the netlist
+filename. Its default value is "cat %f".
+
+
+
+
+
- `ratPath (string)'
+
-
+Default path to look for netlist files. It's default value is "."
+
+
+
+
+
- `resetAfterElement (boolean)'
+
-
+If set to true, all found connections will be reset before a new
+element is scanned. This will produce long lists when scanning the whole
+layout for connections. The resource is set to false by default.
+The feature is only used while looking up connections of all elements.
+See also, the command-line option -reset, +reset.
+
+
+
+
- `ringBellWhenFinished (boolean)'
+
-
+Whether to ring the bell (the default) when a possibly lengthy operation
+has finished or not.
+See also, the command-line option -ring, +ring.
+
+
+
+
- `routeStyle (string)'
+
-
+Default values for the menu of routing styles (seen in the sizes menu).
+The string is a comma separated list of name, line thickness,
+via diameter, and via drill size.
+e.g. "Fat,50,100,40:Skinny,8,35,20:75Ohm,110,110,20"
+See also, the command-line option -rs and Sizes Menu
+
+
+
+
+
+
- `rubberBandMode (boolean)'
+
-
+Whether rubberband move and rotate (attached lines stretch like
+rubberbands) is enabled (the default).
+
+
+
+
+
+
+
+
+
- `saveCommand (string)'
+
-
+This command is used to save data to a layout file. The filename may be
+indicated by placing
%f
in the string. It must read the data from
+its standard input. The default command is:
+
+
+ cat - > %f
+
+
+See also, the command-line option -sfile.
+
+
+
+
+
+
+
+
+ - `saveInTMP (boolean)'
+
-
+Enabling this resource will save all data which would otherwise be lost
+in a temporary file `/tmp/PCB.%i.save'.
+%i is replaced by the process ID.
+As an example, loading a new layout when the old one hasn't been saved would
+use this resource.
+See also, the command-line option -save, +save.
+
+
+
+
+
- `saveLastCommand (boolean)'
+
-
+Enables the saving of the last entered user command. The option is
+disabled by default.
+See also, the command-line option -s, +s.
+
+
+
+
+
- `Shrink (dimension)'
+
-
+Specifies the minimum overlap (touching) design rule in mils.
+
+
+
+
+
- `size (<width>x<height>)'
+
-
+Defines the width and height of a new layout. The default is
+7000x5000.
+
+
+
+
+
- `stipllePolygons (boolean)'
+
-
+Determines whether to display polygons on the screen with a stippled
+pattern. Stippling can create some amount of transperency so that
+you can still (to some extent) see layers beneath polygons.
+It defaults to False.
+
+
+
+
+
- `textScale (dimension)'
+
-
+The font scaling in percent is defined by this resource. The default is
+100 percent.
+
+
+
+
+
- `useLogWindow (boolean)'
+
-
+Several subroutines send messages to the user if an error occurs.
+This resource determines if they appear inside the log window or as a separate
+dialog box. See also, the resource raiseLogWindow and the command line
+option -loggeometry.
+The default value is true.
+
+
+
+
+
+
- `viaColor (color)'
+
-
+
- `viaSelectedColor (color)'
+
-
+This resource defines the drawing color of vias in both states.
+The values are preset to XtDefaultForeground.
+
+
+
+
+
+
+
- `viaThickness (dimension)'
+
-
+
- `viaDrillingHole (dimension)'
+
-
+The initial thickness and drilling hole of new vias. The values must be in the
+range [30..250] with at least 20
+mil of copper.
+The default thickness is 40 mil and the default drilling hole is
+20 mil.
+
+
+
+
+
- `volume (int)'
+
-
+The value is passed to
XBell()
which sets the volume of the X
+speaker.
+The value lies in the range -100..100 and it defaults to the maximum volume of
+100.
+
+
+
+
+ - `warnColor (color)'
+
-
+This resources defines the color to be used for drawing pins and pads when
+a warning has been issued about them.
+
+
+
+
- `zoom (int)'
+
-
+The initial value for output scaling is set according to the following
+formula: scale = 1:(2 power value). It defaults to three which results
+in an output scale of 1:8.
+
+
+
+
+Refer also to section Command-Line Options.
+
+
+
+
+
+
+
+
+
+
+
+
+All user accessible commands may be bound to almost any X
event. Almost
+no default binding for commands is done in the binaries, so it is vital for the
+application that at least a system-wide application resource file exists.
+This file normally resides in the `X11/lib/app-defaults' directory and
+is called `Pcb'. The bindings to which the manual refers to are the
+ones as defined by the shipped resource file. Besides binding an action to
+an X11 event, you can also execute any action command using a ":" command
+(see section User Commands).
+
+
+
+Take special care about translations related to the functions keys and the
+pointer buttons because most of the window managers use them too.
+Change the file according to your hardware/software environment.
+You may have to replace all occurances of baseTranslations to
+translations if you use a X11R4
server.
+
+
+
+Passing Object as an argument to an action routine causes the object
+at the cursor location to be changed, removed or whatever. If more than
+one object is located at the crosshair position the smallest type is used.
+If there are two of the same type the newer one is taken.
+SelectedObjects will handle all selected and visible objects.
+
+
+
+
+- `AddRats(AllRats|SelectedRats)'
+
-
+
+
+
+
+
+Adds rat-lines to the layout using the loaded netlist file (see the :rn,
+section User Commands.). Rat lines are added on the active layer using the current
+line thickness shown in the status line.
+Only missing connectivity is added by the
+AddRats command so if, for example, the layout is complete nothing will be added.
+Rat lines are drawn on the screen with a stippled pattern
+to make them easier to identify since they cannot appear in a completed layout.
+The rat-lines are added in the minimum length straight-line tree pattern
+(always ending on pins or pads) that satisfies the missing connectivity in the circuit.
+If a SMD pad is unreachable on the active layer, a warning will be issued
+about it and the rat-line to that pad will not be generated.
+If connections exist on the board which are not listed in the netlist while
+AllRats are being added, warning messages will be issued and the affected pins and
+pads will be drawn in a special warnColor until the next Notify() event.
+If the entire layout agrees completely with the net-list a message informs you that
+the layout is complete and no rat-lines are added (since none are needed).
+If SelectedRats
+is passed as the argument, only those missing connections that might connect among
+the selected pins and pads are drawn.
+Default:
+
+
+None<Key>w: AddRats(AllRats)
+!Shift<Key>w: AddRats(SelectedRats)
+None<Key>o: DeleteRats(AllRats) AddRats(AllRats)
+!Shift<Key>o: DeleteRats(SelectedRats) AddRats(SelectedRats)
+
+
+
+
+
+ - `Atomic(Save|Restore|Block|Close)'
+
-
+Controls the undo grouping of sequences of actions. Before the first action
+in a group, Atomic(Save) should be issued. After each action that might
+be undoable, Atomic(Restore) should be issued. Atomic(Block) concludes
+and save the undo grouping if there was anything in the group to undo.
+Atomic(Close) concludes and save the undo grouping even if nothing was
+actually done. Thus it might produce an "empty" undo. This can be useful
+when you want to use undo in a group of actions.
+
+
+
+
+
- `Bell([-100..100])'
+
-
+Rings the bell of your display. If no value is passed the setting
+of the resource volume will be used.
+
+
+
+
+
+
- `ChangeDrillSize(Object, value)'
+
-
+
- `ChangeDrillSize(SelectedPins|SelectedVias, value)'
+
-
+This action routine changes the drilling hole of pins and vias.
+If value starts with + or -, then it adds (or subtracts)
+value from the current hole diameter, otherwise it sets the
+diameter to the value.
+Default:
+
+
+!Mod1<Key>s: Change2ndSize(Object, +5)
+!Mod1 Shift<Key>s: Change2ndSize(Object, -5)
+
+
+
+
+
+ - `ChangeHole(Object|SelectedVias)'
+
-
+This action routine converts a via to and from a hole. A hole is
+a via that has no copper annulus. The drill size for the via
+determines the hole diameter.
+
+
+!Ctrl<Key>h: ChangeHole(Object)
+
+
+
+
+
+
+ - `ChangeName(Object)'
+
-
+
- `ChangeName(Layer|Layout)'
+
-
+Changes the name of the visible object at the cursor location. A text object
+doesn't have a name therefore the text string itself is changed.
+The element name currently used for display is always the one changed with this
+command.
+See Display(Description|NameOnPCB|Value) for details.
+Passing Layer changes the current layers name.
+Default:
+
+
+None<Key>n: ChangeName(Object)
+
+
+
+
+
+
+ - `ChangeOctagon(Object|SelectElements|SelectedPins|SelectedVias|Selected)'
+
-
+Toggles what shape the affected pin(s) or via(s) will be drawn when they
+are not square. The shape will either be round or octagonal.
+Default:
+
+
+!Ctrl<Key>o: ChangeOctagon(Object)
+
+
+
+
+
+
+ - `ChangeSize(Object, value)'
+
-
+
- `ChangeSize(SelectedLines|SelectedPins|SelectedVias, value)'
+
-
+
- `ChangeSize(SelectedPads|SelectedTexts|SelectedNames, value)'
+
-
+
- `ChangeSize(SelectedElements, value)'
+
-
+To change the size of an object you have to bind these action to some
+
X
event (or use :ChangeSize(...)). If value begins with
+a + or - then the value will be added (or subtracted) from the current
+size, otherwise the size is set equal to value. Range checking is
+done to insure that none of the maximum/minimums of any size are violated.
+If Object is passed then a single object at the cursor location is
+changed. If any of the Selected arguments are passed then all selected
+and visible objects of that type are changed. If the type being modified is
+an element, then the thickness of the silkscreen lines defining the element
+is changed.
+Default:
+
+
+None<Key>s: ChangeSize(Object, +5)
+!Shift<Key>s: ChangeSize(Object, -5)
+
+
+
+
+
+
+ - `ChangeSquare(Object|SelectedElements|SelectedPins)'
+
-
+Toggles the setting of the square flag. The flag is used to identify a
+certain pin, normally the first one, of circuits. It is also used to
+make SMD pads have square ends.
+
+
+None<Key>q: ChangeSquare(Object)
+
+
+
+
+
+ - `Command()'
+
-
+Calling Command() pops up an input line at the bottom of the window
+which allows you to enter commands. Including all action commands!
+The dialog ends when None<Key>Return
+to confirm or None<Key>Escape to abort is entered.
+Default:
+
+
+<Key>colon: Command()
+
+
+
+
+
+
+
+
+
+ - `Connection(Find)'
+
-
+
- `Connection(ResetFoundLinesAndRectangles|ResetPinsViasAndPads|Reset)'
+
-
+The Connection() action is used to mark all connections from one pin,
+line or via to others.
+The ResetFoundLinesAndRectangles, ResetFoundPinsAndVias and
+Reset arguments may be used to reset all marked lines and rectangles,
+vias and pins or all of them. The search starts with the pin or via
+at the cursor position. All found objects are drawn with the color
+defined by the resource connectedColor.
+See also, Display(Description|NameOnPCB|Value).
+Default:
+
+
+!Shift<Key>c: Connection(Reset)
+None<Key>f: Connection(Find)
+!Shift<Key>f: Connection(Reset)
+
+
+
+
+
+
+ - `DeleteRats(AllRats|SelectedRats)'
+
-
+This routine deletes either all rat-lines in the layout, or only
+the selected and visible ones. Non-rat-lines and other layout
+objects are unaffected.
+Default:
+
+
+None<Key>e: DeleteRats(AllRats)
+!Shift<Key>e: DeleteRats(SelectedRats)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ - `Display(Description|NameOnPCB|Value)'
+
-
+
- `Display(Toggle45Degree|CycleClip)'
+
-
+
- `Display(Grid|ToggleGrid)'
+
-
+
- `Display(ToggleRubberBandMode)'
+
-
+
- `Display(Center|ClearAndRedraw|Redraw)'
+
-
+
- `Display(Pinout|PinOrPadName)'
+
-
+This action routines handles some output related settings. It is
+used to center the display around the cursor location and to redraw the
+output area optionally after clearing the window.
+Centering is done with respect to the grid setting. Displaying the
+grid itself may be switched on and off by Grid but only if
+the distance between two pixels exceeds 1_DISTANCE pixels.
+
Pcb
is able to handle several labels of an element. One of them
+is a description of the functionality (eg resistor), the second should be
+a unique identifier (R1) whereas the last one is a value (100k).
+The Display() action selects which of the names is displayed.
+It also controls which name will be affected by the ChangeName command.
+If ToggleGrid is passed, Pcb
changes between relative
+('rel' in the statusline) and absolute grid (an 'abs' in the statusline).
+Relative grid means the pointer position when the command is issued is
+used as the grid origin; while (0,0) is used in the absolute grid case.
+Passing Pinout displays the pinout of the element at the current
+cursor location whereas PinOrPadName toggles displaying of the
+pins or pads name under the cursor. If none of them matches but the cursor
+is inside of an element, the flags is toggled for all of its pins and pads.
+For details about rubberbands see also the details about Mode.
+Default:
+
+
+None<Key>c: Display(Center)
+None<Key>d: Display(PinOrPadName)
+!Shift<Key>d: Display(Pinout)
+None<Key>r: Display(ClearAndRedraw)
+None<Key>.: Display(Toggle45Degree)
+None<Key>/: Display(CycleClip)
+
+
+
+
+
+ - `DRC()'
+
-
+Initiates design rule checking of the entire layout. Must be repeated
+until no errors are found.
+
+
+
+
+
- `EditLayerGroups()'
+
-
+Pops up a dialog box to edit the layergroup setting. The function is also
+available from the Objects menu.
+There are no defaults.
+
+
+
+
- `Load(ElementToBuffer|Layout|LayoutToBuffer|Nelist)'
+
-
+This routine pops up a fileselect box to load layout, element data,
+or netlist.
+The passed filename for layout data is saved and may be reused.
+ElementToBuffer and LayoutToBuffer load the data into the
+current buffer.
+There are no defaults.
+
+
+
+
+
- `MarkCrosshair()'
+
-
+This routine marks the current cursor location with an X, and then
+the cursor display shows both absolute position and position relative to
+the mark. If a mark is already present, this routine removes it and
+stops displaying relative cursor coordinates.
+Defaults:
+
+
+!Ctrl<key>m: MarkCrosshair()
+
+
+
+
+
+ - `Mode(Copy|InsertPoint|Line|Move|None|PasteBuffer|Polygon|Thermal)'
+
-
+
- `Mode(Remove|Rectangle|RubberbandMove|Text|Via)'
+
-
+
- `Mode(Cycle)'
+
-
+
- `Mode(Notify)'
+
-
+
- `Mode(Save|Restore)'
+
-
+Switches to a new mode of operation. The active mode is displayed by a thick
+line around the matching mode selector button.
+Most of the functionality of
Pcb
is implemented by selecting a mode
+and calling Mode(Notify). The arguments Line, Polygon,
+Rectangle, Text and Via are used to create the
+appropriate object whenever Mode(Notify) is called. Some of them,
+such as Polygon, need more than one call for one object to be created.
+InsertPoint adds points to existing polygons or lines.
+Save and Restore are used to temporarily save the mode, switch
+to another one, call Mode(Notify) and restore the saved one. Have
+a look at the application resource file for examples.
+Copy and Move modes are used to change an object's location and,
+optionally, to create a new one. The first call of Mode(Notify) attaches
+the object at the pointer location to the crosshair whereas the second
+one drops it to the layout. The rubberband version of move performs the
+move while overriding the current rubberband mode.
+Passing PasteBuffer attaches the contents of the currently selected
+buffer to the crosshair. Each call to Mode(Notify) pastes this contents
+to the layout. Mode(Cycle) cycles through the modes available in the
+mode-button pallete.
+Mode(None) switches all modes off.
+Default:
+
+
+<Key>Escape: Mode(None)
+<Key>space: Mode(Cycle)
+None<Key>BackSpace: Mode(Save) Mode(Remove) Mode(Notify) Mode(Restore)
+None<Key>Delete: Mode(Save) Mode(Remove) Mode(Notify) Mode(Restore)
+None<Key>F1: Mode(Via)
+None<Key>F2: Mode(Line)
+None<Key>F3: Mode(PasteBuffer)
+None<Key>F4: Mode(Rectangle)
+None<Key>F5: Mode(Text)
+None<Key>F6: Mode(Polygon)
+None<Key>F7: Mode(Thermal)
+None<Key>F8: Mode(Arc)
+None<Key>Insert: Mode(InsertPoint)
+None<Key>[: Mode(Save) Mode(Move) Mode(Notify)
+None<Key>]: Mode(Notify) Mode(Restore)
+None<Btn1Down>: Mode(Notify)
+!Shift Ctrl<Btn1Down>: Mode(Save) Mode(Remove) Mode(Notify) Mode(Restore)
+None<Btn2Down>: Mode(Save) Mode(Move) Mode(Notify)
+None<Btn2Up>: Mode(Notify) Mode(Restore)
+!Mod1<Btn2Down>: Mode(Save) Mode(Copy) Mode(Notify)
+!Mod1<Btn2Up>: Mode(Notify) Mode(Restore)
+Shift Mod1<Btn2Down>: Mode(Save) Mode(RubberbandMove) Mode(Notify)
+
+
+
+
+
+ - `MovePointer(delta_x, delta_y)'
+
-
+With this function it is possible to move the crosshair cursor by using the
+cursor keys. The
X
server's pointer follows because the necessary
+events are generated by Pcb
. All movements are performed with respect
+to the currently set grid value.
+Default:
+
+
+None<Key>Up: MovePointer(0, -1)
+!Shift<Key>Up: MovePointer(0, -10)
+None<Key>Down: MovePointer(0, 1)
+!Shift<Key>Down: MovePointer(0, 10)
+None<Key>Right: MovePointer(1, 0)
+!Shift<Key>Right: MovePointer(10, 0)
+None<Key>Left: MovePointer(-1, 0)
+!Shift<Key>Left: MovePointer(-10, 0)
+
+
+
+
+
+ - `MoveToCurrentLayer(Object|SelectedObjects)'
+
-
+The function moves a single object at the crosshair location or all selected
+objects to the current layer. Elements are not moveable by this function.
+They have to be deleted and replaced on the other side.
+If a line segment is moved and the movement would result in a loss of
+connectivity to another segment then via(s) are automatically added to
+maintain the connectivity.
+
+
+None<Key>m: MoveToCurrentLayer(Object)
+!Shift<Key>m: MoveToCurrentLayer(SelectedObjects)
+
+
+
+
+
+ - `New()'
+
-
+Clear the current layout and starts a new one after entering its name.
+Refer to the resource backup for more information.
+No defaults.
+
+
+
+
+
+
+
+
+
- `PasteBuffer(AddSelected|Clear|1..5)'
+
-
+
- `PasteBuffer(Rotate, 1..3)'
+
-
+
- `PasteBuffer(Convert)'
+
-
+This action routine controls and selects the pastebuffer as well as all
+cut-and-paste operations. Passing a buffer number selects one in of the
+range 1..5. The statusline is updated with the new number.
+Rotate performs a number of 90 degree counter clockwise rotations
+of the buffer contents. AddSelected as first argument copies all
+selected and visible objects into the buffer. Passing Clear removes
+all objects from the currently selected buffer. Convert causes
+the contents of the buffer (lines, arc, vias) to be converted into an
+element definition. Refer to section Pastebuffer
+for examples.
+Default:
+
+
+!Ctrl<Key>x: PasteBuffer(Clear) PasteBuffer(AddSelected)
+ Mode(PasteBuffer)
+!Shift Ctrl<Key>x: PasteBuffer(Clear) PasteBuffer(AddSelected)
+ RemoveSelected() Mode(PasteBuffer)
+!Mod1<Key>c: PasteBuffer(Clear) PasteBuffer(AddSelected)
+!Mod1<key>x: PasteBuffer(Clear) PasteBuffer(AddSelected)
+ RemoveSelected()
+!Shift<Key>1: PasteBuffer(1)
+!Shift<Key>2: PasteBuffer(2)
+!Shift<Key>3: PasteBuffer(3)
+!Shift<Key>4: PasteBuffer(4)
+!Shift<Key>5: PasteBuffer(5)
+None<Key>F3: Mode(PasteBuffer)
+
+
+
+
+
+
+ - `Polygon((Close|PreviousPoint)'
+
-
+Polygons need a special action routine to make life easier. Calling
+Polygon(PreviousPoint) resets the newly entered corner to the
+previous one. The Undo action will call Polygon(PreviousPoint)
+when appropriate to do so. Close creates the final
+segment of the polygon. This may fail if clipping to 45 degree
+lines is switched on, in which case a warning is issued.
+Default:
+
+
+None<Key>p: Polygon(Close)
+!Shift<Key>p: Polygon(Close)
+
+
+
+
+
+ - `Print()'
+
-
+Pops up a print control box that lets you select the output
+device, scaling and many more options. Each run creates all
+files that are supported by the selected device. These are
+mask files as well as drilling files, silk screens and so on. The table
+shows the filenames for all possible files:
+
+
+ POSIX (extention) 8.3 filename
+ ---------------------------------------------
+ *_componentmask.* cmsk.*
+ *_componentsilk.* cslk.*
+ *_soldermask.* smsk.*
+ *_soldersilk.* sslk.*
+ *_drill.* dril.*
+ *_groundplane.* gpl.*
+ *_group[1..8].* [..8].*
+
+
+The output may be sent to a postprocessor by starting the filename with the
+pipe ("|")
character. Any "%f"
in a command is replaced
+with the current filename. The function is available from the file menu.
+There are no defaults.
+
+
+
+
+ - `Quit()'
+
-
+Quits the application after confirming the operation.
+Default:
+
+
+<Message>WM_PROTOCOLS: Quit()
+
+
+
+
+
+ - `Redo()'
+
-
+This routine allows you to recover from the last undo command.
+You might want to do this if you thought that undo was going to
+revert something other than what it actually did (in case you
+are confused about which operations are un-doable), or if you
+have been backing up through a long undo list and over-shoot
+your stopping point. Any change that is made since the undo
+in question will trim the redo list. For example if you add
+ten lines, then undo three of them you could use redo to put
+them back, but if you move a line on the board before performing
+the redo, you will lose the ability to "redo" the three "undone" lines.
+Default:
+
+
+!Shift<Key>r: Redo()
+
+
+
+
+
+ - `RemoveSelected()'
+
-
+This routine removes all visible and selected objects.
+There are no defaults.
+
+
+
+
+
+
- `Report(Object|DrillReport)'
+
-
+This routine pops up a dialog box describing the various
+characteristics of an object (or piece of an object such as a pad or pin)
+in the layout at the cursor position, or a report about all of the
+drill holes in the layout.
+There are no defaults.
+
+
+
+
+
- `RouteStyle(1|2|3|4)'
+
-
+This routine copies the sizes corresponding to the numbered route style
+into the active line thicknes, via diameter, and via drill size.
+Defaults:
+
+
+!Ctrl<Key>1: RouteStyle(1)
+...
+!Ctrl<Key>4: RouteStyle(4)
+
+
+
+
+
+ - `Save(Layout|LayoutAs)'
+
-
+
- `Save(AllConnections|AllUnusedPins|ElementConnections)'
+
-
+Passing Layout saves the layout using the file from which it was
+loaded or, if it is a new layout, calls Save(LayoutAs) which queries
+the user for a filename.
+The values: AllConnections, AllUnusedPins and
+ElementConnections start a connection scan and save all connections,
+all unused pins or the connections of a single element to a file.
+There are no defaults.
+
+
+
+
+
- `Select(All|Block|Connection|ToggleObject)'
+
-
+
- `Select(ElementByName|ObjectByName|PadByName|PinByName)'
+
-
+
- `Select(TextByName|ViaByName)'
+
-
+Toggles either the selection flag of the object at the crosshair position
+(ToggleObject) or selects all visible objects, all inside a
+rectangle or all objects which have been found during the last connection
+scan. The ByName functions use a regular expression search,
+always case insensitive, to select the objects.
+Default:
+
+
+None<Btn3Down>: Select(ToggleObject)
+None<Btn3Down>,None<Btn3Motion>: See resource file - this is complex
+
+
+
+
+
+
+
+
+
+ - `SetValue(Grid|LineSize|TextScale|ViaDrillingHole|ViaSize|Zoom, value)'
+
-
+Some internal values may be changed online by this function.
+The first parameter specifies which data has to be changed. The other one
+determines if the resource is set to the passed value, if value is
+specified without sign, or increments/decrements if it is specified with
+a plus or minus sign.
+The function doesn't change any existing object only the initial values of
+new objects. Use the ChangeSize() and ChangeDrillSize()
+to change existing objects.
+Default:
+
+
+None<Key>g: SetValue(Grid, +5)
+!Shift<Key>g: SetValue(Grid, -5)
+None<Key>l: SetValue(LineSize, +5)
+!Shift<Key>l: SetValue(LineSize, -5)
+None<Key>t: SetValue(TextScale, +10)
+!Shift<Key>t: SetValue(TextScale, -10)
+None<Key>v: SetValue(ViaSize, +5)
+!Shift<Key>v: SetValue(ViaSize, -5)
+!Mod1<Key>v: SetValue(ViaDrillingHole, +5)
+!Mod1 Shift<Key>v: SetValue(ViaDrillingHole, -5)
+None<Key>z: SetValue(Zoom, -1)
+!Shift<Key>z: SetValue(Zoom, +1)
+
+
+
+
+
+ - `SwapSides()'
+
-
+This routine changes the board side you are viewing.
+Default:
+
+
+None<Key>Tab: SwapSides()
+
+
+
+
+
+ - `SwitchDrawingLayer(value)'
+
-
+Makes layer numer 1..8 the current one.
+Default:
+
+
+None<Key>1: SwitchDrawingLayer(1)
+...
+None<Key>8: SwitchDrawingLayer(8)
+
+
+
+
+
+
+ - `ToggleHideName(Object|SelectedElements)'
+
-
+Toggles whether the element's name is displayed or hidden. If it
+is hidden you won't see it on the screen and it will not appear
+on the silk layer when you print the layout.
+
+
+None<Key>h: ToggleHideName(Object)
+!Shift<Key>h: ToggleHideName(SelectedElements)
+
+
+
+
+
+ - `Undo()'
+
-
+
- `Undo(ClearList)'
+
-
+The unlimited undo feature of
Pcb
allows you to recover
+from most operations that materially affect you work.
+Calling Undo() without any parameter recovers
+from the last (non-undo) operation. ClearList is used to release the
+allocated memory. ClearList is called whenever a new layout is started
+or loaded. See also Redo.
+Default:
+
+
+None<Key>u: Undo()
+!Shift Ctrl<Key>u: Undo(ClearList)
+
+
+
+
+
+ - `Unselect(All|Block|Connection)'
+
-
+Unselects all visible objects, all inside a rectangle or all objects which
+have been found during the last connection scan.
+Default:
+
+
+!Shift <Btn3Down>: Mode(Save) Mode(None) Unselect(Block)
+!Shift <Btn3Up>: Unselect(Block) Mode(Restore)
+
+
+
+
+
+
+
+
+
+
+
+
+This section covers some default translations of key and button events as
+defined in the shipped default application resource file. Most of them have
+already been listed in section Actions. Pcb
makes use of a nice X11
+feature; calling several action routines for one event.
+
+
+
+
+- `None<Key>BackSpace:'
+
-
+
+
+
+
+
+
- `None<key>Delete:'
+
-
+
- `!Shift<Key>BackSpace:'
+
-
+
- `!Shift Ctrl<Btn1Down>:'
+
-
+The object at the cursor location is removed by None<Key>BackSpace or
+Shift Ctrl<Btn1Down> whereas Shift<Key>BackSpace also removes
+all other objects that are fully-connected to the one at the cursor location.
+
+
+
- `!Mod1 Ctrl<Key>Left:'
+
-
+
- `!Mod1 Ctrl<Key>Right:'
+
-
+
- `!Mod1 Ctrl<Key>Up:'
+
-
+
- `!Mod1 Ctrl<Key>Down:'
+
-
+Scroll one page in one of the four directions.
+
+
+
- `None<Key>Left:, !Shift<Key>Left:'
+
-
+
- `None<Key>Right:, !Shift<Key>Right:'
+
-
+
- `None<Key>Up:, !Shift<Key>Up:'
+
-
+
- `None<Key>Down:, !Shift<Key>Down:'
+
-
+Move crosshair either one or ten points in grid.
+
+
+
- `None<Key>Return:'
+
-
+Finished user input, selects the 'default' button of dialogs.
+
+
+
- `None<Key>Escape:'
+
-
+Mode(Reset), aborts user input, selects the 'abort' button of
+dialogs or resets all modes.
+
+
+
+
+
+
+
- `None<Btn2Down>, Btn2<Motion>, None<Btn2Up>:'
+
-
+
- `!Mod1<Btn2Down>, Btn2<Motion>, !Mod1<Btn2Up>:'
+
-
+The first sequence moves the object or element name at the cursor location.
+The second one copies the objects. Copying isn't available for
+element names.
+
+
+
+
+
+
+
+
+
+
+All files used by Pcb
are read from the standard output of a command
+or written to the standard input of one as plain seven bit ASCII
. This
+makes it possible to use any editor to change the contents of a layout file.
+It is the only way for element or font description files to be created.
+To do so you'll need to study the example files `example/*' and
+`default_font' which are shipped with Pcb
.
+For an overview refer to section Introduction.
+
+
+
+
+
+
+
+
+
+The following sections provide the necessary information about the syntax of
+the files.
+Netlist files are not created by Pcb
, but it does use them. For information
+on the format of a netlist file see the :rn,
+section User Commands. Rat lines are added on the current layer using the current
+The commands described allow you to add almost any additional
+functionality you may need. Examples are compressed read and write access as
+well as archives. The commands themselves are defined by the resources
+elementCommand, fileCommand, fontCommand,
+libraryCommand, libraryContentsCommand and saveCommand.
+Note that the commands are not saved along with the data.
+It is considered an advantage to have the layout file contain all necessary
+information, independent of any other files.
+
+
+
+One thing common to all files is they may include comments, newlines,
+and carriage returns at any place except within quoted strings.
+
+
+
+
+
+
+
+
+
+
+
+
+Here are the basic type definitions used in the other sections of this
+chapter.
+
+
+
+
+Description = Name
+DeltaAngle = Number
+DrillingHole = Number
+Flags = Number
+FontPosition = Number
+Grid = Number
+GridOffsetX = Number
+GridOffsetY = Number
+Group = GroupMember [,GroupMember]...
+GroupMember = decimal | [cs]
+GroupString = """ Group [:Group]... """
+StyleString = """ Style [:Style]... """
+Height = Number
+LayerNumber = Number
+LayoutName = Name
+Name = quoted_string
+Number = decimal | hex
+PinNumber = quoted_string
+Spacing = Number
+StartAngle = Number
+SymbolID = Number | charconst
+Thickness = Number
+TextData = quoted_string
+TextFlags = Flags
+TextScale = scale
+TextX = Number
+TextY = Number
+Value = Name
+Width = Number
+X = Number
+X1 = Number
+X2 = Number
+Y = Number
+Y1 = Number
+Y2 = Number
+charconst = "'" <any character> "'"
+comment = "#" {<any character up to a newline>}...
+decimal = [0-9]+
+direction = [0-3]
+hex = 0x[0-9a-fA-F]+
+scale = [1-<positive integer>]
+quoted_string = """ <anything except \n and \r> """
+zoom = [0-MAX]
+
+
+
+
+
+
+
+
+
+
+The layout file describes a complete layout including symbols, vias,
+elements and layers with lines, rectangles and text. This is the most
+complex file of all.
+
+
+
+
+File = Header Font PCBData
+Header = PCBName [GridData] [CursorData] [PCBFlags] [Groups]
+PCBName = "PCB(" Name Width Height ")"
+GridData = "Grid(" Grid GridOffsetX GridOffsetY ")"
+CursorData = "Cursor(" X Y zoom ")"
+PCBFlags = "Flags(" Flags ")"
+Groups = "Groups(" GroupString ")"
+Styles = "Styles(" StyleString ")"
+Font = {FontData}...
+FontData = {Symbol}...
+Symbol = "Symbol(" SymbolID Spacing ")"
+ "(" {SymbolData}... ")"
+SymbolData = {SymbolLine}...
+SymbolLine = "SymbolLine(" X1 Y1 X2 Y2 Thickness ")"
+PCBData = {Via | Layer | Element}...
+
+Via = "Via(" X Y Thickness DrillingHole Name Flags ")"
+
+Element = "Element(" Flags Description LayoutName Value \
+ TextX TextY direction scale TextFlags")"
+ "(" {ElementData}... [Mark] ")"
+ElementData = {ElementLine | Pad | Pin | ElementArc }...
+ElementArc = "ElementArc(" X Y Width Height
+ StartAngle DeltaAngle Thickness ")"
+ElementLine = "ElementLine(" X1 Y1 X2 Y2 Thickness ")"
+Mark = "Mark(" X Y ")"
+Pad = "Pad(" X1 Y1 X2 Y2 Thickness Name PinNumber Flags")"
+Pin = "Pin(" X Y Thickness DrillingHole Name PinNumber Flags ")"
+
+Layer = "Layer(" LayerNumber Name ")"
+ "(" {LayerData}... ")"
+LayerData = {Line | Polygon | Text}...
+Line = "Line(" X1 Y1 X2 Y2 Thickness Flags")"
+Arc = "Arc(" X Y Width Height StartAngle DeltaAngle Thickness Flags")"
+Polygon = "Polygon(" Flags ")" \
+ "(" {Points}... ")"
+Points = "(" X Y ")"
+Text = "Text(" X Y direction scale TextData Flags")"
+
+
+
+
+- `PCBName'
+
-
+is used to define the layout's name which is independent of its filename.
+It is displayed in the lower left corner of the main window.
+
+
- `GridData'
+
-
+is optional and is used to save the grid setting and offset which were set
+at the time the layout was saved.
+
+
- `CursorData'
+
-
+also is an optional parameter to save the last cursor location and zoom value.
+The real zoom factor is calculated by scale = 1:(2 power value).
+
+
- `PCBFlags'
+
-
+determine how to draw lines and which name of the elements should be
+displayed.
+
+
+ bit 4: do rubberband moves and rotates if set
+ bit 5: display description of elements if set
+ bit 6: display unique name of an element if set
+ bit 7: use absolute grid if set
+ bit 8: don't clip lines to 45 degrees
+
+
+ - `Groups'
+
-
+Layergroups are saved by using this optional parameter. The only way of
+changing them is to use an editor and alter the appropriate line. The
+characters c,s idenify the component- and solder-side for SMD
+objects.
+
+
- `Symbol'
+
-
+See the description of font files in this chapter.
+
+
- `Via'
+
-
+Vias are always connected to all layers which also means vias are one
+logical level ahead of layers. Vias are defined by position, size, name and
+by some flags.
+
+
+ bit 0: always clear
+ bit 1: always set
+ bit 2: set if via was found during a connection search
+ bit 4: set if via is a hole (has no copper annulus)
+ bit 5: display the vias name
+ bit 6: via has been selected
+ bit 12: set if via has octagonal shape
+ Other bits have special meaning and should not be changed
+ by the user. See const.h for more information
+
+
+ - `Element'
+
-
+See the description of element files in this chapter.
+
+
- `Layer'
+
-
+A layer is the central object from the user's point of view. It holds all
+connections and all text objects. Up to 8 may be used individually.
+Its number, starting with one, and its name are read as arguments.
+
+
+
+- `Line'
+
-
+All lines are identified by their start and endpoints together with their
+thickness and some flags. They have to fit a 45 degree scheme.
+
+
+ bit 2: set if line was found during a connection search
+ bit 4: line is a rat-line
+ bit 6: line has been selected
+
+
+ - `Polygon'
+
-
+used to fill a larger area with `copper'. The coordinates specify the
+corners. The flags are:
+
+
+ bit 2: set if polygon was found during a connection search
+ bit 4: polygon is a 1.5 style polygon that automatically clears pins
+ bit 6: polygon has been selected
+
+
+ - `Text'
+
-
+You may use text objects to add information to your board. An example would
+be naming a connector or marking pin one of it. The position marks the
+lower left corner of the string which is also a fixpoint for rotations.
+Text directions are independent to those of lines. They are counted from
+zero to three with a meaning of zero to 270 degree rotations counter-clockwise.
+The scaling value is a positive integer which determines a zoom factor in
+percent.
+
+
+ bit 6: the text has been selected
+ bit 7: the text is on the solder (back) side of the board
+ bit 10: the text is on the silkscreen layer
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Element files are used to describe one component which then may be used
+several times within one or more layouts. You will normally split the
+file into two parts, one for the pinout and one for the package description.
+Using m4
allows you to define pin names as macros in one file and
+include a package description file which evaluates the macros. See
+the resource elementCommand for more information. The pins (and pads)
+must appear in squential order in the element file (new in 1.5) so that
+pin 1 must be the first PIN(...) in the file.
+
+
+
+Doing things this way makes it possible to use one package file for several
+different circuits. See the sample files `dil*'.
+
+
+
+The lowest x and y coordinates of all subobjects of an element are used
+as an attachment point for the crosshair cursor of the main window.
+
+
+
+
+File = {Element}...
+Element = "Element(" Flags Description LayoutName Value \
+ TextX TextY direction scale TextFlags")"
+ "(" {ElementData}... [Mark] ")"
+ElementData = {ElementLine | Pad | Pin | ElementArc }...
+ElementArc = "ElementArc(" X Y Width Height
+ StartAngle DeltaAngle Thickness ")"
+ElementLine = "ElementLine(" X1 Y1 X2 Y2 Thickness ")"
+Mark = "Mark(" X Y ")"
+Pad = "Pad(" X1 Y1 X2 Y2 Thickness Name PinNumber Flags ")"
+Pin = "Pin(" X Y Thickness DrillingHole Name PinNumber Flags ")"
+
+
+
+
+- `Element'
+
-
+Objects of type element are determined by flags, some names, a canonical
+and a layout name as well as a value. Additional fields are text position,
+their direction counted from zero to three (n * 90 degrees counter-clockwise)
+and element data.
+
+
+
+- `Flags'
+
-
+The flag field determines the state of an element.
+The bit values are:
+
+
+ bit 4: the element name is hidden
+ bit 6: element has been selected
+ bit 7: element is located on the solder side
+
+
+ - `TextFlags'
+
-
+
- `scale'
+
-
+
- `direction'
+
-
+See the description of text object earlier in this chapter.
+
+
- `ElementLine'
+
-
+A line is defined by its start and end points and by its size, or width.
+
+
- `ElementArc'
+
-
+Defines an arc by its center, width, height, startangle, its length in
+degrees and its size. Remember the y axis on the screen grows downwards.
+
+
- `Mark'
+
-
+is just a hint to make positioning easier. The crosshair will be positioned
+here. Its center is passed as the two arguments.
+
+
- `Pad'
+
-
+A pad is very similar to a line except it may not be disconnected from
+its element and it has an associated name.
+Is is defined by two end point position, size, name and by some flags.
+
+
+ bit 2: set if pad was found during a connection search
+ bit 5: display the pads name
+ bit 6: pad has been selected
+ bit 7: pad is located on the solder side
+
+
+ - `Pin'
+
-
+A pin is very similar to a via except it may not be disconnected from
+its element.
+
+
+ bit 0: always set
+ bit 1: always clear
+ bit 2: set if pin was found during a connection search
+ bit 3: set if pin is only a mounting hole (no copper annulus)
+ bit 5: display the pins name
+ bit 6: pin has been selected
+ bit 8: pin is drawn as a square
+ bit 12: set if pin is drawn with an octagonal shape
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+A number of user defined symbols are called a font. There is only one per
+layout. All symbols are made of lines. See the file `default_font'
+as an example.
+
+
+
+The lowest x and y coordinates of all lines of a font are transformed to (0,0).
+
+
+
+
+File = Font
+Font = {FontData}...
+FontData = {Symbol}...
+Symbol = "Symbol(" SymbolID FontPosition ")"
+ "(" {SymbolData}... ")"
+SymbolData = {SymbolLine}...
+
+
+
+
+- `Symbol'
+
-
+The two arguments are the
ASCII
code of the symbol and its distance to
+the next symbol. Undefined symbols are drawn as filled rectangles.
+The ASCII
code may be passed as a character constant or as a hexadecimal
+value.
+
+
+
+- `SymbolLine'
+
-
+The symbol data itself is made up of several entries
+of type SymbolLine.
+
+
+
+
+
+
+
+
+
+
+
+
+There is nothing like a special library format. The ones that have been
+introduced in 1.4.1 just use some nice (and time consuming) fetures of GNU
+m4
. The only predefined format is the one of the contents file
+which is read during startup. It is made up of two basic line types:
+
+
+
+
+menu entry = "TYPE="name
+contents line = template":"package":"value":"description
+name = String
+template = String
+package = String
+value = String
+description = String
+String = <anything except ":", "\n" and "\r">
+
+
+
+No leading whitespaces or comments are allowed in this file. If you need
+either one, define a command that removes them before loading. Have a look
+to the libraryContentsCommand resource.
+
+
+
+The menu entry will appear in the selection menu at the top and of the
+library window.
+
+
+
+
+
+
+
+
+
+
+This section provides an overview about the existing m4
definitions
+of the elements. There are basically two different types of files. One
+to define element specific data like the pinout, package and so on, the
+other to define the values. For example the static RAM circuits 43256 and
+62256 are very similar. They therefore share a common definition in the
+macro file but are defined with two different value labels.
+
+
+
+The macro file entry:
+
+
+define(`Description_43256_dil', `SRAM 32Kx8')
+define(`Param1_43256_dil', 28)
+define(`Param2_43256_dil', 600)
+define(`PinList_43256_dil', ``pin1', `pin2', ...')
+
+
+
+And the list file:
+
+
+43256_dil:N:43256:62256
+
+
+
+The macro must define a description, the pin list and up to two additional
+parameters that are passed to the package definitions. The first one is
+the number of pins whereas the second one defines for example the width
+of a package.
+
+
+
+It is very important to select a unique identifier for each macro. In
+the example this would be 43256_dil which is also the templates name.
+It is required by some low-level macros that
+Description_, Param1_, Param2_ and PinList_ are prepended.
+
+
+
+The list file uses a syntax:
+
+
+template:package:value[:more values]
+
+
+
+This means that the shown example will create two element entries with the
+sam package and pinout but with different names.
+
+
+
+A number of packages are defined in `common.m4'. Included are:
+
+
+
+
+DIL packages with suffix D, DW, J, JD, JG, N, NT, P
+PLCC
+TO3
+generic connectors
+DIN 41.612 connectors
+zick-zack (SD suffix)
+15 pin multiwatt
+
+
+
+If you are going to start your own library please take care about m4
+functions. Be aware of quoting and so on and, most important check your
+additional entry by calling the macro:
+
+
+
+
+CreateObject(`template', `value', `package suffix')
+
+
+
+If quoting is incorrect an endless loop may occur (broken by a out-of-memory
+message).
+
+
+
+The scripts in the `lib' directory handle the creation of libraries
+as well as of their contents files. Querying is also supported.
+
+
+
+I know quite well that this description of the library implementation is
+not what some out there expect. But in my opinion it's much more useful to
+look at the comments and follow the macros step by step.
+
+
+
+
+
+
+Compiling and installing the package should be straightforward. If any problems
+occur, please contact the author (Thomas.Nau@rz.uni-ulm.de) to find
+a solution and include it into the next release.
+
+
+
+
+
+
+
+
+
+
+
+
+This section covers the steps which are necessary to compile the package.
+
+
+
+
+- config.h: Editing `config.h' options.
+
- manuals: Creating the man page, info file and this manual.
+
- make: Creating the `Makefile', compiling and installing.
+
+
+
+
+
+
+
+
+
+
+Most X11
related options are automatically covered by imake
+which is called from xmkmf
. The ones special to Pcb
+have to be edited in `config.h'.
+In order of appearance:
+
+
+
+
+- `INFOLIBDIR'
+
-
+
+
+must be set to the directory where your GNU info files are located.
+
+
+
- `/usr/X11R6/lib/X11/pcb'
+
-
+is the path of a directory where the font files will be installed.
+
+
+
- `DEFAULTFONT'
+
-
+the name of the default font file.
+
+
+
- `DEFAULTLIBRARY'
+
-
+the name of the default library.
+
+
+
- `gm4'
+
-
+the name of GNUs m4 version.
+
+
+
- `Mod1'
+
-
+If your window manager has already bound Mod1 together with some
+function keys you may want to change this setting. This is true for HP-VUE.
+
+
+
- `EXTRA_INCLUDES'
+
-
+Some systems do not have the Athena Widget include files in their normal
+place as configured by
X11
s config files. Define this as follows:
+
+
+ EXTRA_INCLUDES = -I/usr/openwin/share/include
+
+
+This is probably true for Suns which use OpenWindows
.
+
+
+ - `PATCHES'
+
-
+This symbol is passed to the compiler. Use it to define additional compiler
+flags.
+Add the -DNEED_STRDUP flag, if your system does not have a strdup()
+library function.
+
+
+
- `HAS_REGEX'
+
-
+Set to -DHAS_REGEX if your system supports regular expressions.
+This enables the actions Select(*ByName).
+
+
+
+
- `EXITCALL'
+
-
+The symbol EXITCALL should be defined according to the
+call on exit functions supported by your system. There are three
+choices:
+
+
+ EXITCALL = -DHAS_ATEXIT if atexit() is supported (SYSV)
+ EXITCALL = -DHAS_ON_EXIT if on_exit() and no atexit() is supported
+ EXITCALL = if none of them is supported
+
+
+Please check your manpages for details.
+
+
+ - `SYS_LIBRARIES'
+
-
+This symbol is used to pass additional libraries to the linker. The only
+additional libraries which are used are the math and lex library.
+
+
+
+
+If you have to make system dependent changes please include them into a
+#ifdef Architecture ... #endif construct and mail a copy to
+the author (Thomas.Nau@rz.uni-ulm.de).
+
+
+
+Now run xmkmf -a
which creates the `Makefiles' and runs
+make depend
. This should finish without any problems except some
+systems which complain about missing include files. Don't worry about any
+such warnings at this time, the package should compile without any problems.
+
+
+
+
+
+
+
+
+
+
+
+After xmkmf -a
has created the new `Makefile' you are able to
+create the manpages, the application resource, the info file, the
+TeX
output and a reference card by executing
+
+
+ (cd doc; make)
+ (cd src; make Pcb.ad)
+
+
+
+You'll need TeX
, texindex
and, if you want PostScript
,
+dvips
to build the manuals. Preformatted documentation for the
+default configuration may be found in the `./doc.ps' directory.
+A simple make builds everything.
+Generate a printed copy to make your life easier.
+TeX-3.0
failed, TeX-3.14
worked just fine.
+
+
+
+
+
+
+
+
+After reaching this point, it is time for make
. It should build
+everything without any errors.
+If it doesn't refer to section Troubleshooting.
+
+
+
+You have to be root to install the package or at least a user with
+the appropriate priveleges in some X11
directories. Set the umask to
+022 or else some files will not be found because the directory isn't
+world readable.
+
+
+
+If you do not have the appropriate permissions you should run
+`./pcbtest.sh' in the `src' directory to run Pcb
from
+the installation directory.
+
+
+
+make install
and make install.man
install the program,
+the fonts, the application default resource file, all element and package
+data as well as the manpage into the X11
directories.
+make install.info
does the same for the GNU
info file.
+
+
+
+
+
+
+
+
+
+There are some known problems. Most of them are related to
+missing parts of a standard X11
distribution. Some others are caused by
+third party applications such as X
servers. To make this list more
+complete please mail your problems and, if available, solutions to the author.
+The mail address may be found at the beginning of this chapter.
+In any case, read section Problems related to X11.
+
+
+
+By the way, you MUST HAVE AN ANSI COMPILER
to make Pcb
work.
+
+
+
+If the shell script create_sed_script.sh
fails with an error
+of awk
check your system for nawk
or get the GNU gawk
.
+See the script for details.
+
+
+
+Another source of problems are older versions of flex
and bison
.
+Pcb
definitely works with flex-2.4.7
and bison-1.22
or
+later. The problems will result in a syntax error while parsing files.
+You will have to add -lfl to the SYS_LIBRARIES identifier in
+`Imakefile'. See also, section FreeBSD and NetBSD.
+
+
+
+The following list gives you just an idea because I'm not able to test
+all Pcb
releases on all platforms.
+
+
+
+
+- HP: Hewlett-Packard series 700 and 800 running HP-UX 10.*
+
- Sun: Sun, Solaris 2.5
+
- SGI: SGI, IRIX 5.3 and 6.*
+
- DEC Alpha: DEC Alpha, DEC UNIX 3.2c and 4.0
+
- SCO: SCO Unix ODT 3.0, PC hardware
+
- Linux: Linux 0.99pl14 and later
+
- FreeBSD: FreeBSD, NetBSD ...
+
- X11: Refers to
X11R4
, X11R5
, and OpenWindows
+ - TeX and Manuals: Problems creating the `pcb.dvi'
+
+
+
+
+
+
+
+
+
+
+You have to install several X11
tools (imake
) and include files
+or, better, install a complete X11R5
release. Hewlett-Packard doesn't
+support the Athena Widgets. So the header files and libraries are missing
+from the application media, but they are available as a patch.
+They also do not ship the ANSI
compiler with the normal operating
+system release so you have to buy one or use GCC
.
+Some of the tools are available as patches.
+
+
+
+In addition, Pcb
has been successfully tested on these platforms with
+HPUX 9.*, 10.*
running self-compiled X11R5
.
+
+
+
+
+
+
+
+
+
+
+
+There are no known problems with Sun machines if they use X11R5
instead
+of OpenWindows
. Pcb
compiled successfully with all kinds of
+SPARCstations Solaris-2.[345]
.
+
+
+
+For problems with OpenWindows
refer to section Problems related to X11.
+
+
+
+If xmkmf
is missing, try
+
+
+ /usr/openwin/bin/imake -DUseInstalled -I/usr/openwin/lib/config
+ make Makefile
+ make includes
+ make depend
+
+
+
+instead. I got it compiled but the linker complained about missing symbols.
+The problem may be related to the mixed OpenWindows
- X11R5
+environment which is installed on the test machine.
+Anyway the code was executable and I haven't got a core yet.
+
+
+
+
+
+
+
+
+
+
+Pcb
has been tested on some boxes running either IRIX-4.0.5
or
+IRIX-5.3
. The former one uses a X11R4
server.
+There are no problems except some additionally needed
+compiler flags. For known problems
+with X11R4
, see section Problems related to X11. Check `Imakefile', too.
+
+
+
+
+
+
+
+
+
+
+Pcb
compiled and runs without problems on DEC UNIX V3.2c
if you
+do the following instead of calling xmkmf -a
:
+
+
+ xmkmf
+ make Makefiles
+ make includes
+ make depend
+
+
+
+
+
+
+
+
+
+
+John DuBois <spcecdt@deeptht.armory.com> wrote:
+
+
+SCO-ODT-3.0
requires the latest version of tls003, the Athena
+widget library (available from sosco.sco.com). The main problems
+I have encountered are it core dumps fairly often, especially
+while loading/dropping elements...
+
+
+
+I'll see what I am able to do as soon as I have access to an SCO
system.
+
+
+
+
+
+
+
+
+
+
+Since the X11
version of Pcb
has been developed on a Linux
+system here are no known problems.
+
+
+
+
+
+
+
+
+
+
+If Pcb
complains about syntax errors even in the demo files get
+rid of your lex
and yacc
implementation. Replace them by
+GNU flex
and bison
. Don't forget to change the SYS_LIBRARIES
+in `Imakefile' from -ll to -lfl. You also need to define:
+
+
+ YACC = bison -y
+ LEX = flex
+
+
+
+
+
+
+
+
+There are a some problems related to X11R4
or systems derived from
+X11
such as OpenWindows
. See section Sun SPARC architecture. You at least have to change
+all occurances of baseTranslations in the resource files to
+translations if you are using a X11R4
server. Look at the
+X11R5
Intrinsics manual for details.
+
+
+
+The panner widget (print dialog box) appears only in release X11R5
and
+later. It really simplifies adjusting the offsets.
+With earlier releases the printout will always appear in the center of the
+page.
+
+
+
+You may have some problems in a mixed X11-OpenWindows
+environment.
+If you want to try it anyway you have to add an additional path for
+include files and define another symbol in `Imakefile',
+
+
+ EXTRA_INCLUDES = -I/usr/openwin/include
+
+
+
+Pcb
has been tested successfully with X11R6
under Linux 1.1.59
+and later.
+
+
+
+
+
+
+
+
+If your TeX
installation complains about a missing `texinfo.tex'
+file copy the one included in this release (directory `doc'
+to your TeX
macro directory.
+Note, there are probably newer versions of this file available from some
+FTP sites.
+TeX-3.0
failed, TeX-3.14
worked just fine. Check our FTP server
+ftp.uni-ulm.de for ready-to-print versions of the manuals.
+
+
+
+
+
+
+Jump to:
+/
+-
+a
+-
+b
+-
+c
+-
+d
+-
+e
+-
+f
+-
+g
+-
+h
+-
+i
+-
+l
+-
+m
+-
+o
+-
+p
+-
+r
+-
+s
+-
+t
+-
+u
+-
+v
+-
+w
+-
+z
+
+
+
+/usr/X11R6/lib/X11/pcb
+
+
+
+absoluteGrid
+alignmentDistance
+allDirectionLines, allDirectionLines
+
+
+
+backupInterval, backupInterval
+bloat
+
+
+
+charactersPerLine, charactersPerLine
+connectedColor
+crosshairColor
+
+
+
+default font
+DEFAULTFONT
+DEFAULTLIBRARY
+
+
+
+elementColor
+elementCommand, elementCommand, elementCommand
+elementContentsCommand
+elementPath
+elementSelectedColor
+EXITCALL, EXITCALL
+EXTRA_INCLUDES
+
+
+
+fileCommand, fileCommand, fileCommand
+filePath
+fontCommand, fontCommand, fontCommand
+fontFile, fontFile
+fontPath
+
+
+
+gm4
+grid
+gridColor
+
+
+
+HAS_REGEX
+
+
+
+INFOLIBDIR
+invisibleObjectsColor
+
+
+
+layerColor
+layerGroups, layerGroups
+layerName
+layerSelectedColor
+libraryCommand, libraryCommand, libraryCommand
+libraryContentsCommand, libraryContentsCommand
+libraryFilename, libraryFilename
+libraryPath, libraryPath
+lineThickness
+
+
+
+media
+Mod1
+
+
+
+offLimitColor
+
+
+
+PATCHES
+pinColor
+pinoutFont0..4
+pinoutNameLength, pinoutNameLength
+pinoutOffsetX
+pinoutOffsetY
+pinoutTextOffsetX
+pinoutTextOffsetY
+pinoutZoom, pinoutZoom
+pinSelectedColor
+printCommand
+
+
+
+raiseLogWindow
+ratCommand
+ratPath
+resetAfterElement, resetAfterElement
+ringBellWhenFinished, ringBellWhenFinished
+routeStyle, routeStyle
+rubberBandMode
+
+
+
+saveCommand, saveCommand, saveCommand
+saveInTMP, saveInTMP
+saveLastCommand, saveLastCommand
+shrink
+size, size
+stipplePolygons
+SYS_LIBRARIES
+
+
+
+textScale
+
+
+
+useLogWindow
+
+
+
+viaColor
+viaDrillingHole
+viaSelectedColor
+viaThickness
+volume, volume
+
+
+
+warnColor
+
+
+
+zoom
+
+
+
+
+
+
+
+Jump to:
++
+-
+-
+-
+:
+-
+a
+-
+b
+-
+c
+-
+d
+-
+e
+-
+l
+-
+m
+-
+n
+-
+p
+-
+q
+-
+r
+-
+s
+-
+t
+-
+u
+
+
+
++alldirections
++reset
++ring
++s
++save
+
+
+
+-alldirections
+-backup
+-c
+-copyright
+-fontfile
+-help
+-lelement
+-lfile
+-lfont
+-lg
+-libname
+-libpath
+-llib
+-llibcont
+-loggeometry
+-pnl
+-pz
+-reset
+-ring
+-rs
+-s
+-save
+-sfile
+-size
+-v
+-version
+
+
+
+:actionCommand()
+:l
+:le
+:m
+:q
+:rn
+:s
+:w[q]
+
+
+
+AddRats()
+Atomic()
+
+
+
+Bell()
+
+
+
+ChangeDrillSize()
+ChangeHole()
+ChangeName()
+ChangeOctagon()
+ChangeSize()
+ChangeSquare()
+Command()
+Connection()
+
+
+
+DeleteRats()
+Display()
+DRC()
+
+
+
+EditLayerGroups()
+
+
+
+Load()
+
+
+
+MarkCrosshair()
+Mode()
+MovePointer()
+MoveToCurrentLayer()
+
+
+
+New()
+
+
+
+PasteBuffer()
+Polygon()
+Print()
+
+
+
+Quit()
+
+
+
+Redo()
+RemoveSelected()
+Report()
+RouteStyle()
+
+
+
+Save()
+Select()
+SetValue()
+SwapSides()
+SwitchDrawingLayer()
+
+
+
+ToggleHideName()
+
+
+
+Undo()
+Unselect()
+
+
+
+
+
+
+
+Jump to:
+/
+-
+a
+-
+b
+-
+c
+-
+d
+-
+e
+-
+f
+-
+g
+-
+h
+-
+i
+-
+k
+-
+l
+-
+m
+-
+n
+-
+o
+-
+p
+-
+q
+-
+r
+-
+s
+-
+t
+-
+u
+-
+v
+-
+x
+-
+z
+
+
+
+/tmp, /tmp, /tmp
+
+
+
+about, command button
+action command
+actions
+Actions, initiating
+alignment
+alignment targets
+Alpha
+arc
+arc, an example
+architecture, architecture, architecture, architecture, architecture, architecture
+ASCII files, format of
+Atari version
+atomic
+
+
+
+backup, backup, backup, backup, backup
+basic types
+bell
+bloat
+buffer, an example
+buffer, convert contents to element
+buffer, popup menu
+buffer, selecting a
+button translations
+
+
+
+cat, cat, cat
+centering
+change active layer
+change drawing layer
+change object name
+change settings
+change sizes, change sizes
+change square flag
+change viewing side
+characters per line, characters per line
+clipping lines to 45 degree, clipping lines to 45 degree
+clipping of lines
+closing a polygon
+color printout
+color, warning
+colors, colors, colors, colors, colors, colors, colors, colors, colors, colors
+command-line options
+compile, how to
+config.h
+connection, removing an
+connections, colors
+connections, creating list of
+connections, popup menu
+connections, reseting
+connections, reseting after element, connections, reseting after element
+connections, searching for
+control panel
+copy an object
+copying objects
+copying, an example
+copyright
+creating objects
+cursor color
+cursor movements
+cursor position
+cursor steps
+cutting objects
+
+
+
+DEC
+default font, default font
+default layout size
+default library
+default text scaling
+default translations
+design rule checking, design rule checking
+device, selecting an output
+directory /tmp, directory /tmp, directory /tmp
+display
+display, popup menu
+displaying element names, displaying element names
+displaying pinout
+displaying status information
+DOS filenames
+drawing objects
+drc, drc, drc, drc
+drill
+drilling hole, changing of objects
+drilling hole, setting of initial size
+DVI format of manual
+
+
+
+element name, hiding
+element name, removing from silk-screen
+element, an example
+element, an overview
+element, color, element, color
+element, command, element, command
+element, creating a new package
+element, display names of, element, display names of
+element, fileformat
+element, files, element, files, element, files
+element, loading to buffer
+element, move name of
+entering user commands
+erasing objects
+example files
+example of buffer handling
+example of connection lists
+example of copying
+example of creating an element
+example of element handling
+example of line handling
+example of loading
+example of loading an element file
+example of moving
+example of pastebuffer handling
+example of pin handling
+example of polygon handling
+example of printing
+example of rectangle handling
+example of saving
+example of text handling
+example of via handling
+exit, exit
+
+
+
+file format, element data
+file format, font data
+file format, layout data
+file format, libraries
+file format, library contents
+file formats
+file formats, basic types
+file load command, file load command
+file save command, file save command
+file, popup menu
+font command, font command
+font file, format of
+font files, font files, font files
+font, an overview
+font, used for pin names
+format of element files
+format of font files
+format of layout files
+format of libraries
+format of library contents
+FreeBSD
+
+
+
+grid, grid, grid
+grid color
+grid, absolute and relative, grid, absolute and relative
+grid, display, grid, display
+grid, setting of
+groups, groups
+groups, editing of
+
+
+
+Hewlett Packard
+hide element name
+how to start
+HP
+
+
+
+info file
+information about objects
+input-field, position of
+inputfield, saving entered command-line, inputfield, saving entered command-line
+inputfield, start user input
+install, how to
+
+
+
+key translations
+keyboard bell, keyboard bell
+
+
+
+layer, change active
+layer, name of
+layers, an overview
+layers, changing active one
+layers, colors
+layers, editing of groups
+layers, groups, layers, groups
+layers, switching on/off
+layout files, layout files, layout files, layout files, layout files
+layout files, format of
+layout files, saving of, layout files, saving of
+layout objects, an overview
+layout size
+layout, default size of
+layout, loading a
+layout, loading to buffer
+layout, merging a
+layout, printing a
+layout, start a new
+layout-name, layout-name
+length of a pin name, length of a pin name
+length of outputline
+library command, library command
+library contents command, library contents command
+library contents file, format of
+library file, format of
+library name, library name
+library search path
+library searchpath
+library window
+line clipping
+linelength
+lines, an example
+lines, an overview
+lines, clipping to 45 degree, lines, clipping to 45 degree
+lines, setting of initial size
+lines, size
+Linux
+list of connections
+listing libraries
+listing library contents
+loading a layout to buffer
+loading elements, loading elements, loading elements, loading elements, loading elements
+loading elements to buffer
+loading files
+loading fonts, loading fonts, loading fonts
+loading layouts, loading layouts, loading layouts, loading layouts
+loading symbols, loading symbols, loading symbols
+loading, an example
+log window, log window, log window, log window
+
+
+
+m4
+m4, preprocessing example files
+make
+Makefile
+manuals
+mark
+media
+media margin
+media, size of
+menus
+merging layouts
+messages, messages, messages, messages
+mirroring printout
+mode selection
+mode, selecting of
+mounting holes
+move
+move an object
+moving objects to current layer
+moving, an example
+
+
+
+name of an element
+name, change an objects
+namelength of pins, namelength of pins
+NetBSD
+netlist, netlist, netlist, netlist, netlist, netlist
+
+
+
+object, change name of
+object, changing the size of an
+object, copy an
+object, creating an
+object, drawing and removing
+object, move an
+object, removing an, object, removing an
+object, selecting an
+objects, moving to current layer
+objects, popup menu
+octagonal pins and vias
+off limit color
+offset of pinnames
+offset of pinout
+offset of printout
+OpenWindows
+operation modes, selecting of
+outline printout
+output device
+outputline, length of
+overlap, minimum
+
+
+
+pastebuffer, an example
+pastebuffer, convert contents to element
+pastebuffer, popup menu
+pastebuffer, selecting a
+path for element files
+path for font files
+path for layout files
+path for libraries
+PC UNIX, PC UNIX, PC UNIX
+pin color
+pin, name of, pin, name of
+pinout of elements
+pinout, display of
+pinout, font to display pin names
+pinout, zoomfactor of display, pinout, zoomfactor of display
+pins, an example
+pins, changing shape of
+pointer, moving of
+polygon
+polygon point, go back to previous
+polygon, an example
+polygon, an overview
+polygon, closing a
+popping up menus
+postprocessing layout data, postprocessing layout data
+preprocessing element data, preprocessing element data, preprocessing element data
+preprocessing font data, preprocessing font data
+preprocessing layout data, preprocessing layout data
+preventing loss of data, preventing loss of data, preventing loss of data
+print command
+print media, print media
+print offset
+printing
+printing a layout
+printing, an example
+problems
+
+
+
+quit, quit
+
+
+
+rat-line, rat-line, rat-line
+rats nest, rats nest, rats nest, rats nest, rats nest, rats nest
+recover, recover
+rectangle, an example
+redo
+redrawing layout
+refreshing layout
+release, current
+removing connections
+removing objects, removing objects, removing objects
+removing selected objects
+report
+report, popup menu
+reseting found connections, reseting found connections, reseting found connections
+resources
+rotate
+rotating a buffer
+rotating printout
+routing style, routing style, routing style
+rubberband, rubberband
+
+
+
+saving connections
+saving files
+saving found connections
+saving last entered user command, saving last entered user command
+saving layouts, saving layouts, saving layouts, saving layouts, saving layouts, saving layouts, saving layouts
+saving, an example
+scaling a printout
+scanning connections
+SCO
+scrolling, scrolling
+searching connections
+searchpath for element files
+searchpath for font files
+searchpath for layout files
+searchpath for libraries
+selected object, removing an
+selected objects, changing size
+selected objects, removing
+selecting a buffer
+selecting a new mode
+selecting objects, selecting objects
+selection, selection
+selection, an example
+selection, popup menu
+SGI
+shrink
+signal
+Silicon Graphics
+size of a layout
+size of lines
+size of lines and vias
+size of vias
+sizes, changing of objects, sizes, changing of objects
+sizes, popup menu
+Solaris
+spacing, minimum
+speaker volume, speaker volume
+square flag, changing of objects
+start user input
+starting a new layout
+starting Pcb
+status information
+strings, an example
+strings, an overview
+Sun
+symbols, symbols
+symbols, an overview
+
+
+
+temporary files, temporary files, temporary files
+TeX, problems
+texinfo file
+text, an example
+text, an overview
+text, default scaling
+text, editing
+thickness of lines
+thickness of objects
+thickness of vias
+thickness, changing of objects, thickness, changing of objects
+translations, translations
+troubleshooting
+
+
+
+undo
+undo, multi-action resources
+undo, popup menu
+unix command, unix command, unix command, unix command, unix command, unix command, unix command, unix command, unix command, unix command, unix command, unix command
+unselect objects
+user commands
+user input, user input
+
+
+
+version, current
+vias, an example
+vias, an overview
+vias, changing shape of
+vias, color
+vias, converting to mounting hole
+vias, setting of initial size
+vias, size
+viewing side, changing of
+volume of speaker, volume of speaker
+
+
+
+X11
+X11 default translations
+X11 resources
+X11 translations
+X11, problems
+xmkmf
+
+
+
+zoom of drawing window
+zoom of pinout window, zoom of pinout window
+zoom, setting
+zoom, setting of
+
+
+
+
+This document was generated on 31 August 2000 using
+texi2html 1.56k.
+
+
diff --git a/cad/pcb/files/pcb.info b/cad/pcb/files/pcb.info
new file mode 100644
index 000000000000..d206463fd1e3
--- /dev/null
+++ b/cad/pcb/files/pcb.info
@@ -0,0 +1,4125 @@
+This is Info file pcb.info, produced by Makeinfo version 1.68 from the
+input file pcb.texi.
+
+INFO-DIR-SECTION PCB Layout Tool
+START-INFO-DIR-ENTRY
+* Pcb: (pcb). PCB Layout Tool.
+END-INFO-DIR-ENTRY
+
+ This file documents how to use Pcb, the interactive printed circuit
+board layout system for `X11'.
+
+ Copyright (C) 1994,1995,1996 Thomas Nau
+
+ This program is free software; you may redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or (at
+your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANT-ABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+
+File: pcb.info, Node: Top, Next: Copying, Prev: (dir), Up: (dir)
+
+Pcb
+***
+
+ This document is a manual for `Pcb', the interactive printed circuit
+board layout system for `X11'.
+
+* Menu:
+
+* Copying:: `Pcb' is freely redistributable!
+* History:: How it all began.
+* Intro:: A short description of the basic objects.
+* Getting Started:: Introduction to `Pcb'.
+* User Commands:: User commands of `Pcb'.
+* Command-Line Options:: Calling `Pcb' from a shell.
+* X11 Interface:: Action routines, resources and default translation.
+* File Formats:: Description of `ASCII' files used by `Pcb'.
+* Installation:: Compiling, installing and troubleshooting.
+
+
+File: pcb.info, Node: Copying, Next: History, Prev: Top, Up: Top
+
+Copying
+*******
+
+ Copyright (C) 1994,1995,1996,1997 Thomas Nau
+
+ This program is free software; you may redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or (at
+your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANT-ABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+General Public License for more details.
+
+
+File: pcb.info, Node: History, Next: Intro, Prev: Copying, Up: Top
+
+History
+*******
+
+ `Pcb' is a handy tool for laying out printed circuit boards. It was
+first written for an Atari ST in 1990 and ported to `UNIX' and `X11' in
+1994. I never had the intention to create another professional layout
+system, but to write a tool which supports people like you who do some
+home-developing of hardware. For this reason it has no auto-router nor
+auto-placement code.
+
+ The second release 1.2 included menus for the first time. This made
+`PCB' easier to use and thus a more important tool.
+
+ Release 1.3 introduced undo for highly-destructive commands, more
+straightforward action handling and scalable fonts. Layer-groups were
+introduced to group signal-layers together.
+
+ Release 1.4 provided support for add-on device drivers. Two layers
+(the solder and the component side) were added to support SMD elements.
+The handling of libraries was also improved in 1.4.1. Support for
+additional devices like GERBER plotters started in 1.4.4. The undo
+feature was expanded and the redo-feature added in 1.4.5.
+
+ Release 1.5 provides support for rats-nest generation from simple net
+lists. It also allows for automatic clearances around pins that pierce
+a polygon. A variety of other enhancments including a Gerber RS274X
+driver and NC drill file generation have also been added. harry eaton
+(haceaton@aplcomm.jhuapl.edu) was responsible for most of the changes
+found in this release.
+
+ Release 1.6 provides automatic screen updates of changed regions.
+This should elliminate most of the need for the redraw (r) key. Also
+some changes to what order items under the cursor are selected were
+made for better consistancy - it is no longer possible to accidentally
+move a line or line point that is completely obscured by a polygon
+laying over top of it. Larger objects on the upper most layers can be
+selected ahead of smaller objects on lower layers. These changes make
+operations more intuitive. A new mode of line creation was added that
+creates two line on 45 degree angles with a single click. The actual
+outline of the prospective line(s) are now shown during line creation.
+An arc creation mode was added. Drawn arcs are quarter circles and can
+be useful for high frequency controlled impedance lines. (You can have
+eighth circle arc if the source is compiled with -DARC45, but be aware
+that the ends of such arcs can never intersect a grid point). Two new
+flags for pins and vias were created - one indicates that the pin or
+via is purely a drill hole and has no copper annulus. You can only
+toggle this flag for vias - for elements, it must be an integral part
+of the element definition. The other flag controls whether the pad
+will be round or octagonal. There is also now a feature for converting
+the contents of a buffer into an element. Vias become the pins (or
+mounting holes), lines and arcs on the solder layer become silkscreen,
+and lines on the component layer become the pads. Action commands
+entered via the colon command entry are no longer proceeded with "a ",
+just type the command directly. Several bugs have also been fixed. New
+ones were probably introduced since extensive changes were made. harry
+eaton was responsible for these changes.
+
+ Release 1.6.1 adds the ability to make groups of action commands
+bound to a single X11 event to be undone by a single undo. Also a
+simple design rule checker was added - it checks for minimum spacing
+and overlap rules. Plus many fixes for bugs introduced with the many
+changes of 1.6 harry is responsible for these changes too.
+
+ Special thanks goes to:
+ Bernhard Daeubler (Bernhard.Daeubler@physik.uni-ulm.de)
+ Harald Daeubler (Harald.Daeubler@physik.uni-ulm.de)
+ Roland Merk (merk@faw.uni-ulm.de)
+ Erland Unruh (Erland.Unruh@malmo.trab.se)
+ Albert John FitzPatrick III (ajf_nylorac@acm.org)
+ Boerge Strand (borges@ifi.uio.no)
+ harry eaton (haceaton@aplcomm.jhuapl.edu)
+ Andre M. Hedrick (hedrick@Astro.Dyer.Vanderbilt.Edu)
+
+ who did most of the alpha and beta testing, helped to port `PCB' to
+ several operating systems and platforms and corrected several typos
+in the manuals. In addition to these, many others donated time for
+bug-fixing and other important work. Some of them can be identified in
+the source code files. Thanks to all of them.
+
+
+File: pcb.info, Node: Intro, Next: Getting Started, Prev: History, Up: Top
+
+Introduction
+************
+
+ Each layout consists of several, mostly independent, objects. This
+chapter gives an overview of the object types and their relationship to
+each other. For a complete description of how to use `Pcb', refer to
+*Note Getting Started::. The layout is generated on-screen on a grid
+that has its origin in the upper left corner of the screen. The x
+coordinate increases to the right, y increases down to the bottom. All
+distances and sizes in `Pcb' are measured in mils (0.001 inch). One
+unit on the display grid is one mil in distance on the board. The
+sections in this chapter are sorted by the order of appearance of the
+objects within a layout file.
+
+* Menu:
+
+* Symbol Objects:: Information about fonts and symbols.
+* Via Objects:: Vias and pins connect layers.
+* Element Objects:: Element, the basic type of circuits.
+* Layer Objects:: A `container' for lines, text...
+* Line Objects::
+* Arc Objects::
+* Polygon Objects::
+* Text Objects:: Objects to add symbols to your board.
+
+
+File: pcb.info, Node: Symbol Objects, Next: Via Objects, Up: Intro
+
+Symbols
+=======
+
+ The top object is the layout itself. It uses a set of symbols that
+resides at the first logical level. Each symbol is uniquely identified
+by a seven bit `ASCII' code. All layout objects share the same set of
+symbols. These symbols are used to form text objects on the silkscreen
+and copper layers. Undefined symbols are drawn as filled rectangles.
+
+ Every font file is preprocessed by a user-defined command when it is
+loaded. For details see `fontCommand', *Note Resources::.
+
+
+File: pcb.info, Node: Via Objects, Next: Element Objects, Prev: Symbol Objects, Up: Intro
+
+Vias
+====
+
+ Vias are identical to the pins used by elements except that they can
+be added or removed individually. The purpose of vias is to provide
+connections between different layers. Don't use vias for adding
+elements to the layout, even if that seems easier than creating a new
+element. Vias are useful for defining arbitrary drill points such as
+those used for mounting a board. You can assign a name to a via even
+though you probably won't ever want to. Vias reside at the first
+logical level; therefore, each via exists on all layers. (*i.e.* blind
+vias are not supported)
+
+
+File: pcb.info, Node: Element Objects, Next: Layer Objects, Prev: Via Objects, Up: Intro
+
+Elements
+========
+
+ Elements represent the components on a board. Elements are loaded
+from `ASCII' coded files in a similar manner to the layout file itself.
+They are composed of lines and arcs on the silk-screen layer (used to
+define the package outline) , pins (or pads for SMD) and three labels
+that define the description, the element's layout-name (which also
+appears on the silk- screen layer) and its value. Element pins are
+contained on the first logical level and so reside on all layers. A
+mark is used to position the element with respect to the cursor
+cross-hair during pasting. SMD elements use pads instead of pins.
+Pads are handled similarly to lines on a layer but they must be oriented
+either vertically or horizontally. Pads can have either rounded or
+square ends. All parts of an element are treated as one unit. It is
+not possible to delete a single pin or break an element into pieces on
+the layout. You can resize separate pieces of an element, but doing so
+is usually a bad idea.
+
+ Elements are supported by several special layers: *silk*,
+*pins/pads* and *far-side*. The *silk* layer shows the package outline
+and also holds legend text and element names. The *pins/pads* layer is
+used to toggle whether the element's pins and pads are displayed. The
+*far-side* layer controls visibility of objects (silkscreen and pads)
+that are on the far (*i.e.* not currently viewed) side of the board.
+
+ Every element file is preprocessed by a user-defined command when
+the file is read. For details see `elementCommand', *Note Resources::.
+`m4', the default value of `elementCommand', allows you to create
+libraries for package definitions that are shared by all elements. The
+element libraries distributed with `Pcb' expect `m4' or an equivalent
+to be the *elementCommand*.
+
+ `Pcb' can create a list of all connections from one (or all)
+elements to the others or a list of unconnected pins. It can also
+verify the layout connections against a netlist file. The element's
+`layout-name' is the name used to identify an element in a netlist file.
+The pin numbering for an element is defined by unique strings assigned
+to each pin. In addition to the "pin number" string, each pin has a
+"name" which describes its function. Previously element pin number was
+established by the order of appearance of the pin definitions in the
+layout or element file. Since the "number" strings for each pin are a
+new feature, if they are absent then the numbering is again established
+by the order of pin appearance in the file. In other words, the first
+pin appearing in the file is pin one, the next pin is pin two and so on.
+Usually the names assigned to pins are simply numbers, but they don't
+have to be. It is only necessary that the "number" string for the pin
+matches exactly the "number" string in the netlist file. Be aware that
+a few of the library parts may still be incorrectly implemented
+regarding pin-numbering. All of the DIL (Dual- Inline-Pins) parts are
+correct and most of the others are too, but you should verify the pin
+numbering of any non-DIL part (use the *Report Menu* to see what `Pcb'
+thinks a pin's number is) before using the rats nest feature with a
+library part. Hopefully sometime soon someone will volunteer to
+cross-check all of the element libraries and make fixes available as
+necessary. `Pcb' can also check a layout to see that it meets minimum
+spacing and overlap rules.
+
+ You can make your own quick-and-dirty element definitions
+graphically now. Simply draw vias for the pins and lines and arcs on a
+solder layer for the silkscreen outline. You should name each via with
+the pin number. If you want to create a SMD device, draw lines for the
+pads on a component side layer (You must draw these in pin number order
+since lines can't be named). They must be either horizontal or vertical
+or they will not be recognized as pads. Once you are happy with the
+geometry, select everything that is to become part of the element, then
+choose "cut to buffer" from the menu. Now select "convert buffer to
+element" from the menu. Viola'! Afterwards you can make pin one
+square (or pads) if you like, and give the element its various names.
+Note that the element mark corresponds to the cut position when
+everything was put into the buffer. If the vias are not named, then the
+pin numbering will correspond to the order in which the vias were
+placed.
+
+
+File: pcb.info, Node: Layer Objects, Next: Line Objects, Prev: Element Objects, Up: Intro
+
+Layers
+======
+
+ Every layout consists of several layers that can be used
+independently or treated as a group. Layer groups can be used to
+logically separate (and color-code) different traces (*e.g.* power and
+signal); however, all layers within a group reside on the same physical
+copper layer of a board, so using different layers within the same
+group won't provide electrical separation where they touch or overlap.
+For details, see `layerGroups', *Note Resources::. Each layer is drawn
+in a color defined in the resource file (for details see `layerColor',
+*Note Resources::) and identified by a name that you can change.
+Layers are really just containers for line, polygon, and text objects.
+The component and solder layers contain SMD elements as well, but the
+file structure doesn't reflect that fact directly. Each layer group
+represents a physical layer on the printed circuit board. If you want
+to make a four layer board, you'll need to have four layer groups.
+Connections between layer groups are established only through element
+pins and vias. The relationship between a specific layer and the board
+itself is configureable from the `Edit layer groups' option in the
+`Objects' menu. The layer groups corresponding to the physical layers
+*component-side* and *solder-side* are always defined, and you must map
+at least one logical layer to each. Of course, you are not obligated
+to put tracks on either of them. SMD-elements always reside on either
+the component-side or the solder-side layer group. You can swap which
+side of the board you are viewing by pressing *Tab*. You can
+decide which layer group will be the solder side and which will be the
+component side. The layers groups just have a name or number
+associated with them - where they are sandwiched in the board is left
+to the manufacturing processes.
+
+
+File: pcb.info, Node: Line Objects, Next: Arc Objects, Prev: Layer Objects, Up: Intro
+
+Lines
+=====
+
+ Lines are used to draw tracks on the pc board. When in the line
+mode, each ** press establishes one end of a line. Once the
+second point is defined, the line is drawn and a new line started where
+the first one ended. You can abondon the new starting point in favor
+of another by pressing *Ctrl*. The undo function (*u*) will
+take you back point by point if you use it while in the line mode. New
+lines can be restricted to 45 degree angles if desired. You can toggle
+this restriction on and off while creating lines by pressing *.*
+(that is the *period* key). If the 45 degree restriction is turned on,
+then the */* can be used to cylce through three different modes of
+45 degree line creation. One mode just creates a single line forced to
+the nearest 45 degree vector. The next mode creates two lines from the
+start to end points such that the first line leaves the start point at
+a 90 degree vector, and the second line enters the end point on a 45
+degree vector. The next mode creates two lines such that the first line
+leaves the start point on a 45 degree vector and arrives at the end
+point on a 90 degree vector. You can temporarily swap between the last
+two modes by holding the shift key down. It is simple to edit a line
+type object by breaking it into pieces (insert point mode), moving an
+end point (or the whole line) (**), or changing
+the layer it resides on (*m* moves the line under the pointer to
+the active layer). In the case when two line segments meet at exactly
+the same point you can delete the intermediate point, otherwise the
+delete mode removes an entire line. Feel free to experiment since
+`Pcb' will allow you to undo anything that materially affects your work.
+If you switch active layers in the midst of placing lines a via will
+automatically be placed, when necessary, in order to continue the
+connection.
+
+
+File: pcb.info, Node: Arc Objects, Next: Polygon Objects, Prev: Line Objects, Up: Into
+
+Arcs
+====
+
+ With version 1.6 it is possible to draw copper arcs. The arcs are
+restricted to be quarter circles. This means they always bend a right
+angle. They are very similar to lines otherwise. They are created on
+the current layer and have the same thickness that new lines will have.
+The various clicks for creating lines work pretty much the same way
+for creating arcs. The start point for the arc is at the first **
+position. In order to make the arc curve in the direction desired,
+drag the mouse along the tangent line from the starting position
+towards the end position. If the grid is too coarse, it may not be
+possible to distinguish whether you've moved over then up, or up then
+over, so if you can't seem to make the arc go the direction you want,
+you should decrease the grid spacing. Alternatively you could drawn
+the wrong arc, then rotate and move it where you want. Like the line
+tool, after an arc is drawn a new starting point is established at the
+end point. Whenever a start point is established by either the line or
+arc tools it will be retained if you switch directly between the tools
+(e.g. *F2* for Lines, *F8* for Arcs. Of course connection
+searches, undo and all the other features you'd expect work with arcs
+now.
+
+
+File: pcb.info, Node: Polygon Objects, Next: Text Objects, Prev: Arc Objects, Up: Intro
+
+Polygons
+========
+
+ Sometimes it's useful to fill large areas with solid copper. The
+way to do this is with polygons. Polygons can be created in either the
+polygon mode or the rectangle mode. In the polygon mode, you'll have
+to define each corner of the polygon with a mouse click (**).
+When the last point is clicked exactly on top of the starting point,
+the polygon is finished. Since this can be hard to do, the
+*Shiftp* will enter the final point for you, closing the polygon.
+If the 45 degree angle restriction is turned on and you try to close
+the polygon when it is not possible, you'll get a warning instead. If
+you haven't finished entering a polygon, but want to undo one (or more)
+of the points that you've already defined, use the undo command
+(*u*). With the rectangle tool, defining the two opposite corners
+is sufficient, but of course the resulting polygon is a rectangle.
+Like lines, a polygon can by edited by deleting, inserting and moving
+the points that define it. `Pcb' is capable of handling complex
+polygons, but using a number of simpler ones improves performance of
+the connection tracing code.
+
+ A new feature in version 1.5 of `Pcb' automatically creates clearance
+regions around pins and vias that pierce a polygon. This means that they
+aren't electrically connected to the polygon unless you add "thermals"
+to cross the clearance region. Thermals can be added and removed by
+selecting the thermal mode and clicking ** on the pin or via.
+Remember that this only creates connections to the polygon on the
+active layer. The great advantage to this new polygon behavior is that
+simple or complex ground and/or power planes can be easily made with
+polygons and seen on the screen. If you don't want this auto-clearance
+behavior, or you load a layout created by an earlier version of `Pcb',
+the old behavior (shorts to all piercing pins and vias) is available.
+A `ChangeSize' operation (*s*) toggles a polygon between the new
+and old polygon/pin behavior.
+
+
+File: pcb.info, Node: Text Objects, Prev: Polygon Objects, Up: Intro
+
+Text
+====
+
+ Text objects should be used to label a layout or to put additional
+information on the board, but not to identify elements because elements
+have their own labels. Text is always horizontal when first created,
+but the rotate mode can align it along 0, 90, 180 and 270 degree angles.
+Text can be moved from any layer to the silk-screen layer with a
+command in the `selection menu'. Text that is moved to the silk-screen
+layer will appear on the solder-side silk-screen if it originating on a
+solder-side layer. Otherwise moving it to the silk-screen layer will
+put it on the component-side silk-screen. To move text back to a
+copper layer from the silk-screen, use the `MoveToCurrentLayer'
+(*m*) command. Text on the far side of the board will
+automatically appear mirror-imaged.
+
+ TEXT OBJECTS ON A COPPER LAYER CREATE COPPER LINES BUT THEY ARE NOT
+SCANNED FOR CONNECTIONS OR TESTED FOR CREATING SHORTS VS. THE NETLIST.
+NEITHER ARE TEXT OBJECTS TESTED AGAINST ANY DESIGN RULES.
+
+
+File: pcb.info, Node: Getting Started, Next: User Commands, Prev: Intro, Up: Top
+
+Getting Started
+***************
+
+ The goal of this chapter is to give you enough information to learn
+how `Pcb' works and how to develop your layouts to make the best use of
+`Pcb''s features. All event translations (*i.e.* the buttons and keys
+you press) refer to the default application resource file shipped with
+`Pcb'. There is probably no need to change them unless your window
+manager uses some of the button events itself; however, if you *want*
+to customize the behavior of `Pcb' then changing the resource file is
+usually the best way to do it.
+
+ Get yourself a printout of this chapter and *User Commands*, if you
+haven't already done so, and follow the examples. An example layout
+may be found in `example/68HC11'. An example illustrating some version
+1.5 features is found in `example/LED' along with its corresponding
+netlist file `example/LED.NET'.
+
+ Start `Pcb' (the actual command will use all lower-case letters)
+without any additional options. If you get the error message:
+
+ can't find default font-symbol-file 'default_font'
+
+ then the font searchpath or filename in the application resource
+ file is wrong. Be sure that your `m4' program supports searchpaths.
+If not, get `GNU m4'. For other messages, see *Note problems::.
+Another quick-start is provided by `pcbtest.sh' in the `src' directory.
+
+* Menu:
+
+* Application Window:: The elements of the main window.
+* Log Window:: The optional logging window
+* Library Window:: The circuit selection window
+* Drawing and Removing::
+* Moving and Copying::
+* Loading and Saving::
+* Printing::
+* Connection Lists:: How to get a list of all or some connections.
+* Selection:: Commands which handle more than one object.
+* Rats Nest:: Helps you place and route tracks against a netlist.
+* Design Rule Checking::
+
+
+File: pcb.info, Node: Application Window, Next: Log Window, Up: Getting Started
+
+The Application Window
+======================
+
+ The main window consists of five areas: the menu at the top, the
+control panel in the upper left corner, the mode buttons located below
+the control panel, the drawing area to the right of these, and the
+status line at the bottom of the window.
+
+* Menu:
+
+* Status-line and Input-field:: What is the program configuration.
+* Control Panel:: Switch layers on/off; change current one.
+* Mode Selectors:: Select an operation mode.
+* Drawing Area:: Where the layout is drawn.
+* Menu::
+
+
+File: pcb.info, Node: Status-line and Input-field, Next: Control Panel, Up: Application Window
+
+The Status-line and Input-field
+-------------------------------
+
+ The status-line is located at the bottom edge of the main window.
+During normal operation the status information is visible there. When
+a selected menu operation requires an additional button click, the
+status-line is replaced by a message telling you to position the cursor
+and click. When a text input is required, the status-line is replaced
+by the Input-field which has a prompt for the typed input.
+
+ The status-line shows, from left to right, the side of the board
+that you are viewing (*Tab* changes this), if an absolute (abs) or
+relative (rel) grid is used, if new lines are restricted to 45 degrees,
+which type of 45 degree line mode is active, whether rubberband move and
+rotate mode is on (R), the current grid values, and the zoom factor.
+This information is followed by the line-width, via-size and drilling
+hole in mil, text scaling, the active buffer number and the name of the
+layout. An asterisk appearing at the left edge indicates the layout has
+been modified since the last save. Note that the name of the layout is
+not the same thing as the filename of the layout.
+
+ The input-field pops up (temporarily replacing the status-line)
+whenever user input is required. Two keys are bound to the input field:
+*Escape* aborts the input, *Return* finishes it.
+
+ The present cursor position is displayed in the upper right corner
+of the window. Normally this position is an absolute coordinate, but
+with version 1.5 of `Pcb' you can anchor a marker at the current cursor
+location by pressing *Ctrlm* then the display will read both the
+absolute cursor position as well as the difference between it and the
+marker. Pressing *Ctrlm* again turns the marker off.
+
+
+File: pcb.info, Node: Control Panel, Next: Mode Selectors, Prev: Status-line and Input-field, Up: Application Window
+
+The Control Panel
+-----------------
+
+ The control panel, located at the left side of the window, is used
+to turn on and off the display of layer groups and to select the active
+drawing layer. If a layer hasn't been named, the label "*(unknown)*"
+is used as the defualt.
+
+ The upper control box is used to switch layers on and off. Click
+** on one or more of them. Each click toggles the setting.
+The currently active layer can't be switched off. The layout is
+refreshed when the pointer reenters the drawing area. This prevents
+excessive redrawing when the visibility of several layers is changed.
+When the layers are grouped, clicking on these fields will toggle the
+visibility of all layers in the same group. This is a good idea because
+layers in the same group reside on the same physical layer of the
+actual board. Use the `Edit layer groups' option in the `Objects' menu
+to change the layer groupings. Grouping layers is only useful for
+helping you to color-code signals in your layout. Note that grouping
+layers actually reduces the number of different physical layers
+available for your board, thus to make an eight layer board, you cannot
+group any layers.
+
+ *far side* turns on and off the visibility of elements (including
+SMD pads) on the opposite board side, as well as silk screening on that
+side. It does not automatically hide the x-ray view of the other copper
+layers, these must be turned off separately if desired. Use the *tab*
+key to view the entire board from the other side. To see a view of
+what the back side of the board will actually look like, make the
+solder layer the active layer then press *tab* until the status line
+says "solder" on the right, then turn off the visibility of all other
+layers except pins/pads, vias, and silk.
+
+ The lower control menu, named *active*, is used to change the active
+drawing layer. ** pops up a menu to select a one. Each entry
+is labeled with the layer's name and drawn in its color. The new
+drawing layer is automatically made visible. Try changing the active
+layer's name to *ABC* by selecting `set name of layer' from the `File'
+menu. Changing the active layer also is available with *1..8*.
+
+
+File: pcb.info, Node: Mode Selectors, Next: Drawing Area, Prev: Control Panel, Up: Application Window
+
+The Mode Selectors
+------------------
+
+ The mode selector buttons reside below the control panel. They are
+used to select the operation mode of `Pcb'. A mode can be thought of as
+a tool that gets used when ** is pressed. Each mode causes the
+cursor to take on a unique shape that identifies the tool. The buttons
+themselves are icons that illustrate their function. The drawing modes
+can also be selected from the keyboard:
+ *Escape* reset mode
+ *F1* via-mode
+ *F2* line-mode
+ *F3* pastebuffer-mode
+ *F4* rectangle-mode
+ *F5* text-mode
+ *F6* polygon-mode
+ *Insert* insert-point-mode
+ *F7* thermal-mode
+ *F8* arc-mode
+ The *Space* cycles through all of the modes in the mode button
+palette.
+
+ Reset-mode is really no mode, and ** has no effect with this
+setting. Some of the modes are very simple, such as the via-mode.
+Clicking ** while in this mode creates a via at the cross-hair
+position. The pastebuffer-mode is similar. With this mode, **
+copies the contents of the active buffer to the layout, but only those
+parts that reside on visible layers are copied. The rotate-mode allows
+you to rotate elements and text objects 90 degrees counter-clockwise
+with each click. The line-mode is explained in detail in *Note Line
+Objects::. The arc-mode is explained in detainl in *Note Arc Objects::.
+Rectangle-mode, polygon-mode and thermal-mode are explained in detail in
+*Note Polygon Objects::. Remember that the thermal-mode will only
+create and destroy thermals to polygons on the active layer.
+
+ The insert-point-mode is an editing tool that allows you to add
+points into lines or polygons. With version 1.5 of `Pcb', the
+insert-point-mode enforces the 45 degree line rule. You can force only
+the shorter line segment to 45 degrees by holding the shift key down
+while inserting the point. The delete-mode deletes the smallest object
+beneath the cursor with each ** click. If you use click at an
+end-point that two lines have in common, it will replace the two lines
+with a single line spanning the two remaining points. This can be used
+to delete an "inserted" point in a line, restoring the previous line.
+
+
+File: pcb.info, Node: Drawing Area, Next: Menu, Prev: Mode Selectors, Up: Application Window
+
+Drawing Area
+------------
+
+ The drawing area is made from a viewport widget that also includes
+two scrollbars. The cursor changes shape depending on the current
+operation mode when the pointer is moved into the drawing area. A
+crosshair follows the X11 pointer with respect to the grid setting.
+Move around and watch the cursor position displayed in the upper right
+of the window. Now select a new grid from the *Display* menu. The new
+value is updated in the statusline. Now move again and watch the
+difference. A different way to change the grid is *Shiftg* to
+decrease or *g* to increase it. The grid setting is saved along
+with the data when you save a pcb layout. For homemade layouts a value
+around 50 is a good setting. The cursor also may be moved with the
+cursor keys or, for larger distances, by pressing the *shift* modifier
+together with a cursor key.
+
+
+File: pcb.info, Node: Menu, Prev: Drawing Area, Up: Application Window
+
+Menu
+----
+
+ The menus are located at the top of the drawing area. Most, but not
+all, of their functions are also available from the keyboard. Some of
+the entries such as *center* require a certain cursor position. In
+this case a statusline will popup at the bottom with wording similar to
+the following:
+ move pointer to the appropriate screen position and press a button
+ Any mouse button will do the job, whereas any key except the cursor
+keys will cancel the operation. For details see *Note Actions::.
+
+`About'
+ There is no menu hiding behind this button, but a small
+ information box will pop up.
+
+`File'
+ This menu offers a choice of loading, saving and printing data,
+ saving connection information to a file or quitting the
+ application. You also may change the layout's or the active
+ layer's name. Selecting *print layout* pops up a printer control
+ dialog which is, hopefully, self explaining. This box contains a
+ panner widget (only `X11R5' and later) which simplifies adjusting
+ the offsets. With earlier releases the printout will always appear
+ in the upper left corner with respect to the media margins.
+
+ A selection of several device drivers is available from the
+ printer control dialog. Presently *PostScript*, *encapsulated
+ PostScript*, and *GerberX* are supported. *GerberD* support may be
+ forthcoming. It requires a rastering engine that pcb presently
+ lacks.
+
+`Display'
+ The display menu supports the most needed functions related to
+ screen output. The entries are used to change the grid to some
+ popular values, the zoom factor, the displayed element name and
+ also are used to center or refresh the output. You also may
+ switch grid-displaying on or off and select between absolute grid
+ (origin at (0,0)) or relative grid (origin at the position where
+ the grid has been changed). The relative grid position is now
+ established at the actual pointer position, NOT necessarily the
+ same as the crosshair position. This allows you to shift the grid
+ without changing the grid spacing. I recommend that you zoom in
+ as close as possible before setting a relative grid so that you're
+ sure the grid lines fall where you want. The clipping to
+ 45-degree lines is selected in this menu, as well as enabling
+ rubberband mode (see description of *Mode*).
+
+`Sizes'
+ This menu allows you to select a group of line thickness, via
+ diameter and via drill size (collectively called a "routing
+ style") to be coppied to the "active" sizes. You can also change
+ the names given to these styles and adjust their values from this
+ menu. You can also edit the "active" sizes (the initial size of
+ new vias, drilling holes, lines, text-objects and the current
+ maximum size of the layout) from this menu.
+
+`Objects'
+ Displaying the pinout of an element and changing its names, the one
+ that is currently selected by the *Display* menu, as well as
+ editing a text object is offered by this menu. The latter two
+ selections require an additional pointer button click at the
+ object's position. A dialog for changing the layer groupings is
+ also reached from this menu.
+
+`Selection'
+ This menu covers most of the operations that work with selected
+ objects. You may either (un)select all visible objects of a
+ layout or only the ones which have been found by the last
+ connection scan. The mouse can also be used to change which things
+ are and are not selected: toggle the selection of a single object
+ by pressing ** and releasing without moving the mouse.
+ Pressing *Mod1*, moving and releasing the button selects
+ all visible objects inside the rectangle. Pressing the modifier
+ key *Shift* too, unselects all objects in the area. You can delete
+ all selected objects from this menu, and also move selected text
+ objects to the silk-screen layer. The other entries change the
+ sizes of visible and selected objects.
+
+`Buffer'
+ This menu handles pastebuffer related actions. You may select one
+ out of five (per viewing side) buffers to use, rotate or clear its
+ contents and paste it to the layout. You can also gather objects
+ in the buffer into an element definition from this menu. Note:
+ only visible objects are pasted to the layout.
+
+`Connections'
+ The entries available through the connections menu button allow
+ the user to find connections from pins or vias and to manipulate
+ these. The connection lists may be saved by selecting entries
+ from the *File* menu. In many cases it is desireable to use the
+ ratsnest function to check connections against a netlist file
+ instead of using the connections menu to generate text connection
+ lists.
+
+`Undo'
+ This menu is a frontend for managing the reversing of operations
+ such as remove, copy, move, name changes, etc. The number of
+ operations is unlimited (depending on memory). The list is cleared
+ if new layout data is loaded or by selecting the appropriate entry
+ from this menu. The inverse operation, redo, is also available.
+
+`Report'
+ This menu allows you to generate a dialog that summerizes
+ information about an object such as sizes and coordinates. You can
+ also get a report about all of the drills that are used on the
+ board.
+
+
+File: pcb.info, Node: Log Window, Next: Library Window, Prev: Application Window, Up: Getting Started
+
+Log Window
+==========
+
+ This optional window is used to display all kind of messages
+including the ones written to *stderr* by external commands. The main
+advantage is that its contents are saved in a scrolling list until the
+program exits. Disabling this feature by setting the resource
+*useLogWindow* to *false* will generate popup windows to display
+messages. The *stderr* of external commands will appear on `Pcb's
+*stderr* which normally is the parent shell. I suggest you iconify the
+window after startup for example by setting **log.iconic* to *true*. If
+*raiseLogWindow* is set *true*, the window will deiconify and raise
+itself whenever new messages are to be displayed.
+
+
+File: pcb.info, Node: Library Window, Next: Drawing and Removing, Prev: Log Window, Up: Getting Started
+
+Library Window
+==============
+
+ First appearing in 1.4.1 the library window is one of the best new
+features in my opinion. It simplifies loading circuits quiet a lot just
+by selecting the appropriate type from the menu at the top. A circuit
+is then selected by simply double-clicking on the text line. For
+details on libraries check-out *Note Library File:: and *Note Library
+Contents File::.
+
+
+File: pcb.info, Node: Drawing and Removing, Next: Moving and Copying, Prev: Library Window, Up: Getting Started
+
+Drawing and Removing Basic Objects
+==================================
+
+ There are several ways of creating new objects: you may draw them
+yourself, you may copy an existing object or you may load an element
+from a file or library. Creating new objects is normally related to a
+special mode depending on the object type. The notation of key and
+button events is the same as described in the X11 Intrinsics manual.
+
+ The operation mode may be selected by one of the mode selectors in
+the bottom left corner, by one of the function keys listed earlier in
+this chapter, or by pressing the space bar to cycle through the modes.
+** sends a notify request to the application which responds
+by creating or changing the appropriate object or at least takes the
+first step to do so. Switching to a mode causes the cursor to take on a
+unique shape and also causes the cooresponding mode selector button to
+be drawn with thick lines. You can use either cue to see which mode is
+currently selected.
+
+ Removing objects is possible using *BackSpace* (or *Delete*
+on some machines) which deletes the object at the cursor location. If
+more than one object is located at the same position, the smallest
+matching type will be chosen. If two or more of the same type are the
+smallest at the position, then the newest one will be deleted. You
+also may change to *remove-mode* and click ** at the location
+of the objects which are to be removed. If you "remove" the end-point
+where two lines connect, it will remove the point of connection leaving
+a single line that spans the far end points.
+
+ Rotating works in a similar fashion. Change the mode and press
+** at the object's location. Remember only text, elements and
+arcs can be rotated. (Anything including groups of objects may be
+rotated inside a buffer using the rotate buffer menu option.)
+
+ Insert mode provides the capability of inserting new points into
+existing polygons or lines. The 45 degree line clipping is now enforced
+when selected. Press and hold the shift key while positioning the new
+point to only clip the line segment to the nearer of the two existing
+points to 45 degrees. You can also toggle the 45-degree clipping in
+the middle of a point insertion by pressing the *.* If the shift
+key is not depressed and the 45 degree line clipping mode is on, both
+new line segments must be on 45 degree angles - greatly restricting
+where the new point may be placed. In some cases this can cause
+confusion as to whether an insertion has been started since the two new
+lines may be forced to lie parallel on top of the original line until
+the pointer is moved far from the end points.
+
+ Removing objects, changing their size or moving them only applies to
+objects that are visible when the command is executed.
+
+* Menu:
+
+* Common:: Keystrokes common to some objects.
+* Lines::
+* Arcs::
+* Polygons:: Drawing polygons and rectangles.
+* Text::
+* Vias::
+* Elements::
+* Pastebuffer:: A multi-purpose buffer.
+
+
+File: pcb.info, Node: Common, Next: Lines, Up: Drawing and Removing
+
+ There are several keystrokes and button events refering to an
+*object* without identifying its type. Here's a list of them:
+
+ ** creates (or deletes) an object depending on the
+current mode.
+
+ *BackSpace* or *Delete* removes the visible object at the
+cursor location. When more than one object exists at the location, the
+order of removal is: via, line, text, polygon and element. The drawn
+layer order also affects the search - whatever is top - most (except
+elements) is affected before lower items. Basically all this means
+that what is removed is probably just what you expect. If for some
+reason it isn't, undo and try again. Only one object is removed for
+each keystroke. If two or more of the same type match, the newest one
+is removed.
+
+ Use *s* and *Shifts* to change the size (width) of lines,
+arcs, text objects, pins, pads and vias, or to toggle the style of
+polygons (whether pins and vias automatically have clearances).
+
+ *n* changes the name of pins, pads, vias, the string of a text
+object, or the currently displayed label of an element.
+
+ *m* moves the line, arc, or polygon under the crosshair to the
+active layer if it wasn't on that layer already.
+
+ *u* (undo) recovers from an unlimited number of operations such
+as creating, removing, moving, copying, selecting etc. It works like
+you'd expect even if you're in the midst of creating something.
+
+ *Shiftr* restores the last undone operation provided no other
+changes have been made since the undo was performed.
+
+ *tab* changes the board side you are viewing.
+
+ For a complete list of keystrokes and button events see *Note
+Translations::.
+
+
+File: pcb.info, Node: Lines, Next: Arcs, Prev: Common, Up: Drawing and Removing
+
+Lines
+-----
+
+ To draw new lines you have to be in *line-mode*. Get there either by
+selecting it from the *Tool palette* or by pressing *F2*. Each
+successive *notify* event creates a new line. The adjustment to 45
+degree lines is done automatically if it is selected from the *Display*
+menu. You can toggle the 45 degree mode setting by pressing the
+*.* (That is the period key). When 45 degree enforcement is turned
+on there are three distinct modes of line creation: a single line on
+the closest 45 degree vector towards the crosshair (but not necessarily
+actually ending at the crosshair), two lines created such that the
+first leaves the start point on a 90 degree vector and the second
+arrives at the crosshair on a 45 degree vector, and finally two lines
+created such that the first leaves the start point on a 45 degree
+vector and the second arrives at the crosshair on a 90 degree vector.
+These last two modes always connect all the way from the start and end
+points, and all lines have angles in 45 degree multiples. The */*
+cycles through the three modes. The status line shows a text icon to
+indicate which of the modes is active and the lines following the
+crosshair motion show the outline of the line(s) that will actually be
+created. Press *Escape* to leave line-mode.
+
+ *l*, *Shiftl* and the entries in the *Sizes* menu change
+the initial width of new lines. This width is also displayed in the
+status line.
+
+
+File: pcb.info, Node: Arcs, Next: Polygons, Prev: Lines, Up: Drawing and Removing
+
+Arcs
+----
+
+ An Arc is drawn with the *arc-tool*. Get there either by selecting
+it from the *Tool palette* or by pressing *F8*. Press *Btn1* to
+define the starting point for the arc. Drag the mouse towards the
+desired end point along the path you want the arc to follow. The
+outline of the arc that will be created is shown on the screen as you
+move the mouse. Arcs are always forced to be 90 degrees and have
+symmetrical length and width ( i.e. they are a quarter circle). The
+next *Btn1* click creates the arc. It will have the same width as new
+lines (displayed in the status line) and appear on the active layer.
+The arc leaves the starting point towards the crosshair along the axis
+whose distance from the crosshair is largest. Normally this means that
+if you drag along the path you want the arc to follow, you'll get what
+you want. If the grid is set to the arc radius, then the two distances
+will be equal and you won't be able to get all of the possible
+directions. If this is thwarting your desires, reduce the grid spacing
+(*!ShiftG*) and try again.
+
+
+File: pcb.info, Node: Polygons, Next: Text, Prev: Arcs, Up: Drawing and Removing
+
+Polygons and Rectangles
+-----------------------
+
+ A polygon is drawn by defining all of its segments as a series of
+consecutive line segments. If the first point matches a new one and if
+the number of points is greater than two, then the polygon is closed.
+Since matching up with the first point may be difficult, you may use
+*Shiftp* to close the polygon. The *Shiftp* won't work if
+clipping to 45 degree lines is selected and the final segment cannot
+match this condition. I suggest you create simple convex polygons in
+order to avoid a strong negative impact on the performance of the
+connection scanning routines. The *rectangle-mode* is just an easy way
+to generate rectangular polygons. *Polygon-mode* also is selected by
+*F6* whereas *rectangle-mode* uses *F4*. Pressing a
+** at two locations creates a rectangle by defining two of
+its corners. *Insert* brings you to *insert-point-mode* which
+lets you add additional points to an already existing polygon. Single
+points may be removed by moving the crosshair to them and selecting one
+of the delete actions *(remove-mode, BackSpace, or Delete*. This only
+works if the remaining polygon will still have three or more corners.
+Pressing *u* or *p* while entering a new polygon brings you
+back to the previous corner. Removing a point does not force clipping
+to 45 degree angles (because it's not generally possible). Newly
+created polygons will not connect to pins or vias that pierce it unless
+you create a thermal (using the thermal mode) to make the connection.
+If the edge of a polygon gets too close to a pin or via that lies
+outside of it, a warning will be issued and the pin will be given a
+special color. Increasing the distance between them will remove the
+warning color.
+
+
+File: pcb.info, Node: Text, Next: Vias, Prev: Polygons, Up: Drawing and Removing
+
+Text
+----
+
+ Pressing *F5* or clicking one of the text selector buttons
+changes to *text-mode*. Each successive notify event (**)
+pops up the input line at the bottom and queries for a string. Enter
+it and press *Return* to confirm or *Escape* to abort. The
+text object is created with its upper left corner at the current pointer
+location. The initial scaling is changed by *t* and *Shiftt*
+or from the *Sizes* menu.
+
+ Now switch to *rotate-mode* and press ** at the
+text-objects location. Text objects on the solder side of the layout
+are automatically mirrored and flipped so that they are seen correctly
+when viewing the solder-side.
+
+ Use *n* to edit the string.
+
+ TEXT OBJECTS ON COPPER LAYERS CREATE COPPER LINES BUT THEY ARE NOT
+SCANNED FOR CONNECTIONS. If they are moved to the silkscreen layer, they
+no longer create copper.
+
+
+File: pcb.info, Node: Vias, Next: Elements, Prev: Text, Up: Drawing and Removing
+
+Vias
+----
+
+ The initial size of new vias may be changed by *v* and
+*Shiftv* or by selecting the appropriate entry from the *Sizes*
+menu. *Mod1v* and *Mod1 Shiftv* do the same for the drilling
+hole of the via. The statusline is updated with the new values.
+Creating a via is similar to the other objects. Switch to *via-mode* by
+using either the selector button or *F1* then press *]* or
+** to create one. *n* changes the name of a via. If you
+want to create a mounting hole for your board, then you can place a via
+where you want the hole to be then convert the via into a hole. The
+conversion is done by pressing *!Ctrlh* with the crosshair over
+the via. Conceptually it is still a via, but it has no copper annulus.
+If you create such a hole in the middle of two polygons on different
+layers, it will short the layers. Theoretically you could arrange for
+such a hole not to be plated, but a metal screw inserted in the hole
+would still risk shorting the layers. A good rule is to realize that
+holes in the board really are vias between the layers and so place them
+where they won't interfere with connectivity. You can convert a hole
+back into a normal via with the same keystroke used to convery it in
+the first place.
+
+
+File: pcb.info, Node: Elements, Next: Pastebuffer, Prev: Vias, Up: Drawing and Removing
+
+Elements
+--------
+
+ Some of the functions related to elements only work if both the
+package layer and the pin layer are switched on.
+
+ Now that you're familiar with many of the basic commands, it is time
+to put the first element on the layout. First of all, you have to load
+data into the paste buffer. There are four ways to do this:
+ 1) load the data from a library
+ 2) load the data from a file
+ 3) copy data from an already existing element
+ 4) convert objects in the buffer into an element
+ We don't have any elements on the screen yet nor anything in the
+buffer, so we use number one.
+
+ Select *lsi* from the menu in the library window press **
+twice at the appropriate text-line to get the MC68030 CPU. The data is
+loaded and the mode is switched to *pastebuffer-mode*. Each notify
+event now creates one of these beasts. Leave the mode by selecting a
+different one or by *Escape* which resets all modes.. The
+crosshair is located at the *mark* position as defined by the data
+file. Rotating the buffer contents is done by selecting the *rotate*
+entry of the *Buffer* menu or by pressing *ShiftF3*. The contents
+of the buffer are valid until new data is loaded into it either by a
+cut-to-buffer operation, copy-to-buffer operation or by loading a new
+data file. There are 5 buffers available. Switching between them is
+done by selecting a menu entry or by *Shift1..5*. Each of the two
+board sides has its own buffers.
+
+ The release includes all data files for the circuits that are used
+by the demo layout. The elements in the LED example are not found in
+the library, but you can lift them from the example itself if you want.
+If you have problems with the color of the crosshair, change the
+resource *crosshairColor* setting to a different one.
+
+ Now load a second circuit, the MC68882 FPU for example. Create the
+circuit as explained above. You now have two different unnamed
+elements. Unnamed means that the layout-name of the element hasn't been
+set yet. Selecting *description* from the *Display* menu displays the
+description string of the two circuits which are CPU and FPU. The
+values of the circuits are set to MC68030 and MC68882. Each of the
+names of an element may be changed by *n* at the elements location
+and editing the old name in the bottom input line. Naming pins and vias
+is similar to elements. You can hide the element name so that it won't
+appear on the board silkscreen by pressing *h* with the cursor
+over the element. Doing so again un-hides the element name.
+
+ Entering `:le' and selecting an element data file is the second way
+to load circuits.
+
+ The third way to create a new element is to copy an existing one.
+Please refer to *Note Moving and Copying::.
+
+ The fourth way to create a new element is to convert a buffer's
+contents into an element. Here's how it's done: Select the Via-tool
+from the *Tool pallette*. Set the grid spacing to something
+appropriate for the element pin spacing. Now create a series of vias
+where the pins go. Create them in pin number order. It is often handy
+to place a reference point (*!Ctrlm*) in the center of the first
+pin in order to measure the location of the other pins. Next make a
+solder-side layer the active layer from the *active-layer* popup menu.
+Now draw the outline of the element using lines and arcs. When you're
+done, select everything that makes up the element with a box selection
+(* drag, *). Now select "cut selection to buffer"
+from the *Buffer* menu. Position the cursor over the center of pin 1
+and press the left button to load the data into the buffer. Finally
+select "convert buffer to element" from the *Buffer* menu. You'll only
+want to create elements this way if they aren't already in the library.
+It's also probably a good idea to do this before starting any of the
+other aspects of a layout, but it isn't necessary.
+
+ To display the pinout of a circuit move to it and press *Shiftd*
+or select *show pinout* from the *Objects* menu. A new window pops up
+and displays the complete pinout of the element. This display can be
+difficult to read if the component has been rotated 90 degrees :-(
+therefore, the new window will show an un-rotated view so the pin names
+are readable. *d* displays the name of one or all pins/pads
+inside the drawing area, this is only for display on-screen, it has no
+effect on any printing of the layout.
+
+ You also may want to change a pin's or pad's current size by pressing
+*s* to increase or *Shifts* to decrease it. While this is
+possible, it is not recommended since care was probably taken to define
+the element structure in the first place. You can also change the
+thickness of the element's silkscreen outline with the same keys. You
+can change whether a pin or SMD pad is rounded or square with the
+*q*. SMD pads should usually have squared ends. Finally, you can
+change whether the non-square pins are round or octagonal with the
+*!Ctrlo*.
+
+ SMD elements and silkscreen objects are drawn in the "invisible
+object" color if they are located on the opposite side of the board.
+
+ For information on element connections refer to *Note Connection
+Lists::.
+
+
+File: pcb.info, Node: Pastebuffer, Prev: Elements, Up: Drawing and Removing
+
+Pastebuffer
+-----------
+
+ The linestack and element-buffer of former releases have been
+replaced by 5 multi-purpose buffers that are selected by
+*Shift1..5*. The status line shows which buffer is the active one.
+You may load data from a file or layout into them. Cut-and-paste works
+too. If you followed the instructions earlier in this chapter you
+should now have several objects on the screen. Move the crosshair to
+one of them and press ** to toggle its selection flag. (If
+you drag the mouse while the button is down, a box selection will be
+attempted instead of toggling the selection.) The object is redrawn in
+a different color. You also may want to try moving the pointer while
+holding the third button down and release it on a different location.
+This selects all objects inside the rectangle and unselects everything
+else. If you want to add a box selection to an existing selection,
+drag with *Mod1* instead. Dragging *Shift Mod1*
+unselects objects in a box. Now change to *pastebuffer-mode* and
+select some operations from the *Buffer* menu. Copying objects to the
+buffer is available as *Mod1c* while cutting them uses
+*Mod1x* as shortcut. Both clear the buffer before new data is
+added. If you use the menu entries, you have to supply a crosshair
+position by pressing a mouse button. The objects are attached to the
+pastebuffer relative to that crosshair location. Element data or PCB
+data may be merged into an existing layout by loading the datafiles
+into the pastebuffer. Both operations are available from the *File*
+menu or as user commands.
+
+
+File: pcb.info, Node: Moving and Copying, Next: Loading and Saving, Prev: Drawing and Removing, Up: Getting Started
+
+Moving and Copying
+==================
+
+ All objects can be moved including element-names, by **,
+draging the pointer while holding the button down and releasing it at
+the new location of the object. If you use *Mod1* instead,
+the object is copied. Copying does not work for element-names of
+course. You can move all selected objects with *Shift *.
+This uses the Pastebuffer, so it will remove whatever was previously in
+the Pastebuffer. Please refer to *Note Pastebuffer::. If you want to
+give a small nudge to an object, but you don't think that the mouse
+will give you the fine level of control that you want, you can position
+the cursor over the object, press *[*, move it with the arrow
+keys, then press *]* when it's at the desired position. Remember
+that all movements are forced onto grid coordinates, so you may want to
+change the grid spacing first.
+
+
+File: pcb.info, Node: Loading and Saving, Next: Printing, Prev: Moving and Copying, Up: Getting Started
+
+Loading and Saving
+==================
+
+ After your first experience with `Pcb' you will probably want to save
+your work. `:s name' passes the data to an external program which is
+responsible for saving it. For details see *saveCommand* in *Note
+Resources::. Saving also is available from the *File* menu, either
+with or without supplying a filename. `Pcb' reuses the last filename if
+you do not pass a new one to the save routine.
+
+ To load an existing layout either select *load layout data* from the
+*File* menu or use `:l filename'. A file select box pops up if you
+don't specify a filename. Merging existing layouts into the new one is
+supported either by the *File* menu or by `:m filename'.
+
+ `Pcb' saves a backup of the current layout depending on the resource
+*backup*. The file is named `/tmp/PCB.%i.backup'. During critical
+sections of the program or when data would be lost it is saved as
+`/tmp/PCB.%i.save'. *%i* is replaced by the process ID.
+
+
+File: pcb.info, Node: Printing, Next: Connection Lists, Prev: Loading and Saving, Up: Getting Started
+
+Printing
+========
+
+ `Pcb' now has support for device drivers, `PostScript',
+*encapsulated PostScript*, and *Gerber X* drivers are available so far.
+The *Gerber X* driver generates a NC drill file for automated drilling.
+I recommend the use of `GhostScript' if you don't have a `PostScript'
+printer for handling the PostScript output. Printing always generates a
+complete set of files for a specified driver. See the page about the
+*Print()* action for addtional information about the filenames. The
+control panel offers a number of options. Most of them are not avilable
+for Gerber output because it wouldn't make sense, for example, to
+scale the gerber output (you'd get an incorrectly made board!) The
+options are:
+
+`device'
+ The top menu button selects from the available device drivers.
+
+`rotate'
+ Rotate layout 90 degrees counter-clockwise before printing
+ (default).
+
+`mirror'
+ Mirror layout before printing. Use this option depending on your
+ production line.
+
+`color'
+ Created colored output. All colors will be converted to black if
+ this option is inactive.
+
+`outline'
+ Add a board outline to the output file. The size is determined by
+ the maximum boardsize changeable from the *sizes* menu. The
+ outline appears on the top and bottom sides of the board, but not
+ on the internal layers. An outline can be useful for determining
+ where to shear the board from the panel, but be aware that it
+ creates a copper line. Thus it has the potential to cause short
+ circuits if you don't leave enough room from your wiring to the
+ board edge. Use a viewer to see what the output outline looks like
+ if you want to know what it looks like.
+
+`alignment'
+ Additional alignement targets are added to the output. The
+ distances between the board outline is set by the resource
+ *alignmentDistance*. Alignment targets should only be used if you
+ know for certain that YOU WILL BE USING THEM YOURSELF. It is
+ extremely unlikely that you will want to have alignment targets if
+ you send gerber files to a commercial pcb manufacture to be made.
+
+`scaling'
+ It's quite useful to enlarge your printout for checking the layout.
+ Use the scrollbar to adjust the scaling factor to your needs.
+
+`media'
+ Select the size of the output media from this menu. The user
+ defined size may be set by the resource *media* either from one of
+ the well known paper sizes or by a `X11' geometry specification.
+ This entry is only available if you use `X11R5' or later. For
+ earlier releases the user defined size or, if not available, *A4*
+ is used. Well known size are:
+ A3
+ A4
+ A5
+ letter
+ tabloid
+ ledger
+ legal
+ executive
+
+`offset'
+ Adjust the offsets of the printout by using the panner at the
+ right side of the dialog box. This entry is only available if you
+ use `X11R5' or later. A zero offset is used for earlier releases.
+
+`8.3 filenames'
+ Select this button to generate DOS compatible filenames for the
+ output files. The *command* input area will disappear if selected.
+
+`commandline'
+ Use this line to enter a command (starts with `|') or a filename.
+ A %f is replaced by the current filename. The default is set by
+ the resource *printCommand*.
+
+ The created file includes some labels which are guaranteed to stay
+unchanged
+`PCBMIN'
+ identifies the lowest x and y coordinates in mil.
+
+`PCBMAX'
+ identifies the highest x and y coordinates in mil.
+
+`PCBOFFSET'
+ is set to the x and y offset in mil.
+
+`PCBSCALE'
+ is a floating point value which identifies the scaling factor.
+
+`PCBSTARTDATA'
+`PCBENDDATA'
+ all layout data is included between these two marks. You may use
+ them with an `awk' script to produce several printouts on one
+ piece of paper by duplicating the code and putting some
+ `translate' commands in front. Note, the normal `PostScript'
+ units are 1/72 inch.
+
+
+File: pcb.info, Node: Connection Lists, Next: Selection, Prev: Printing, Up: Getting Started
+
+Connection Lists
+================
+
+ After completing parts of your layout you may want to check if all
+drawn connections match the ones you have in mind. This is probably
+best done in conjunction with a net-list file: see *Note Rats Nest::.
+The following examples give more rudimentary ways to examine the
+connections.
+ 1) create at least two elements and name them
+ 2) create some connections between their pins
+ 3) optionally add some vias and connections to them
+
+ Now select *lookup connection* from the *Connections* menu, move the
+cursor to a pin or via and press any mouse button. `Pcb' will look for
+all other pins and/or vias connected to the one you have selected and
+display the objects in a different color. Now try some of the reset
+options available from the same menu.
+
+ There also is a way to scan all connections of one element. Select
+*a single element* from the menu and press any button at the element's
+location. All connections of this element will be saved to the
+specified file. Either the layout name of the element or its canonical
+name is used to identify pins depending on the one which is displayed
+on the screen (may be changed by *Display* menu).
+
+ An automatic scan of all elements is initiated by choosing *all
+elements*. It behaves in a similar fashion to scanning a single element
+except the resource *resetAfterElement* is used to determine if
+connections should be reset before a new element is scanned. Doing so
+will produce very long lists because the power lines are rescanned for
+every element. By default the resource is set to *false* for this
+reason.
+
+ To scan for unconnected pins select *unused pins* from the same menu.
+
+
+File: pcb.info, Node: Selection, Next: Rats Nest, Prev: Connection Lists, Up: Getting Started
+
+Selection
+=========
+
+ Some commands mentioned earlier in this chapter also are able to
+operate on all selected and visible objects. Now go back to the layout
+and toggle the selection flag of a single one by **. Try
+**, move the pointer while holding the button down and
+release it on a different location. This selects all objects inside
+the rectangle and unselects everything else. Dragging with
+*Mod1* adds everything in the box to the existing selection.
+Dragging *Shift * unselects objects in the box.
+
+ The entries of the *Selection* menu are hopefully self-explanatory.
+Many of the *Action Commands* can take various key words that make them
+function on all or some of the selected items.
+
+
+File: pcb.info, Node: Rats Nest, Next: Design Rule Checking, Prev: Selection, Up: Getting Started
+
+Rats Nest
+=========
+
+ If you have a netlist that corresponds to the layout you are working
+on, you can use the rats-nest feature to add rat-lines to the layout.
+First you will need to load a netlist file (see *:rn*, *Note User
+Commands::). *w* adds rat-lines on the active layer using the
+current line thickness shown in the status line (usually you'll want
+them to be thin lines). Only those rat-lines that fill in missing
+connectivity (since you have probably routed some connections already)
+are added. If the layout is already completely wired, nothing will be
+added, and you will get a message that the wiring is complete.
+
+ Rat-lines are lines having the special property that they only
+connect to pins and pads at their end points. Rat-lines are drawn on
+the screen with a stippled pattern to make them easier to identify
+since they have special behavior and cannot remain in a completed
+layout. Rat-lines are added in the minimum length straight-line tree
+pattern (always ending on pins or pads) that satisfies the missing
+connectivity in the circuit. Used in connection with moves and rotates
+of the elements, they are extremely useful for deciding where to place
+elements on the board. The rat-lines will always automatically
+rubberband to the elements whether or not the rubberband mode is on.
+The only way for you to move them is by moving the parts they connect
+to. This is because it is never desireable to have the rat-lines
+disconnected from their element pins. Rat-lines will normally
+criss-cross all over which gives rise to the name "rats nest"
+describing a layout connected with them. If a SMD pad is unreachable
+on the active layer, a warning will be issued about it and the rat-line
+to that pad will not be generated.
+
+ A common way to use rats nests is to place some elements on the
+board, add the rat-lines, and then use a series of moves/rotates of the
+elements until the rats nest appears to have minimum tangling. You may
+want to iterate this step several times. Don't worry if the layout
+looks messy - as long as you can get a sense for whether the
+criss-crossing is better or worse as you move things, you're fine.
+After moving some elements arround, you may want to optimize the rats
+nest *o* so that the lines are drawn between the closest points
+(this can change once you've moved components). Adding rat-lines only
+to selected pads/pins (*Shiftw*) is often useful to layout a
+circuit a little bit at a time. Sometimes you'll want to delete all
+the rat-lines (*e*) or selected rat-lines (*Shifte*) in order
+to reduce confusion. With a little practice you'll be able to achieve
+a near optimal component placement with the use of a rats nest.
+
+ Rat-lines are not only used for assisting your element placement,
+they can also help you to route traces on the board. Use the *m*
+to convert a rat-line under the cursor into a normal line on the active
+layer. Inserting a point into a rat-line will also cause the two new
+lines to be normal lines on the board. Another way that you can use
+rat-lines is to use the *f* with the cursor over a pad or pin.
+All of the pins and pads and rat-lines belonging to that net will be
+highlighted. This is a helpful way to distinguish one net from the rest
+of the rats nest. You can then route those tracks, turn off the
+highlighting (*Shiftf*) and repeat the process. This will work even
+if the layer that the rat-lines reside on is made invisible - so only
+the pins and pads are highlighted. Be sure to erase the rat-lines
+(*e* erases them all) once you've duplicated their connectivity by
+adding your own lines. When in doubt, the *o* will delete only
+those rat-lines that are no longer needed.
+
+ If connections exist on the board that are not listed in the netlist
+when *w* is pressed, warning messages are issued and the affected
+pins and pads are drawn in a special *warnColor* until the next
+*Notify()* event. If the entire layout agrees completely with the
+netlist, a message informs you that the layout is complete and no
+rat-lines will be added (since none are needed). If the layout is
+complete, but still has rat-lines then you will be warned that
+rat-lines remain. If you get no message at all it's probably because
+some elements listed in the net list can't be found and where reported
+in an earlier message. There shouldn't be any rat-lines left in a
+completed layout, only normal lines.
+
+ The *Shiftw* is used to add rat-lines to only those missing
+connections among the selected pins and pads. This can be used to add
+rat-lines in an incremental manner, or to force a rat-line to route
+between two points that are not the closest points within the net.
+Often it is best to add the rats nest in an incremental fashion, laying
+out a sub-section of the board before going further. This is easy to
+accomplish since new rat-lines are never added where routed
+connectivity already makes the necessary connections.
+
+
+File: pcb.info, Node: Design Rule Checking, Prev: Rats Nest, Up: Getting Started
+
+Design Rule Checking
+====================
+
+ After you've finished laying out a board, you may want to check to
+be certain that none of your interconnections are too closely spaced or
+too tenuously touching to be reliably fabricated. The design rule
+checking (DRC) function does this for you. Use the command ":DRC()"
+(without the quotes of course) to invoke the checker. If there are no
+problem areas, you'll get a message to that effect. If any problem is
+encountered, you will get a message about it and the affected traces
+will be highlighted. One part of the tracks of concern will be
+selected, while the other parts of concern will have the
+"FindConnection" highlighting. The screen will automatically be
+centered in the middle of the object having the "FindConnection"
+(Green) highlighting. The middle of the object is also the coordinates
+reported to be "near" the problem. The actual trouble region will be
+somewhere on the boundary of this object. If the two parts are from
+different nets then there is some place where they approach each other
+closer than the minimum rule. If the parts are from the same net, then
+there is place where they are only barely connected. Find that place
+and connect them better.
+
+ After a DRC error is found and corrected you must run the DRC again
+because the search for errors is halted as soon as the first problem is
+found. Unless you've been extremely careless there should be no more
+than a few design rule errors in your layout. The DRC checker does not
+check for minimum spacing rules to copper text, so always be very
+careful when adding copper text to a layout. The rules for the DRC are
+specified in the application resource file. The minimum spacing value
+(in mils) is given by the *Settings.Bloat* value. The default is 7
+mils. The minimum touching overlap (in mils) is given by the
+*Settings.Shrink* value. This value defaults to 5 mils. Check with your
+fabrication process people to determine the values that are right for
+you.
+
+ If you want to turn off the highlighting produced by the DRC,
+perform an undo (assuming no other changes have been made). To restore
+the highlighting, use redo. The redo will restore the highlighting
+quickly without re-running the DRC checker.
+
+
+File: pcb.info, Node: User Commands, Next: Command-Line Options, Prev: Getting Started, Up: Top
+
+User Commands
+*************
+
+ The entering of user-commands is initiated by the action routine
+*Command()* (the `(":")' character) and finished by either *Return*
+or *Escape* to confirm or to abort. These two keybindings cannot
+be changed from the resource file. The triggering event, normally a
+key press, is ignored. The input area will replace the bottom
+statusline. It pops up when *Command()* is called. The arguments of the
+user-commands are passed to the external commands without modification.
+See also, the resource *saveInTMP*.
+
+ There are simple *usage* dialogs for each command and one for the
+complete set of commands.
+
+`l [filename]'
+ Loads a new datafile (layout) and, if confirmed, overwrites any
+ existing unsaved data. The filename and the searchpath
+ (*filePath*) are passed to the command defined by *fileCommand*.
+ If no filename is specified a file select box will popup.
+
+`le [filename]'
+ Loads an element description into the paste buffer. The filename
+ and the searchpath (*elementPath*) are passed to the command
+ defined by *elementCommand*. If no filename is specified a file
+ select box will popup.
+
+`m [filename]'
+ Loads an layout file into the paste buffer. The filename and the
+ searchpath (*filePath*) are passed to the command defined by
+ *fileCommand*. If no filename is specified a file select box will
+ popup.
+
+`q[!]'
+ Quits the program without saving any data (after confirmation).
+ q! doesn't ask for confirmation, it just quits.
+
+`s [filename]'
+ Data and the filename are passed to the command defined by the
+ resource *saveCommand*. It must read the layout data from *stdin*.
+ If no filename is entered, either the last one is used again or,
+ if it is not available, a file select box will pop up.
+
+`rn [filename]'
+ Reads in a netlist file. If no filename is given a file select
+ box will pop up. The file is read via the command defined by the
+ *RatCommand* resource. The command must send its output to
+ *stdout*. The netlist received by pcb must have this simple text
+ form:
+
+ netname NAME-PINNUM NAME2-PINNUM2 NAME3-PINNUM3 ... [\]
+
+ where "netname" is the name of the net (currently its value is
+ ignored but it must be present nonetheless), NAME is the
+ layout-name given to an element, and PINNUM is the (usually
+ numeric) pin number of the element that is part of the net (see
+ *Note Element Objects:: for details on pin numbering). Spaces or
+ tabs separate the fields. If the line ends with a "\" the net
+ continues on the next line and the "\" is treated exactly as if it
+ were a space. If the NAME ends with a lower-case letter, all
+ lower-case letters are stripped from end of the NAME to determine
+ the matching name-on-board name. For example:
+
+ Data U1-3 U2abc-4 FLOP1a-7 Uabc3-A9
+
+ would specifiy that pin 3 of U1 be connected to pin 4 of U2, to
+ pin 7 of FLOP1 and to pin A9 of Uabc3. Note that if pin numbers
+ contain alphabetic characters, they must match the case contained
+ in the "number" string defining the pin number on the
+ cooresponding element. It is up to you to name the elements so
+ that their layout-names agrees with the netlist. Netlists are
+ used for generating rats nest (see *Note Rats Nest::) and for
+ verifying the board layout (which is also accomplished by the
+ *Ratsnest* command.
+
+`w[q] [filename]'
+ These commands have been added for the convenience of `vi' users
+ and have the same functionality as *s* combined with *q*.
+
+`actionCommand'
+ Causes the actionCommand to be executed. This allows you to
+ initiate actions for which no bindings exist in the resource file.
+ It can be used to initiate any action with whatever arguments you
+ enter. This makes it possible to do things that otherwise would
+ be extremely tedious. For example, to change the drilling hole
+ diameter of all vias in the layout to 32 mils, you could select
+ everything using the selection menu, then type
+ "*:ChangeDrillSize(SelectedVias, 32)*". (This will only work
+ provided the via's diameter is sufficiently large to accomodate a
+ 32 mil hole). Another example might be to set the grid to 1 mil
+ by typing "*:SetValue(Grid, 1)*". Note that some actions use the
+ current cursor location, so be sure to place the cursor where you
+ want before entering the command. This is one of my favorite new
+ features in 1.5 and can be a powerful tool. Study the *Note
+ Actions:: section to see what actions are available.
+
+
+File: pcb.info, Node: Command-Line Options, Next: X11 Interface, Prev: User Commands, Up: Top
+
+Command-Line Options
+********************
+
+ There are several resources which may be set or reset in addition to
+the standard toolkit command-line options. For a complete list refer to
+*Note Resources::.
+
+ The synopsis is:
+
+ `pcb [-option ...] [-toolkit_option ...] [layout-file]'
+
+ or
+
+ `pcb -specialoption'
+
+* Menu:
+
+* Options:: `Pcb' command-line options.
+* Special Options:: Version and copyright information.
+
+
+File: pcb.info, Node: Options, Next: Special Options, Up: Command-Line Options
+
+Options
+=======
+
+`-alldirections/+alldirections'
+ Disables or enables line clipping to 45 degree angles. Overwrites
+ the resource *allDirectionLines*.
+
+`-backup value'
+ Time between two backups in seconds. Passing zero disables the
+ backup feature. Overwrites the resource *backupInterval*.
+
+`-c value'
+ Number of characters per output line. The resource
+ *charactersPerLine* is overwritten.
+
+`-fontfile filename'
+ The default set of symbols (font) for a new layout is read from
+ this file. All directories as defined by the resource *fontPath*
+ are scanned for the file. The scan is only performed if the
+ filename doesn't contain a directory component. The *fontFile*
+ resource is changed.
+
+`-lelement command-line'
+ Sets the command to be executed when an element is loaded from a
+ file to the paste buffer. The command may contain %f and %p to
+ pass the requested filename and the searchpath to the command. It
+ must write the data to its standard output. The related resource
+ is *elementCommand*.
+
+`-lfile command-line'
+ Sets the command to be executed when a new layout is loaded from a
+ file. The command may contain %f and %p to pass the requested
+ filename and the searchpath to the command. It must write the data
+ to its standard output. The related resource is *fileCommand*.
+
+`-lfont command-line'
+ Sets the command to be executed when a font is loaded from a file.
+ The command may contain %f and %p to pass the requested filename
+ and the searchpath to the command. It must write the data to its
+ standard output. The related resource is *fontCommand*.
+
+`-lg layergroups'
+ This option overwrites the resource *layerGroups*. See its
+ description for more information. The value is used for new
+ layouts only.
+
+`-libname filename'
+ The default filename for the library. Overwrites the resource
+ *libraryFilename*.
+
+`-libpath path'
+ The default search path for the the library. Overwrites the
+ resource *libraryPath*.
+
+`-llib command-line'
+ Sets the command to be executed when an element is loaded from the
+ library. The command may contain %f and %p to pass the requested
+ filename and the searchpath to the command. %a is replaces by the
+ three arguments *template*, *value* and *package*. The command
+ must write the data to its standard output. The related resource
+ is *libraryCommand*.
+
+`-llibcont command-line'
+ The command lists the contents of the library. The command may
+ contain %f and %p to pass the library filename and the searchpath
+ to the command. Also refer to *Note Library File:: and *Note
+ Library Contents File::. The related resource is
+ *libraryContentsCommand*.
+
+`-loggeometry geometry'
+ Determines the geometry of the log window.
+
+`-pnl value'
+ Restricts the displayed length of the name of a pin in the pinout
+ window to the passed value. See also, the resource
+ *pinoutNameLength*.
+
+`-pz value'
+ Sets the zoom factor for the pinout window according to the
+ formula: scale = 1:(2 power value). The related resource is
+ *pinoutZoom*.
+
+`-reset/+reset'
+ If enabled, all connections are reset after each element is
+ scanned. This feature is only used while scanning connections to
+ all elements. See also, *resetAfterElement*.
+
+`-ring/+ring'
+ Overrides the resource *ringBellWhenFinished*. If enabled, the bell
+ sounds when connection searching has finished.
+
+`-rs string'
+ Overrides the resource *routeStyle*. The string defines a colon
+ separated list of route styles. The route styles consist of a
+ comma separated list of name, line thickness, via diameter, and
+ via drill size. e.g.
+ "Fat,50,100,40:Skinny,8,35,20:75Ohm,110,110,20"
+
+`-s/+s'
+ Enables/Disables the saving of the previous commandline. Overrides
+ the *saveLastCommand* resource.
+
+`-save/+save'
+ See the resource description of *saveInTMP* for details.
+
+`-sfile command-line'
+ Sets the command to be executed when an layout file is saved. The
+ command may contain %f which is replaced by the filename. The
+ command must read its data from the standard input. The resource
+ *saveCommand* is overwritten.
+
+`-size x'
+ Overrides the resource *size* which determines the maximum size of
+ a layout.
+
+`-v value'
+ Sets the volume of the X speaker. The value is passed to `XBell()'
+ and must be in the range -100..100.
+
+
+File: pcb.info, Node: Special Options, Prev: Options, Up: Command-Line Options
+
+Special Options
+===============
+
+ There are some special options available in addition to normal
+command line options. Each of these must be the only option specified
+on a command line. The available special options are:
+
+`-copyright'
+ Prints out the copyright notice and terminates.
+
+`-version'
+ Prints out the version ID and terminates.
+
+`-help'
+ Prints out the usage message and terminates.
+
+
+File: pcb.info, Node: X11 Interface, Next: File Formats, Prev: Command-Line Options, Up: Top
+
+X11 Interface
+*************
+
+ This chapter gives an overview about the additional `X11' resources
+which are defined by `Pcb' as well as the defined action routines.
+
+* Menu:
+
+* Resources:: Non-standard `X11' application resources.
+* Actions:: A list of available action routines.
+* Translations:: A list of the default key translations (as shipped).
+
+
+File: pcb.info, Node: Resources, Next: Actions, Up: X11 Interface
+
+Non-Standard X11 Application Resources
+======================================
+
+ In addition to the toolkit resources, `Pcb' defines the following
+resources:
+
+`absoluteGrid (boolean)'
+ Selects if either the grid is relative to the position where it
+ has changed last or absolute, the default, to the origin (0,0).
+
+`alignmentDistance (dimension)'
+ Specifies the distance between the boards outline to the alignment
+ targets.
+
+`allDirectionLines (boolean)'
+ Enables (default) or disables clipping of new lines to 45 degree
+ angles.
+
+`backupInterval (int)'
+ `Pcb' has an automatic backup feature which saves the current data
+ every n seconds. The default is *300* seconds. A value of zero
+ disables the feature. The backup file is named
+ `/tmp/PCB.%i.backup'. *%i* is replaced by the process ID. See
+ also, the command-line option *-backup*.
+
+`Bloat (dimension)'
+ Specifies the minimum spacing design rule in mils.
+
+`charactersPerLine (int)'
+ `Pcb' uses this value to determine the page width when creating
+ lists. N, the number of characters per line, defaults to *80*.
+ See also, the command-line option *-c*.
+
+`connectedColor (color)'
+ All pins, vias, lines and rectangles which are selected during a
+ connection search are drawn with this color. The default value is
+ determined by *XtDefaultForeground*.
+
+`crosshairColor (color)'
+ This color is used to draw the crosshair cursor. The color is a
+ result of a *XOR* operation with the contents of the drawing area.
+ The result also depends on the default colormap of the `X11'
+ server because only the colormap index is used in the boolean
+ operation and `Pcb' doesn't create its own colormap. The default
+ setting is *XtDefaultForeground*.
+
+`elementColor (color)'
+`elementSelectedColor (color)'
+ The elements package part is drawn in these colors, for normal and
+ selected mode, respectively, which both default to
+ *XtDefaultForeground*.
+
+`elementCommand (string)'
+ `Pcb' uses a user defined command to read element files. This
+ resources is used to set the command which is executed by the
+ users default shell. Two escape sequences are defined to pass the
+ selected filename (%f) and the current search path (%p). The
+ command must write the element data to its standard output. The
+ default value is
+ M4PATH="%p";export M4PATH;echo 'include(%f)' | m4
+ Using the GNU version of `m4' is highly recommended. See also,
+ the command-line option *-lelement*.
+
+`elementPath (string)'
+ A colon separated list of directories or commands (starts with
+ '|'). The path is passed to the program specified in
+ *elementCommand* together with the selected elementname. A
+ specified command will be executed in order to create entries for
+ the fileselect box. It must write its results to *stdout* one
+ entry per line. See also, the user-command *le[!]*.
+
+`fileCommand (string)'
+ The command is executed by the user's default shell whenever
+ existing layout files are loaded. Data is read from the command's
+ standard output. Two escape sequences may be specified to pass
+ the selected filename (%f) and the current search path (%p). The
+ default value is:
+ cat %f
+ See also, the command-line option *-lfile*.
+
+`filePath (string)'
+ A colon separated list of directories or commands (starts with
+ '|'). The path is passed to the program specified in
+ *fileCommand* together with the selected filename. A specified
+ command will be executed in order to create entries for the
+ fileselect box. It must write its results to *stdout* one entry
+ per line. See also, the user-command *l[!]*.
+
+`fontCommand (string)'
+ Loading new symbol sets also is handled by an external command.
+ You again may pass the selected filename and the current search
+ path by passing %f and %p in the command string. Data is read from
+ the commands standard output. This command defaults to
+ cat %f
+ See also, the command-line option *-lfont*.
+
+`fontFile (string)'
+ The default font for new layouts is read from this file which is
+ searched in the directories as defined by the resource *fontPath*.
+ Searching is only performed if the filename does not contain a
+ directory component. The default filename is `default_font'. See
+ also, the command-line option *-fontfile*.
+
+`fontPath (string)'
+ This resource, a colon separated list of directories, defines the
+ searchpath for font files. See also, the resource *fontFile*.
+
+`grid (int)'
+ This resources defines the initial value of one cursor step. It
+ defaults to *100 mil* and any changes are saved together with the
+ layout data.
+
+`gridColor (color)'
+ This color is used to draw the grid. The color is a result of a
+ *INVERT* operation with the contents of the drawing area. The
+ result also depends on the default colormap of the `X11' server
+ because only the colormap index is used in the boolean operation
+ and `Pcb' doesn't create its own colormap. The default setting is
+ *XtDefaultForeground*.
+
+`elementColor (color)'
+ Elements localted on the opposite side of the board are drawn in
+ this color. The default is *XtDefaultForeground*.
+
+`layerColor1..8 (color)'
+`layerSelectedColor1..8 (color)'
+ These resources define the drawing colors of the different layers
+ in normal and selected state. All values are preset to
+ *XtDefaultForeground*.
+
+`layerGroups (string)'
+ The argument to this resource is a colon separated list of comma
+ separated layernumbers (1..8). All layers within one group are
+ switched on/off together. The default setting is *1:2:3:...:8*
+ which means all layers are handled separatly. Grouping layers one
+ to three looks like *1,2,3:4:...:8* See also, the command-line
+ option *-lg*.
+
+`layerName1..8 (string)'
+ The default name of the layers in a new layout are determined by
+ these resources. The defaults are empty strings.
+
+`libraryCommand (string)'
+ `Pcb' uses a command to read element data from libraries. The
+ resources is used to set the command which is executed by the users
+ default shell. Three escape sequences are defined to pass the
+ selected filename (%f), the current search path (%p) as well (%a)
+ as the three parameters *template*, *value* and *package* to the
+ command. It must write the element data to its standard output.
+ The default value is
+ /usr/X11R6/lib/X11/pcb/QueryLibrary.sh %p %f %a
+
+`libraryContentsCommand (string)'
+ Similar to *libraryCommand*, `Pcb' uses the command specified by
+ this resource to list the contents of a library.
+ /usr/X11R6/lib/X11/pcb/ListLibraryContents.sh %p %f
+ is the default.
+
+`libraryFilename (string)'
+ The resource specifies the name of the library. The default value
+ is *pcblib*.
+
+`libraryPath (string)'
+ A colon separated list of directories that will be passed to the
+ commands specified by *elementCommand* and
+ *elementContentsCommand*.
+
+`lineThickness (dimension)'
+ The value, int the range [1..250], defines the initial thickness
+ of new lines. The value is preset to *ten mil*.
+
+`media ( | x+-+-)'
+ The default (user defined) media of the `PostScript' device.
+ Predefined values are *a3*, *a4*, *a5*, *letter*, *tabloit*,
+ *ledger*, *legal*, and *executive*. The second way is to specify
+ the medias width, height and margins in mil. The resource
+ defaults to *a4* size.
+
+`offLimitColor (color)'
+ The area outside the current maximum settings for width and height
+ is drawn with this color. The default value is determined by
+ *XtDefaultBackground*.
+
+`pinColor (color)'
+`pinSelectedColor(color)'
+ This resource defines the drawing color of pins and pads in both
+ states. The values are preset to *XtDefaultForeground*.
+
+`pinoutFont (string)'
+ This fonts are used to display pin names. There is one font for
+ each zoom value. The values are preset to *XtdefaultFont*.
+
+`pinoutNameLength (int)'
+ This resource limits the number of characters which are displayed
+ for pin names in the pinout window. By default the string length
+ is limited to *eight* characters per name. See also, the
+ command-line option *-pnl*.
+
+`pinoutOffsetX (int)'
+`pinoutOffsetY (int)'
+ These resources determine the offset in *mil* of the circuit from
+ the upper left corner of the window when displaying pinout
+ information. Both default to *100 mil*.
+
+`pinoutTextOffsetX (int)'
+`pinoutTextOffsetY (int)'
+ The resources determine the distance in mil between the drilling
+ hole of a pin to the location where its name is displayed in the
+ pinout window. They default to *X:50* and *Y:0*.
+
+`pinoutZoom (int)'
+ Sets the zoom factor for the pinout window according to the
+ formula: scale = 1:(2 power value). Its default value is *two*
+ which results in a *1:4* scale. See also, the command-line option
+ *-pz*.
+
+`printCommand (string)'
+ Default file for printouts. If the name starts with a '|' the
+ output is piped through the command. A %f is replaced by the
+ current filename. There is no default file or command.
+
+`raiseLogWindow (boolean)'
+ The log window will be raised when new messages arrive if this
+ resource is set *true*, the default.
+
+`ratCommand (string)'
+ Default command for reading a netlist. A %f is replaced by the
+ netlist filename. Its default value is "*cat %f*".
+
+`ratPath (string)'
+ Default path to look for netlist files. It's default value is "."
+
+`resetAfterElement (boolean)'
+ If set to *true*, all found connections will be reset before a new
+ element is scanned. This will produce long lists when scanning the
+ whole layout for connections. The resource is set to *false* by
+ default. The feature is only used while looking up connections of
+ all elements. See also, the command-line option *-reset, +reset*.
+
+`ringBellWhenFinished (boolean)'
+ Whether to ring the bell (the default) when a possibly lengthy
+ operation has finished or not. See also, the command-line option
+ *-ring, +ring*.
+
+`routeStyle (string)'
+ Default values for the menu of routing styles (seen in the sizes
+ menu). The string is a comma separated list of name, line
+ thickness, via diameter, and via drill size. e.g.
+ "Fat,50,100,40:Skinny,8,35,20:75Ohm,110,110,20" See also, the
+ command-line option *-rs* and *Sizes Menu*
+
+`rubberBandMode (boolean)'
+ Whether rubberband move and rotate (attached lines stretch like
+ rubberbands) is enabled (the default).
+
+`saveCommand (string)'
+ This command is used to save data to a layout file. The filename
+ may be indicated by placing `%f' in the string. It must read the
+ data from its standard input. The default command is:
+ cat - > %f
+ See also, the command-line option *-sfile*.
+
+`saveInTMP (boolean)'
+ Enabling this resource will save all data which would otherwise be
+ lost in a temporary file `/tmp/PCB.%i.save'. *%i* is replaced by
+ the process ID. As an example, loading a new layout when the old
+ one hasn't been saved would use this resource. See also, the
+ command-line option *-save, +save*.
+
+`saveLastCommand (boolean)'
+ Enables the saving of the last entered user command. The option is
+ *disabled* by default. See also, the command-line option *-s, +s*.
+
+`Shrink (dimension)'
+ Specifies the minimum overlap (touching) design rule in mils.
+
+`size (x)'
+ Defines the width and height of a new layout. The default is
+ *7000x5000*.
+
+`stipllePolygons (boolean)'
+ Determines whether to display polygons on the screen with a
+ stippled pattern. Stippling can create some amount of
+ transperency so that you can still (to some extent) see layers
+ beneath polygons. It defaults to False.
+
+`textScale (dimension)'
+ The font scaling in percent is defined by this resource. The
+ default is *100* percent.
+
+`useLogWindow (boolean)'
+ Several subroutines send messages to the user if an error occurs.
+ This resource determines if they appear inside the log window or
+ as a separate dialog box. See also, the resource *raiseLogWindow*
+ and the command line option *-loggeometry*. The default value is
+ *true*.
+
+`viaColor (color)'
+
+`viaSelectedColor (color)'
+ This resource defines the drawing color of vias in both states.
+ The values are preset to *XtDefaultForeground*.
+
+`viaThickness (dimension)'
+`viaDrillingHole (dimension)'
+ The initial thickness and drilling hole of new vias. The values
+ must be in the range [30..250] with at least 20 mil of copper.
+ The default thickness is *40 mil* and the default drilling hole is
+ *20 mil*.
+
+`volume (int)'
+ The value is passed to `XBell()' which sets the volume of the `X'
+ speaker. The value lies in the range -100..100 and it defaults to
+ the maximum volume of *100*.
+
+`warnColor (color)'
+ This resources defines the color to be used for drawing pins and
+ pads when a warning has been issued about them.
+
+`zoom (int)'
+ The initial value for output scaling is set according to the
+ following formula: scale = 1:(2 power value). It defaults to
+ *three* which results in an output scale of *1:8*.
+
+ Refer also to *Note Command-Line Options::.
+
+
+File: pcb.info, Node: Actions, Next: Translations, Prev: Resources, Up: X11 Interface
+
+Actions
+=======
+
+ All user accessible commands may be bound to almost any `X' event.
+Almost no default binding for commands is done in the binaries, so it
+is vital for the application that at least a system-wide application
+resource file exists. This file normally resides in the
+`X11/lib/app-defaults' directory and is called `Pcb'. The bindings to
+which the manual refers to are the ones as defined by the shipped
+resource file. Besides binding an action to an X11 event, you can also
+execute any action command using a ":" command (see *Note User
+Commands::).
+
+ Take special care about translations related to the functions keys
+and the pointer buttons because most of the window managers use them
+too. Change the file according to your hardware/software environment.
+You may have to replace all occurances of *baseTranslations* to
+*translations* if you use a `X11R4' server.
+
+ Passing *Object* as an argument to an action routine causes the
+object at the cursor location to be changed, removed or whatever. If
+more than one object is located at the crosshair position the smallest
+type is used. If there are two of the same type the newer one is taken.
+*SelectedObjects* will handle all selected and visible objects.
+
+`AddRats(AllRats|SelectedRats)'
+ Adds rat-lines to the layout using the loaded netlist file (see
+ the *:rn*, *Note User Commands::.). Rat lines are added on the
+ active layer using the current line thickness shown in the status
+ line. Only missing connectivity is added by the AddRats command
+ so if, for example, the layout is complete nothing will be added.
+ Rat lines are drawn on the screen with a stippled pattern to make
+ them easier to identify since they cannot appear in a completed
+ layout. The rat-lines are added in the minimum length
+ straight-line tree pattern (always ending on pins or pads) that
+ satisfies the missing connectivity in the circuit. If a SMD pad
+ is unreachable on the active layer, a warning will be issued about
+ it and the rat-line to that pad will not be generated. If
+ connections exist on the board which are not listed in the netlist
+ while AllRats are being added, warning messages will be issued and
+ the affected pins and pads will be drawn in a special *warnColor*
+ until the next *Notify()* event. If the entire layout agrees
+ completely with the net-list a message informs you that the layout
+ is complete and no rat-lines are added (since none are needed).
+ If *SelectedRats* is passed as the argument, only those missing
+ connections that might connect among the selected pins and pads
+ are drawn. Default:
+ Nonew: AddRats(AllRats)
+ !Shiftw: AddRats(SelectedRats)
+ Noneo: DeleteRats(AllRats) AddRats(AllRats)
+ !Shifto: DeleteRats(SelectedRats) AddRats(SelectedRats)
+
+`Atomic(Save|Restore|Block|Close)'
+ Controls the undo grouping of sequences of actions. Before the
+ first action in a group, Atomic(Save) should be issued. After
+ each action that might be undoable, Atomic(Restore) should be
+ issued. Atomic(Block) concludes and save the undo grouping if
+ there was anything in the group to undo. Atomic(Close) concludes
+ and save the undo grouping even if nothing was actually done.
+ Thus it might produce an "empty" undo. This can be useful when
+ you want to use undo in a group of actions.
+
+`Bell([-100..100])'
+ Rings the bell of your display. If no value is passed the setting
+ of the resource *volume* will be used.
+
+`ChangeDrillSize(Object, value)'
+`ChangeDrillSize(SelectedPins|SelectedVias, value)'
+ This action routine changes the drilling hole of pins and vias.
+ If *value* starts with + or -, then it adds (or subtracts) *value*
+ from the current hole diameter, otherwise it sets the diameter to
+ the value. Default:
+ !Mod1s: Change2ndSize(Object, +5)
+ !Mod1 Shifts: Change2ndSize(Object, -5)
+
+`ChangeHole(Object|SelectedVias)'
+ This action routine converts a via to and from a hole. A hole is
+ a via that has no copper annulus. The drill size for the via
+ determines the hole diameter.
+ !Ctrlh: ChangeHole(Object)
+
+`ChangeName(Object)'
+`ChangeName(Layer|Layout)'
+ Changes the name of the visible object at the cursor location. A
+ text object doesn't have a name therefore the text string itself
+ is changed. The element name currently used for display is always
+ the one changed with this command. See
+ *Display(Description|NameOnPCB|Value)* for details. Passing
+ *Layer* changes the current layers name. Default:
+ Nonen: ChangeName(Object)
+
+`ChangeOctagon(Object|SelectElements|SelectedPins|SelectedVias|Selected)'
+ Toggles what shape the affected pin(s) or via(s) will be drawn
+ when they are not square. The shape will either be round or
+ octagonal. Default:
+ !Ctrlo: ChangeOctagon(Object)
+
+`ChangeSize(Object, value)'
+`ChangeSize(SelectedLines|SelectedPins|SelectedVias, value)'
+`ChangeSize(SelectedPads|SelectedTexts|SelectedNames, value)'
+`ChangeSize(SelectedElements, value)'
+ To change the size of an object you have to bind these action to
+ some `X' event (or use :ChangeSize(...)). If *value* begins with
+ a + or - then the value will be added (or subtracted) from the
+ current size, otherwise the size is set equal to *value*. Range
+ checking is done to insure that none of the maximum/minimums of
+ any size are violated. If *Object* is passed then a single object
+ at the cursor location is changed. If any of the *Selected*
+ arguments are passed then all selected and visible objects of that
+ type are changed. If the type being modified is an element, then
+ the thickness of the silkscreen lines defining the element is
+ changed. Default:
+ Nones: ChangeSize(Object, +5)
+ !Shifts: ChangeSize(Object, -5)
+
+`ChangeSquare(Object|SelectedElements|SelectedPins)'
+ Toggles the setting of the square flag. The flag is used to
+ identify a certain pin, normally the first one, of circuits. It is
+ also used to make SMD pads have square ends.
+ Noneq: ChangeSquare(Object)
+
+`Command()'
+ Calling *Command()* pops up an input line at the bottom of the
+ window which allows you to enter commands. Including all action
+ commands! The dialog ends when *NoneReturn* to confirm or
+ *NoneEscape* to abort is entered. Default:
+ colon: Command()
+
+`Connection(Find)'
+`Connection(ResetFoundLinesAndRectangles|ResetPinsViasAndPads|Reset)'
+ The *Connection()* action is used to mark all connections from one
+ pin, line or via to others. The *ResetFoundLinesAndRectangles,
+ ResetFoundPinsAndVias* and *Reset* arguments may be used to reset
+ all marked lines and rectangles, vias and pins or all of them. The
+ search starts with the pin or via at the cursor position. All
+ found objects are drawn with the color defined by the resource
+ *connectedColor*. See also,
+ *Display(Description|NameOnPCB|Value)*. Default:
+ !Shiftc: Connection(Reset)
+ Nonef: Connection(Find)
+ !Shiftf: Connection(Reset)
+
+`DeleteRats(AllRats|SelectedRats)'
+ This routine deletes either all rat-lines in the layout, or only
+ the selected and visible ones. Non-rat-lines and other layout
+ objects are unaffected. Default:
+ Nonee: DeleteRats(AllRats)
+ !Shifte: DeleteRats(SelectedRats)
+
+`Display(Description|NameOnPCB|Value)'
+`Display(Toggle45Degree|CycleClip)'
+`Display(Grid|ToggleGrid)'
+`Display(ToggleRubberBandMode)'
+`Display(Center|ClearAndRedraw|Redraw)'
+`Display(Pinout|PinOrPadName)'
+ This action routines handles some output related settings. It is
+ used to center the display around the cursor location and to
+ redraw the output area optionally after clearing the window.
+ Centering is done with respect to the *grid* setting. Displaying
+ the grid itself may be switched on and off by *Grid* but only if
+ the distance between two pixels exceeds 1_DISTANCE pixels. `Pcb'
+ is able to handle several labels of an element. One of them is a
+ description of the functionality (eg resistor), the second should
+ be a unique identifier (R1) whereas the last one is a value (100k).
+ The *Display()* action selects which of the names is displayed.
+ It also controls which name will be affected by the *ChangeName*
+ command. If *ToggleGrid* is passed, `Pcb' changes between relative
+ ('rel' in the statusline) and absolute grid (an 'abs' in the
+ statusline). Relative grid means the pointer position when the
+ command is issued is used as the grid origin; while (0,0) is used
+ in the absolute grid case. Passing *Pinout* displays the pinout
+ of the element at the current cursor location whereas
+ *PinOrPadName* toggles displaying of the pins or pads name under
+ the cursor. If none of them matches but the cursor is inside of an
+ element, the flags is toggled for all of its pins and pads. For
+ details about rubberbands see also the details about *Mode*.
+ Default:
+ Nonec: Display(Center)
+ Noned: Display(PinOrPadName)
+ !Shiftd: Display(Pinout)
+ Noner: Display(ClearAndRedraw)
+ None.: Display(Toggle45Degree)
+ None/: Display(CycleClip)
+
+`DRC()'
+ Initiates design rule checking of the entire layout. Must be
+ repeated until no errors are found.
+
+`EditLayerGroups()'
+ Pops up a dialog box to edit the layergroup setting. The function
+ is also available from the *Objects* menu. There are no defaults.
+
+`Load(ElementToBuffer|Layout|LayoutToBuffer|Nelist)'
+ This routine pops up a fileselect box to load layout, element data,
+ or netlist. The passed filename for layout data is saved and may
+ be reused. *ElementToBuffer* and *LayoutToBuffer* load the data
+ into the current buffer. There are no defaults.
+
+`MarkCrosshair()'
+ This routine marks the current cursor location with an X, and then
+ the cursor display shows both absolute position and position
+ relative to the mark. If a mark is already present, this routine
+ removes it and stops displaying relative cursor coordinates.
+ Defaults:
+ !Ctrlm: MarkCrosshair()
+
+`Mode(Copy|InsertPoint|Line|Move|None|PasteBuffer|Polygon|Thermal)'
+`Mode(Remove|Rectangle|RubberbandMove|Text|Via)'
+`Mode(Cycle)'
+`Mode(Notify)'
+`Mode(Save|Restore)'
+ Switches to a new mode of operation. The active mode is displayed
+ by a thick line around the matching mode selector button. Most of
+ the functionality of `Pcb' is implemented by selecting a mode and
+ calling *Mode(Notify)*. The arguments *Line*, *Polygon*,
+ *Rectangle*, *Text* and *Via* are used to create the appropriate
+ object whenever *Mode(Notify)* is called. Some of them, such as
+ *Polygon*, need more than one call for one object to be created.
+ *InsertPoint* adds points to existing polygons or lines. *Save*
+ and *Restore* are used to temporarily save the mode, switch to
+ another one, call *Mode(Notify)* and restore the saved one. Have a
+ look at the application resource file for examples. *Copy* and
+ *Move* modes are used to change an object's location and,
+ optionally, to create a new one. The first call of *Mode(Notify)*
+ attaches the object at the pointer location to the crosshair
+ whereas the second one drops it to the layout. The *rubberband*
+ version of move performs the move while overriding the current
+ rubberband mode. Passing *PasteBuffer* attaches the contents of
+ the currently selected buffer to the crosshair. Each call to
+ *Mode(Notify)* pastes this contents to the layout. *Mode(Cycle)*
+ cycles through the modes available in the mode-button pallete.
+ *Mode(None)* switches all modes off. Default:
+ Escape: Mode(None)
+ space: Mode(Cycle)
+ NoneBackSpace: Mode(Save) Mode(Remove) Mode(Notify) Mode(Restore)
+ NoneDelete: Mode(Save) Mode(Remove) Mode(Notify) Mode(Restore)
+ NoneF1: Mode(Via)
+ NoneF2: Mode(Line)
+ NoneF3: Mode(PasteBuffer)
+ NoneF4: Mode(Rectangle)
+ NoneF5: Mode(Text)
+ NoneF6: Mode(Polygon)
+ NoneF7: Mode(Thermal)
+ NoneF8: Mode(Arc)
+ NoneInsert: Mode(InsertPoint)
+ None[: Mode(Save) Mode(Move) Mode(Notify)
+ None]: Mode(Notify) Mode(Restore)
+ None: Mode(Notify)
+ !Shift Ctrl: Mode(Save) Mode(Remove) Mode(Notify) Mode(Restore)
+ None: Mode(Save) Mode(Move) Mode(Notify)
+ None: Mode(Notify) Mode(Restore)
+ !Mod1: Mode(Save) Mode(Copy) Mode(Notify)
+ !Mod1: Mode(Notify) Mode(Restore)
+ Shift Mod1: Mode(Save) Mode(RubberbandMove) Mode(Notify)
+
+`MovePointer(delta_x, delta_y)'
+ With this function it is possible to move the crosshair cursor by
+ using the cursor keys. The `X' server's pointer follows because
+ the necessary events are generated by `Pcb'. All movements are
+ performed with respect to the currently set grid value. Default:
+ NoneUp: MovePointer(0, -1)
+ !ShiftUp: MovePointer(0, -10)
+ NoneDown: MovePointer(0, 1)
+ !ShiftDown: MovePointer(0, 10)
+ NoneRight: MovePointer(1, 0)
+ !ShiftRight: MovePointer(10, 0)
+ NoneLeft: MovePointer(-1, 0)
+ !ShiftLeft: MovePointer(-10, 0)
+
+`MoveToCurrentLayer(Object|SelectedObjects)'
+ The function moves a single object at the crosshair location or
+ all selected objects to the current layer. Elements are not
+ moveable by this function. They have to be deleted and replaced
+ on the other side. If a line segment is moved and the movement
+ would result in a loss of connectivity to another segment then
+ via(s) are automatically added to maintain the connectivity.
+ Nonem: MoveToCurrentLayer(Object)
+ !Shiftm: MoveToCurrentLayer(SelectedObjects)
+
+`New()'
+ Clear the current layout and starts a new one after entering its
+ name. Refer to the resource *backup* for more information. No
+ defaults.
+
+`PasteBuffer(AddSelected|Clear|1..5)'
+`PasteBuffer(Rotate, 1..3)'
+`PasteBuffer(Convert)'
+ This action routine controls and selects the pastebuffer as well
+ as all cut-and-paste operations. Passing a buffer number selects
+ one in of the range 1..5. The statusline is updated with the new
+ number. *Rotate* performs a number of 90 degree counter clockwise
+ rotations of the buffer contents. *AddSelected* as first argument
+ copies all selected and visible objects into the buffer. Passing
+ *Clear* removes all objects from the currently selected buffer.
+ *Convert* causes the contents of the buffer (lines, arc, vias) to
+ be converted into an element definition. Refer to *Note
+ Pastebuffer:: for examples. Default:
+ !Ctrlx: PasteBuffer(Clear) PasteBuffer(AddSelected)
+ Mode(PasteBuffer)
+ !Shift Ctrlx: PasteBuffer(Clear) PasteBuffer(AddSelected)
+ RemoveSelected() Mode(PasteBuffer)
+ !Mod1c: PasteBuffer(Clear) PasteBuffer(AddSelected)
+ !Mod1x: PasteBuffer(Clear) PasteBuffer(AddSelected)
+ RemoveSelected()
+ !Shift1: PasteBuffer(1)
+ !Shift2: PasteBuffer(2)
+ !Shift3: PasteBuffer(3)
+ !Shift4: PasteBuffer(4)
+ !Shift5: PasteBuffer(5)
+ NoneF3: Mode(PasteBuffer)
+
+`Polygon((Close|PreviousPoint)'
+ Polygons need a special action routine to make life easier. Calling
+ *Polygon(PreviousPoint)* resets the newly entered corner to the
+ previous one. The Undo action will call Polygon(PreviousPoint)
+ when appropriate to do so. *Close* creates the final segment of
+ the polygon. This may fail if clipping to 45 degree lines is
+ switched on, in which case a warning is issued. Default:
+ Nonep: Polygon(Close)
+ !Shiftp: Polygon(Close)
+
+`Print()'
+ Pops up a print control box that lets you select the output
+ device, scaling and many more options. Each run creates all files
+ that are supported by the selected device. These are mask files as
+ well as drilling files, silk screens and so on. The table shows
+ the filenames for all possible files:
+ POSIX (extention) 8.3 filename
+ ---------------------------------------------
+ *_componentmask.* cmsk.*
+ *_componentsilk.* cslk.*
+ *_soldermask.* smsk.*
+ *_soldersilk.* sslk.*
+ *_drill.* dril.*
+ *_groundplane.* gpl.*
+ *_group[1..8].* [..8].*
+ The output may be sent to a postprocessor by starting the filename
+ with the *pipe* `("|")' character. Any `"%f"' in a command is
+ replaced with the current filename. The function is available from
+ the *file* menu. There are no defaults.
+
+`Quit()'
+ Quits the application after confirming the operation. Default:
+ WM_PROTOCOLS: Quit()
+
+`Redo()'
+ This routine allows you to recover from the last undo command.
+ You might want to do this if you thought that undo was going to
+ revert something other than what it actually did (in case you are
+ confused about which operations are un-doable), or if you have
+ been backing up through a long undo list and over-shoot your
+ stopping point. Any change that is made since the undo in
+ question will trim the redo list. For example if you add ten
+ lines, then undo three of them you could use redo to put them
+ back, but if you move a line on the board before performing the
+ redo, you will lose the ability to "redo" the three "undone" lines.
+ Default:
+ !Shiftr: Redo()
+
+`RemoveSelected()'
+ This routine removes all visible and selected objects. There are
+ no defaults.
+
+`Report(Object|DrillReport)'
+ This routine pops up a dialog box describing the various
+ characteristics of an object (or piece of an object such as a pad
+ or pin) in the layout at the cursor position, or a report about
+ all of the drill holes in the layout. There are no defaults.
+
+`RouteStyle(1|2|3|4)'
+ This routine copies the sizes corresponding to the numbered route
+ style into the active line thicknes, via diameter, and via drill
+ size. Defaults:
+ !Ctrl1: RouteStyle(1)
+ ...
+ !Ctrl4: RouteStyle(4)
+
+`Save(Layout|LayoutAs)'
+`Save(AllConnections|AllUnusedPins|ElementConnections)'
+ Passing *Layout* saves the layout using the file from which it was
+ loaded or, if it is a new layout, calls *Save(LayoutAs)* which
+ queries the user for a filename. The values: *AllConnections*,
+ *AllUnusedPins* and *ElementConnections* start a connection scan
+ and save all connections, all unused pins or the connections of a
+ single element to a file. There are no defaults.
+
+`Select(All|Block|Connection|ToggleObject)'
+`Select(ElementByName|ObjectByName|PadByName|PinByName)'
+`Select(TextByName|ViaByName)'
+ Toggles either the selection flag of the object at the crosshair
+ position (*ToggleObject*) or selects all visible objects, all
+ inside a rectangle or all objects which have been found during the
+ last connection scan. The *ByName* functions use a regular
+ expression search, always case insensitive, to select the objects.
+ Default:
+ None: Select(ToggleObject)
+ None,None: See resource file - this is complex
+
+`SetValue(Grid|LineSize|TextScale|ViaDrillingHole|ViaSize|Zoom, value)'
+ Some internal values may be changed online by this function. The
+ first parameter specifies which data has to be changed. The other
+ one determines if the resource is set to the passed value, if
+ *value* is specified without sign, or increments/decrements if it
+ is specified with a plus or minus sign. The function doesn't
+ change any existing object only the initial values of new objects.
+ Use the *ChangeSize()* and *ChangeDrillSize()* to change existing
+ objects. Default:
+ Noneg: SetValue(Grid, +5)
+ !Shiftg: SetValue(Grid, -5)
+ Nonel: SetValue(LineSize, +5)
+ !Shiftl: SetValue(LineSize, -5)
+ Nonet: SetValue(TextScale, +10)
+ !Shiftt: SetValue(TextScale, -10)
+ Nonev: SetValue(ViaSize, +5)
+ !Shiftv: SetValue(ViaSize, -5)
+ !Mod1v: SetValue(ViaDrillingHole, +5)
+ !Mod1 Shiftv: SetValue(ViaDrillingHole, -5)
+ Nonez: SetValue(Zoom, -1)
+ !Shiftz: SetValue(Zoom, +1)
+
+`SwapSides()'
+ This routine changes the board side you are viewing. Default:
+ NoneTab: SwapSides()
+
+`SwitchDrawingLayer(value)'
+ Makes layer numer 1..8 the current one. Default:
+ None1: SwitchDrawingLayer(1)
+ ...
+ None8: SwitchDrawingLayer(8)
+
+`ToggleHideName(Object|SelectedElements)'
+ Toggles whether the element's name is displayed or hidden. If it
+ is hidden you won't see it on the screen and it will not appear on
+ the silk layer when you print the layout.
+ Noneh: ToggleHideName(Object)
+ !Shifth: ToggleHideName(SelectedElements)
+
+`Undo()'
+`Undo(ClearList)'
+ The unlimited undo feature of `Pcb' allows you to recover from
+ most operations that materially affect you work. Calling *Undo()*
+ without any parameter recovers from the last (non-undo) operation.
+ *ClearList* is used to release the allocated memory. *ClearList*
+ is called whenever a new layout is started or loaded. See also
+ *Redo*. Default:
+ Noneu: Undo()
+ !Shift Ctrlu: Undo(ClearList)
+
+`Unselect(All|Block|Connection)'
+ Unselects all visible objects, all inside a rectangle or all
+ objects which have been found during the last connection scan.
+ Default:
+ !Shift : Mode(Save) Mode(None) Unselect(Block)
+ !Shift : Unselect(Block) Mode(Restore)
+
+
+File: pcb.info, Node: Translations, Prev: Actions, Up: X11 Interface
+
+Default Translations
+====================
+
+ This section covers some default translations of key and button
+events as defined in the shipped default application resource file.
+Most of them have already been listed in *Note Actions::. `Pcb' makes
+use of a nice `X11' feature; calling several action routines for one
+event.
+
+`NoneBackSpace:'
+
+`NoneDelete:'
+`!ShiftBackSpace:'
+`!Shift Ctrl:'
+ The object at the cursor location is removed by
+ *None