summaryrefslogtreecommitdiff
path: root/cad/pcb/files/pcb.info
diff options
context:
space:
mode:
Diffstat (limited to 'cad/pcb/files/pcb.info')
-rw-r--r--cad/pcb/files/pcb.info4125
1 files changed, 4125 insertions, 0 deletions
diff --git a/cad/pcb/files/pcb.info b/cad/pcb/files/pcb.info
new file mode 100644
index 00000000000..d206463fd1e
--- /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 *<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.
+
+
+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 *<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.
+
+
+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 *<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.
+
+
+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 (*<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.
+
+
+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'
+(*<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.
+
+
+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 (*<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.
+
+
+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
+*<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*.
+
+
+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 *<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 *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 *<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.
+
+
+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 *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.
+
+
+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 *<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.
+
+
+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.
+*<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.
+
+* 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:
+
+ *<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 *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 *<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.
+
+
+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 *<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.
+
+
+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
+*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.
+
+
+File: pcb.info, Node: Text, Next: Vias, Prev: Polygons, Up: Drawing and Removing
+
+Text
+----
+
+ 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.
+
+
+File: pcb.info, Node: Vias, Next: Elements, Prev: Text, Up: Drawing and Removing
+
+Vias
+----
+
+ 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.
+
+
+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 *<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 *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 (*!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 *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
+*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.
+
+
+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 *<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 *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 *<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.
+
+
+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 *<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.
+
+
+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::). *<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.
+
+
+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 *<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
+ *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 <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.
+
+
+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 (<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 *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:
+ 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 *Note
+ 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)
+
+
+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.
+
+`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.
+
+
+File: pcb.info, Node: File Formats, Next: Installation, Prev: X11 Interface, Up: Top
+
+File Formats
+************
+
+ 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 *Note Intro::.
+
+ 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*, *Note 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.
+
+* Menu:
+
+* Basic Types:: Basic types used by all data files.
+* Layout File::
+* Element File::
+* Font File::
+* Library Contents File::
+* Library File::
+
+
+File: pcb.info, Node: Basic Types, Next: Layout File, Up: File Formats
+
+Basic Types
+===========
+
+ 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]
+
+
+File: pcb.info, Node: Layout File, Next: Element File, Prev: Basic Types, Up: File Formats
+
+Layout File Format
+==================
+
+ 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
+
+
+File: pcb.info, Node: Element File, Next: Font File, Prev: Layout File, Up: File Formats
+
+Element File Format
+===================
+
+ 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
+
+
+File: pcb.info, Node: Font File, Next: Library Contents File, Prev: Element File, Up: File Formats
+
+Font File Format
+================
+
+ 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*.
+
+
+File: pcb.info, Node: Library Contents File, Next: Library File, Prev: Font File, Up: File Formats
+
+Library Contents File Format
+============================
+
+ 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.
+
+
+File: pcb.info, Node: Library File, Prev: Library Contents File, Up: File Formats
+
+Library File Format
+===================
+
+ 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.
+
+
+File: pcb.info, Node: Installation, Prev: File Formats, Up: Top
+
+Installation and Troubleshooting
+********************************
+
+ 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.
+
+* Menu:
+
+* compiling:: Compiling and installing.
+* problems:: Troubleshooting.
+
+
+File: pcb.info, Node: compiling, Next: problems, Up: Installation
+
+Compiling and Installing
+========================
+
+ This section covers the steps which are necessary to compile the
+package.
+
+* Menu:
+
+* config.h:: Editing `config.h' options.
+* manuals:: Creating the man page, info file and this manual.
+* make:: Creating the `Makefile', compiling and installing.
+
+
+File: pcb.info, Node: config.h, Next: manuals, Up: compiling
+
+Editing config.h
+----------------
+
+ 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.
+
+
+File: pcb.info, Node: manuals, Next: make, Prev: config.h, Up: compiling
+
+Manuals
+-------
+
+ 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.
+
+
+File: pcb.info, Node: make, Prev: manuals, Up: compiling
+
+Compiling the Package
+---------------------
+
+ After reaching this point, it is time for `make'. It should build
+everything without any errors. If it doesn't refer to *Note problems::.
+
+ 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.
+
+
+File: pcb.info, Node: problems, Prev: compiling, Up: Installation
+
+Troubleshooting
+===============
+
+ 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 *Note 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, *Note FreeBSD::.
+
+ The following list gives you just an idea because I'm not able to
+test all `Pcb' releases on all platforms.
+
+* Menu:
+
+* 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'
+
+
+File: pcb.info, Node: HP, Next: Sun, Up: problems
+
+HP Series 700 and 800
+---------------------
+
+ 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'.
+
+
+File: pcb.info, Node: Sun, Next: SGI, Prev: HP, Up: problems
+
+Sun SPARC architecture
+----------------------
+
+ 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 *Note 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.
+
+
+File: pcb.info, Node: SGI, Next: DEC Alpha, Prev: Sun, Up: problems
+
+Silicon Graphics
+----------------
+
+ `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 *Note X11::. Check `Imakefile', too.
+
+
+File: pcb.info, Node: DEC Alpha, Next: SCO, Prev: SGI, Up: problems
+
+DEC Alpha
+---------
+
+ `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
+
+
+File: pcb.info, Node: SCO, Next: Linux, Prev: DEC Alpha, Up: problems
+
+SCO Unix
+--------
+
+ 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.
+
+
+File: pcb.info, Node: Linux, Next: FreeBSD, Prev: SCO, Up: problems
+
+Linux
+-----
+
+ Since the `X11' version of `Pcb' has been developed on a Linux
+system here are no known problems.
+
+
+File: pcb.info, Node: FreeBSD, Next: X11, Prev: Linux, Up: problems
+
+FreeBSD and NetBSD
+------------------
+
+ 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
+
+
+File: pcb.info, Node: X11, Next: TeX and Manuals, Prev: FreeBSD, Up: problems
+
+Problems related to X11
+-----------------------
+
+ There are a some problems related to `X11R4' or systems derived from
+`X11' such as `OpenWindows'. *Note Sun::. 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.
+
+
+File: pcb.info, Node: TeX and Manuals, Prev: X11, Up: problems
+
+Problems related to TeX
+-----------------------
+
+ 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.
+
+Index of Resources
+******************
+
+* Menu:
+
+* /usr/X11R6/lib/X11/pcb: config.h.
+* absoluteGrid: Resources.
+* alignmentDistance: Resources.
+* allDirectionLines <1>: Resources.
+* allDirectionLines: Options.
+* backupInterval <1>: Resources.
+* backupInterval: Options.
+* bloat: Resources.
+* charactersPerLine <1>: Resources.
+* charactersPerLine: Options.
+* connectedColor: Resources.
+* crosshairColor: Resources.
+* default font: Options.
+* DEFAULTFONT: config.h.
+* DEFAULTLIBRARY: config.h.
+* elementColor: Resources.
+* elementCommand <1>: File Formats.
+* elementCommand <2>: Resources.
+* elementCommand: Options.
+* elementContentsCommand: Resources.
+* elementPath: Resources.
+* elementSelectedColor: Resources.
+* EXITCALL: config.h.
+* EXTRA_INCLUDES: config.h.
+* fileCommand <1>: Options.
+* fileCommand <2>: File Formats.
+* fileCommand: Resources.
+* filePath: Resources.
+* fontCommand <1>: Options.
+* fontCommand <2>: File Formats.
+* fontCommand: Resources.
+* fontFile <1>: Options.
+* fontFile: Resources.
+* fontPath: Resources.
+* gm4: config.h.
+* grid: Resources.
+* gridColor: Resources.
+* HAS_REGEX: config.h.
+* INFOLIBDIR: config.h.
+* invisibleObjectsColor: Resources.
+* layerColor: Resources.
+* layerGroups <1>: Options.
+* layerGroups: Resources.
+* layerName: Resources.
+* layerSelectedColor: Resources.
+* libraryCommand <1>: Options.
+* libraryCommand <2>: File Formats.
+* libraryCommand: Resources.
+* libraryContentsCommand <1>: File Formats.
+* libraryContentsCommand: Options.
+* libraryFilename <1>: Options.
+* libraryFilename: Resources.
+* libraryPath <1>: Options.
+* libraryPath: Resources.
+* lineThickness: Resources.
+* media: Resources.
+* Mod1: config.h.
+* offLimitColor: Resources.
+* PATCHES: config.h.
+* pinColor: Resources.
+* pinoutFont0..4: Resources.
+* pinoutNameLength <1>: Options.
+* pinoutNameLength: Resources.
+* pinoutOffsetX: Resources.
+* pinoutOffsetY: Resources.
+* pinoutTextOffsetX: Resources.
+* pinoutTextOffsetY: Resources.
+* pinoutZoom <1>: Resources.
+* pinoutZoom: Options.
+* pinSelectedColor: Resources.
+* printCommand: Resources.
+* raiseLogWindow: Resources.
+* ratCommand: Resources.
+* ratPath: Resources.
+* resetAfterElement <1>: Options.
+* resetAfterElement: Resources.
+* ringBellWhenFinished <1>: Resources.
+* ringBellWhenFinished: Options.
+* routeStyle <1>: Resources.
+* routeStyle: Options.
+* rubberBandMode: Resources.
+* saveCommand <1>: Options.
+* saveCommand <2>: File Formats.
+* saveCommand: Resources.
+* saveInTMP <1>: Options.
+* saveInTMP: Resources.
+* saveLastCommand <1>: Resources.
+* saveLastCommand: Options.
+* shrink: Resources.
+* size <1>: Options.
+* size: Resources.
+* stipplePolygons: Resources.
+* SYS_LIBRARIES: config.h.
+* textScale: Resources.
+* useLogWindow: Resources.
+* viaColor: Resources.
+* viaDrillingHole: Resources.
+* viaSelectedColor: Resources.
+* viaThickness: Resources.
+* volume <1>: Options.
+* volume: Resources.
+* warnColor: Resources.
+* zoom: Resources.
+
+Index of Actions, Commands and Options
+**************************************
+
+* Menu:
+
+* +alldirections: Options.
+* +reset: Options.
+* +ring: Options.
+* +s: Options.
+* +save: Options.
+* -alldirections: Options.
+* -backup: Options.
+* -c: Options.
+* -copyright: Special Options.
+* -fontfile: Options.
+* -help: Special Options.
+* -lelement: Options.
+* -lfile: Options.
+* -lfont: Options.
+* -lg: Options.
+* -libname: Options.
+* -libpath: Options.
+* -llib: Options.
+* -llibcont: Options.
+* -loggeometry: Options.
+* -pnl: Options.
+* -pz: Options.
+* -reset: Options.
+* -ring: Options.
+* -rs: Options.
+* -s: Options.
+* -save: Options.
+* -sfile: Options.
+* -size: Options.
+* -v: Options.
+* -version: Special Options.
+* :actionCommand(): User Commands.
+* :l: User Commands.
+* :le: User Commands.
+* :m: User Commands.
+* :q: User Commands.
+* :rn: User Commands.
+* :s: User Commands.
+* :w[q]: User Commands.
+* AddRats(): Actions.
+* Atomic(): Actions.
+* Bell(): Actions.
+* ChangeDrillSize(): Actions.
+* ChangeHole(): Actions.
+* ChangeName(): Actions.
+* ChangeOctagon(): Actions.
+* ChangeSize(): Actions.
+* ChangeSquare(): Actions.
+* Command(): Actions.
+* Connection(): Actions.
+* DeleteRats(): Actions.
+* Display(): Actions.
+* DRC(): Actions.
+* EditLayerGroups(): Actions.
+* Load(): Actions.
+* MarkCrosshair(): Actions.
+* Mode(): Actions.
+* MovePointer(): Actions.
+* MoveToCurrentLayer(): Actions.
+* New(): Actions.
+* PasteBuffer(): Actions.
+* Polygon(): Actions.
+* Print(): Actions.
+* Quit(): Actions.
+* Redo(): Actions.
+* RemoveSelected(): Actions.
+* Report(): Actions.
+* RouteStyle(): Actions.
+* Save(): Actions.
+* Select(): Actions.
+* SetValue(): Actions.
+* SwapSides(): Actions.
+* SwitchDrawingLayer(): Actions.
+* ToggleHideName(): Actions.
+* Undo(): Actions.
+* Unselect(): Actions.
+
+Index of Concepts
+*****************
+
+* Menu:
+
+* /tmp <1>: Options.
+* /tmp <2>: Loading and Saving.
+* /tmp: Resources.
+* about, command button: Menu.
+* action command: User Commands.
+* actions: Actions.
+* Actions, initiating: User Commands.
+* alignment: Resources.
+* alignment targets: Printing.
+* Alpha: DEC Alpha.
+* arc: Arc Objects.
+* arc, an example: Arcs.
+* architecture <1>: SCO.
+* architecture <2>: Linux.
+* architecture <3>: Sun.
+* architecture <4>: DEC Alpha.
+* architecture <5>: SGI.
+* architecture: HP.
+* ASCII files, format of: File Formats.
+* Atari version: History.
+* atomic: Actions.
+* backup <1>: Options.
+* backup <2>: Loading and Saving.
+* backup <3>: Resources.
+* backup <4>: Options.
+* backup: Resources.
+* basic types: Basic Types.
+* bell: Actions.
+* bloat: Resources.
+* buffer, an example: Pastebuffer.
+* buffer, convert contents to element: Elements.
+* buffer, popup menu: Menu.
+* buffer, selecting a: Actions.
+* button translations: Actions.
+* cat: Resources.
+* centering: Actions.
+* change active layer: Control Panel.
+* change drawing layer: Actions.
+* change object name: Actions.
+* change settings: Actions.
+* change sizes: Actions.
+* change square flag: Actions.
+* change viewing side: Actions.
+* characters per line <1>: Resources.
+* characters per line: Options.
+* clipping lines to 45 degree <1>: Resources.
+* clipping lines to 45 degree: Actions.
+* clipping of lines: Options.
+* closing a polygon: Actions.
+* color printout: Printing.
+* color, warning: Resources.
+* colors: Resources.
+* command-line options: Command-Line Options.
+* compile, how to: compiling.
+* config.h: config.h.
+* connection, removing an: Translations.
+* connections, colors: Resources.
+* connections, creating list of: Connection Lists.
+* connections, popup menu: Menu.
+* connections, reseting: Actions.
+* connections, reseting after element <1>: Resources.
+* connections, reseting after element: Options.
+* connections, searching for: Actions.
+* control panel: Control Panel.
+* copy an object: Translations.
+* copying objects: Actions.
+* copying, an example: Moving and Copying.
+* copyright: Special Options.
+* creating objects: Common.
+* cursor color: Resources.
+* cursor movements: Actions.
+* cursor position: Actions.
+* cursor steps: Resources.
+* cutting objects: Actions.
+* DEC: DEC Alpha.
+* default font <1>: Options.
+* default font: Resources.
+* default layout size: Resources.
+* default library: Resources.
+* default text scaling: Resources.
+* default translations: Translations.
+* design rule checking <1>: Actions.
+* design rule checking: Design Rule Checking.
+* device, selecting an output: Printing.
+* directory /tmp <1>: Options.
+* directory /tmp <2>: Loading and Saving.
+* directory /tmp: Resources.
+* display: Resources.
+* display, popup menu: Menu.
+* displaying element names <1>: Actions.
+* displaying element names: Menu.
+* displaying pinout: Actions.
+* displaying status information: Status-line and Input-field.
+* DOS filenames: Printing.
+* drawing objects: Drawing and Removing.
+* drc <1>: Resources.
+* drc <2>: Actions.
+* drc: Design Rule Checking.
+* drill: Actions.
+* drilling hole, changing of objects: Actions.
+* drilling hole, setting of initial size: Actions.
+* DVI format of manual: manuals.
+* element name, hiding: Actions.
+* element name, removing from silk-screen: Actions.
+* element, an example: Elements.
+* element, an overview: Element Objects.
+* element, color: Resources.
+* element, command <1>: Resources.
+* element, command: Options.
+* element, creating a new package: Elements.
+* element, display names of <1>: Menu.
+* element, display names of: Actions.
+* element, fileformat: Element File.
+* element, files <1>: Options.
+* element, files: Resources.
+* element, loading to buffer: User Commands.
+* element, move name of: Translations.
+* entering user commands: User Commands.
+* erasing objects: Drawing and Removing.
+* example files: Elements.
+* example of buffer handling: Pastebuffer.
+* example of connection lists: Connection Lists.
+* example of copying: Moving and Copying.
+* example of creating an element: Elements.
+* example of element handling: Elements.
+* example of line handling: Lines.
+* example of loading: Loading and Saving.
+* example of loading an element file: Elements.
+* example of moving: Moving and Copying.
+* example of pastebuffer handling: Pastebuffer.
+* example of pin handling: Elements.
+* example of polygon handling: Polygons.
+* example of printing: Printing.
+* example of rectangle handling: Polygons.
+* example of saving: Loading and Saving.
+* example of text handling: Text.
+* example of via handling: Vias.
+* exit <1>: Actions.
+* exit: User Commands.
+* file format, element data: Element File.
+* file format, font data: Font File.
+* file format, layout data: Layout File.
+* file format, libraries: Library File.
+* file format, library contents: Library Contents File.
+* file formats: File Formats.
+* file formats, basic types: Basic Types.
+* file load command <1>: Resources.
+* file load command: Options.
+* file save command <1>: Resources.
+* file save command: Options.
+* file, popup menu: Menu.
+* font command <1>: Options.
+* font command: Resources.
+* font file, format of: Font File.
+* font files <1>: Resources.
+* font files <2>: Options.
+* font files: Resources.
+* font, an overview: Symbol Objects.
+* font, used for pin names: Resources.
+* format of element files: Element File.
+* format of font files: Font File.
+* format of layout files: Layout File.
+* format of libraries: Library File.
+* format of library contents: Library Contents File.
+* FreeBSD: FreeBSD.
+* grid <1>: Resources.
+* grid: Drawing Area.
+* grid color: Resources.
+* grid, absolute and relative <1>: Actions.
+* grid, absolute and relative: Menu.
+* grid, display <1>: Actions.
+* grid, display: Menu.
+* grid, setting of: Actions.
+* groups <1>: Resources.
+* groups: Options.
+* groups, editing of: Actions.
+* Hewlett Packard: HP.
+* hide element name: Actions.
+* how to start: Getting Started.
+* HP: HP.
+* info file: manuals.
+* information about objects: Actions.
+* input-field, position of: Status-line and Input-field.
+* inputfield, saving entered command-line <1>: Options.
+* inputfield, saving entered command-line: Resources.
+* inputfield, start user input: Actions.
+* install, how to: compiling.
+* key translations: Actions.
+* keyboard bell <1>: Resources.
+* keyboard bell: Options.
+* layer, change active: Actions.
+* layer, name of: Resources.
+* layers, an overview: Layer Objects.
+* layers, changing active one: Control Panel.
+* layers, colors: Resources.
+* layers, editing of groups: Actions.
+* layers, groups <1>: Resources.
+* layers, groups: Options.
+* layers, switching on/off: Control Panel.
+* layout files <1>: Resources.
+* layout files <2>: Options.
+* layout files <3>: Resources.
+* layout files: Options.
+* layout files, format of: Layout File.
+* layout files, saving of: User Commands.
+* layout objects, an overview: Intro.
+* layout size: Options.
+* layout, default size of: Resources.
+* layout, loading a: User Commands.
+* layout, loading to buffer: User Commands.
+* layout, merging a: User Commands.
+* layout, printing a: Actions.
+* layout, start a new: Actions.
+* layout-name <1>: Element Objects.
+* layout-name: User Commands.
+* length of a pin name <1>: Resources.
+* length of a pin name: Options.
+* length of outputline: Options.
+* library command <1>: Options.
+* library command: Resources.
+* library contents command <1>: Options.
+* library contents command: Resources.
+* library contents file, format of: Library Contents File.
+* library file, format of: Library File.
+* library name <1>: Resources.
+* library name: Options.
+* library search path: Options.
+* library searchpath: Resources.
+* library window: Library Window.
+* line clipping: Options.
+* linelength: Resources.
+* lines, an example: Lines.
+* lines, an overview: Line Objects.
+* lines, clipping to 45 degree <1>: Resources.
+* lines, clipping to 45 degree: Actions.
+* lines, setting of initial size: Actions.
+* lines, size: Resources.
+* Linux: Linux.
+* list of connections: Resources.
+* listing libraries: Options.
+* listing library contents: Resources.
+* loading a layout to buffer: User Commands.
+* loading elements <1>: Resources.
+* loading elements: Options.
+* loading elements to buffer: User Commands.
+* loading files: Actions.
+* loading fonts <1>: Resources.
+* loading fonts: Options.
+* loading layouts <1>: User Commands.
+* loading layouts <2>: Options.
+* loading layouts: Resources.
+* loading symbols <1>: Resources.
+* loading symbols: Options.
+* loading, an example: Loading and Saving.
+* log window <1>: Options.
+* log window <2>: Resources.
+* log window: Log Window.
+* m4: Resources.
+* m4, preprocessing example files: Elements.
+* make: make.
+* Makefile: config.h.
+* manuals: manuals.
+* mark: Actions.
+* media: Resources.
+* media margin: Resources.
+* media, size of: Printing.
+* menus: Menu.
+* merging layouts: User Commands.
+* messages <1>: Resources.
+* messages <2>: Options.
+* messages: Log Window.
+* mirroring printout: Printing.
+* mode selection: Mode Selectors.
+* mode, selecting of: Actions.
+* mounting holes: Actions.
+* move: Resources.
+* move an object: Translations.
+* moving objects to current layer: Actions.
+* moving, an example: Moving and Copying.
+* name of an element: Actions.
+* name, change an objects: Actions.
+* namelength of pins <1>: Options.
+* namelength of pins: Resources.
+* NetBSD: FreeBSD.
+* netlist <1>: Actions.
+* netlist <2>: Resources.
+* netlist <3>: User Commands.
+* netlist <4>: Rats Nest.
+* netlist: Actions.
+* object, change name of: Actions.
+* object, changing the size of an: Common.
+* object, copy an: Translations.
+* object, creating an: Common.
+* object, drawing and removing: Drawing and Removing.
+* object, move an: Translations.
+* object, removing an <1>: Translations.
+* object, removing an: Common.
+* object, selecting an: Menu.
+* objects, moving to current layer: Actions.
+* objects, popup menu: Menu.
+* octagonal pins and vias: Actions.
+* off limit color: Resources.
+* offset of pinnames: Resources.
+* offset of pinout: Resources.
+* offset of printout: Printing.
+* OpenWindows: Sun.
+* operation modes, selecting of: Actions.
+* outline printout: Printing.
+* output device: Printing.
+* outputline, length of: Options.
+* overlap, minimum: Design Rule Checking.
+* pastebuffer, an example: Pastebuffer.
+* pastebuffer, convert contents to element: Elements.
+* pastebuffer, popup menu: Menu.
+* pastebuffer, selecting a: Actions.
+* path for element files: Resources.
+* path for font files: Resources.
+* path for layout files: Resources.
+* path for libraries: Resources.
+* PC UNIX <1>: SCO.
+* PC UNIX <2>: Linux.
+* PC UNIX: FreeBSD.
+* pin color: Resources.
+* pin, name of <1>: Options.
+* pin, name of: Resources.
+* pinout of elements: Menu.
+* pinout, display of: Actions.
+* pinout, font to display pin names: Resources.
+* pinout, zoomfactor of display <1>: Resources.
+* pinout, zoomfactor of display: Options.
+* pins, an example: Elements.
+* pins, changing shape of: Actions.
+* pointer, moving of: Actions.
+* polygon: Resources.
+* polygon point, go back to previous: Actions.
+* polygon, an example: Polygons.
+* polygon, an overview: Polygon Objects.
+* polygon, closing a: Actions.
+* popping up menus: Menu.
+* postprocessing layout data <1>: Resources.
+* postprocessing layout data: Options.
+* preprocessing element data <1>: Options.
+* preprocessing element data: Resources.
+* preprocessing font data <1>: Options.
+* preprocessing font data: Resources.
+* preprocessing layout data <1>: Options.
+* preprocessing layout data: Resources.
+* preventing loss of data <1>: Loading and Saving.
+* preventing loss of data <2>: Options.
+* preventing loss of data: Resources.
+* print command: Printing.
+* print media <1>: Printing.
+* print media: Resources.
+* print offset: Printing.
+* printing: Resources.
+* printing a layout: Actions.
+* printing, an example: Printing.
+* problems: problems.
+* quit <1>: Actions.
+* quit: User Commands.
+* rat-line <1>: Actions.
+* rat-line: Rats Nest.
+* rats nest <1>: User Commands.
+* rats nest <2>: Actions.
+* rats nest <3>: Resources.
+* rats nest <4>: Actions.
+* rats nest: Rats Nest.
+* recover: Actions.
+* rectangle, an example: Polygons.
+* redo: Actions.
+* redrawing layout: Actions.
+* refreshing layout: Actions.
+* release, current: Special Options.
+* removing connections: Translations.
+* removing objects <1>: Translations.
+* removing objects <2>: Drawing and Removing.
+* removing objects: Common.
+* removing selected objects: Actions.
+* report: Actions.
+* report, popup menu: Menu.
+* reseting found connections <1>: Actions.
+* reseting found connections <2>: Options.
+* reseting found connections: Resources.
+* resources: Resources.
+* rotate: Resources.
+* rotating a buffer: Actions.
+* rotating printout: Printing.
+* routing style <1>: Options.
+* routing style <2>: Resources.
+* routing style: Actions.
+* rubberband <1>: Actions.
+* rubberband: Resources.
+* saving connections: Actions.
+* saving files: Actions.
+* saving found connections: Actions.
+* saving last entered user command <1>: Resources.
+* saving last entered user command: Options.
+* saving layouts <1>: Loading and Saving.
+* saving layouts <2>: Options.
+* saving layouts <3>: Resources.
+* saving layouts <4>: Options.
+* saving layouts: User Commands.
+* saving, an example: Loading and Saving.
+* scaling a printout: Printing.
+* scanning connections: Actions.
+* SCO: SCO.
+* scrolling: Translations.
+* searching connections: Actions.
+* searchpath for element files: Resources.
+* searchpath for font files: Resources.
+* searchpath for layout files: Resources.
+* searchpath for libraries: Resources.
+* selected object, removing an: Actions.
+* selected objects, changing size: Menu.
+* selected objects, removing: Menu.
+* selecting a buffer: Actions.
+* selecting a new mode: Mode Selectors.
+* selecting objects <1>: Actions.
+* selecting objects: Menu.
+* selection: Actions.
+* selection, an example: Selection.
+* selection, popup menu: Menu.
+* SGI: SGI.
+* shrink: Resources.
+* signal: Actions.
+* Silicon Graphics: SGI.
+* size of a layout: Options.
+* size of lines: Resources.
+* size of lines and vias: Actions.
+* size of vias: Resources.
+* sizes, changing of objects: Actions.
+* sizes, popup menu: Menu.
+* Solaris: Sun.
+* spacing, minimum: Design Rule Checking.
+* speaker volume <1>: Resources.
+* speaker volume: Options.
+* square flag, changing of objects: Actions.
+* start user input: Actions.
+* starting a new layout: Actions.
+* starting Pcb: Command-Line Options.
+* status information: Status-line and Input-field.
+* strings, an example: Text.
+* strings, an overview: Text Objects.
+* Sun: Sun.
+* symbols <1>: Options.
+* symbols: Resources.
+* symbols, an overview: Symbol Objects.
+* temporary files <1>: Resources.
+* temporary files <2>: Options.
+* temporary files: Loading and Saving.
+* TeX, problems: TeX and Manuals.
+* texinfo file: manuals.
+* text, an example: Text.
+* text, an overview: Text Objects.
+* text, default scaling: Resources.
+* text, editing: Menu.
+* thickness of lines: Resources.
+* thickness of objects: Common.
+* thickness of vias: Resources.
+* thickness, changing of objects: Actions.
+* translations <1>: Actions.
+* translations: Translations.
+* troubleshooting: problems.
+* undo: Actions.
+* undo, multi-action resources: Actions.
+* undo, popup menu: Menu.
+* unix command <1>: Options.
+* unix command <2>: Resources.
+* unix command <3>: Options.
+* unix command <4>: Resources.
+* unix command <5>: Options.
+* unix command <6>: Resources.
+* unix command <7>: Options.
+* unix command: Resources.
+* unselect objects: Actions.
+* user commands: User Commands.
+* user input: Translations.
+* version, current: Special Options.
+* vias, an example: Vias.
+* vias, an overview: Via Objects.
+* vias, changing shape of: Actions.
+* vias, color: Resources.
+* vias, converting to mounting hole: Actions.
+* vias, setting of initial size: Actions.
+* vias, size: Resources.
+* viewing side, changing of: Actions.
+* volume of speaker <1>: Options.
+* volume of speaker: Resources.
+* X11: X11 Interface.
+* X11 default translations: Translations.
+* X11 resources: Resources.
+* X11 translations: Actions.
+* X11, problems: X11.
+* xmkmf: config.h.
+* zoom of drawing window: Resources.
+* zoom of pinout window <1>: Options.
+* zoom of pinout window: Resources.
+* zoom, setting: Menu.
+* zoom, setting of: Actions.
+
+
+
+Tag Table:
+Node: Top723
+Node: Copying1468
+Node: History2088
+Node: Intro6464
+Node: Symbol Objects7604
+Node: Via Objects8179
+Node: Element Objects8865
+Node: Layer Objects13372
+Node: Line Objects15314
+Node: Arc Objects17330
+Node: Polygon Objects18696
+Node: Text Objects20812
+Node: Getting Started21890
+Node: Application Window23822
+Node: Status-line and Input-field24472
+Node: Control Panel26349
+Node: Mode Selectors28678
+Node: Drawing Area31137
+Node: Menu32120
+Node: Log Window37656
+Node: Library Window38448
+Node: Drawing and Removing38955
+Node: Common42106
+Node: Lines43875
+Node: Arcs45425
+Node: Polygons46597
+Node: Text48478
+Node: Vias49463
+Node: Elements50833
+Node: Pastebuffer56184
+Node: Moving and Copying57883
+Node: Loading and Saving58911
+Node: Printing59987
+Node: Connection Lists64148
+Node: Selection65952
+Node: Rats Nest66796
+Node: Design Rule Checking71884
+Node: User Commands74218
+Node: Command-Line Options78975
+Node: Options79523
+Node: Special Options84130
+Node: X11 Interface84625
+Node: Resources85092
+Node: Actions98785
+Node: Translations122057
+Node: File Formats123597
+Node: Basic Types125267
+Node: Layout File126939
+Node: Element File132784
+Node: Font File136592
+Node: Library Contents File137593
+Node: Library File138638
+Node: Installation141066
+Node: compiling141493
+Node: config.h141887
+Node: manuals144357
+Node: make145012
+Node: problems145895
+Node: HP147499
+Node: Sun148170
+Node: SGI148947
+Node: DEC Alpha149323
+Node: SCO149622
+Node: Linux150094
+Node: FreeBSD150284
+Node: X11150701
+Node: TeX and Manuals151681
+
+End Tag Table