summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--debian/README.sources11
-rw-r--r--debian/changelog541
-rw-r--r--debian/clean5
-rw-r--r--debian/compat1
-rw-r--r--debian/control23
-rw-r--r--debian/copyright120
-rw-r--r--debian/docs4
-rw-r--r--debian/examples4
-rw-r--r--debian/install2
-rw-r--r--debian/menu12
-rw-r--r--debian/patches/01_remove_asg.patch59
-rw-r--r--debian/patches/03_fix_lib_files.patch183
-rw-r--r--debian/patches/04_fix_manpage.patch179
-rw-r--r--debian/patches/05_fix_string_format.patch61
-rw-r--r--debian/patches/series4
-rw-r--r--debian/postinst10
-rw-r--r--debian/preinst13
-rwxr-xr-xdebian/rules61
-rw-r--r--debian/source/format1
-rw-r--r--debian/watch3
-rw-r--r--debian/xcircuit-icon.xpm48
-rw-r--r--tutorial/footnote.html27
-rw-r--r--tutorial/giffiles/aggregate.gifbin0 -> 5614 bytes
-rw-r--r--tutorial/giffiles/alib.gifbin0 -> 3730 bytes
-rw-r--r--tutorial/giffiles/amp1.gifbin0 -> 7855 bytes
-rw-r--r--tutorial/giffiles/amp2.gifbin0 -> 7628 bytes
-rw-r--r--tutorial/giffiles/amp3.gifbin0 -> 8405 bytes
-rw-r--r--tutorial/giffiles/arcs1.gifbin0 -> 4993 bytes
-rw-r--r--tutorial/giffiles/bridge.gifbin0 -> 14903 bytes
-rw-r--r--tutorial/giffiles/bridge1.gifbin0 -> 4576 bytes
-rw-r--r--tutorial/giffiles/bridge2.gifbin0 -> 3455 bytes
-rw-r--r--tutorial/giffiles/bridge3.gifbin0 -> 3988 bytes
-rw-r--r--tutorial/giffiles/bridge4.gifbin0 -> 8685 bytes
-rw-r--r--tutorial/giffiles/bridge5.gifbin0 -> 14752 bytes
-rw-r--r--tutorial/giffiles/bridge6.gifbin0 -> 13742 bytes
-rw-r--r--tutorial/giffiles/dff.gifbin0 -> 14834 bytes
-rw-r--r--tutorial/giffiles/filter1.gifbin0 -> 4844 bytes
-rw-r--r--tutorial/giffiles/filter2.gifbin0 -> 4901 bytes
-rw-r--r--tutorial/giffiles/fullamp.gifbin0 -> 15951 bytes
-rw-r--r--tutorial/giffiles/fullamp_anno.gifbin0 -> 24174 bytes
-rw-r--r--tutorial/giffiles/halfamp.gifbin0 -> 10330 bytes
-rw-r--r--tutorial/giffiles/integrate1.gifbin0 -> 4826 bytes
-rw-r--r--tutorial/giffiles/lib1.gifbin0 -> 1936 bytes
-rw-r--r--tutorial/giffiles/load1.gifbin0 -> 4431 bytes
-rw-r--r--tutorial/giffiles/nand4.gifbin0 -> 3934 bytes
-rw-r--r--tutorial/giffiles/object.gifbin0 -> 2378 bytes
-rw-r--r--tutorial/giffiles/objedit.gifbin0 -> 5098 bytes
-rw-r--r--tutorial/giffiles/overunder.gifbin0 -> 1932 bytes
-rw-r--r--tutorial/giffiles/path1.gifbin0 -> 3039 bytes
-rw-r--r--tutorial/giffiles/path2.gifbin0 -> 4081 bytes
-rw-r--r--tutorial/giffiles/path3.gifbin0 -> 5723 bytes
-rw-r--r--tutorial/giffiles/path4.gifbin0 -> 5181 bytes
-rw-r--r--tutorial/giffiles/path5.gifbin0 -> 3989 bytes
-rw-r--r--tutorial/giffiles/pcbcap.gifbin0 -> 14607 bytes
-rw-r--r--tutorial/giffiles/pcbdiode.gifbin0 -> 3802 bytes
-rw-r--r--tutorial/giffiles/poly1.gifbin0 -> 2023 bytes
-rw-r--r--tutorial/giffiles/poly2.gifbin0 -> 7834 bytes
-rw-r--r--tutorial/giffiles/powersup.gifbin0 -> 5191 bytes
-rw-r--r--tutorial/giffiles/powersup2.gifbin0 -> 6193 bytes
-rw-r--r--tutorial/giffiles/quadparts.gifbin0 -> 3461 bytes
-rw-r--r--tutorial/giffiles/save1.gifbin0 -> 5436 bytes
-rw-r--r--tutorial/giffiles/save2.gifbin0 -> 4492 bytes
-rw-r--r--tutorial/giffiles/select1.gifbin0 -> 1280 bytes
-rw-r--r--tutorial/giffiles/select2.gifbin0 -> 697 bytes
-rw-r--r--tutorial/giffiles/spline1.gifbin0 -> 915 bytes
-rw-r--r--tutorial/giffiles/spline2.gifbin0 -> 1747 bytes
-rw-r--r--tutorial/giffiles/spline3.gifbin0 -> 3888 bytes
-rw-r--r--tutorial/giffiles/symbol_enc.gifbin0 -> 17439 bytes
-rw-r--r--tutorial/giffiles/text.gifbin0 -> 1725 bytes
-rw-r--r--tutorial/giffiles/text2.gifbin0 -> 3437 bytes
-rw-r--r--tutorial/giffiles/tut1.gifbin0 -> 14286 bytes
-rw-r--r--tutorial/giffiles/wramp1.gifbin0 -> 7342 bytes
l---------tutorial/index.html1
-rw-r--r--tutorial/netfiles/filter.spc6
-rw-r--r--tutorial/netfiles/integrator.spc17
-rw-r--r--tutorial/pcb/FlareLED.ps720
-rwxr-xr-xtutorial/pcb/LED1794
-rwxr-xr-xtutorial/pcb/LED.NET47
-rw-r--r--tutorial/pcb/bridge.pcb6
-rw-r--r--tutorial/pcb/flare_objects.gifbin0 -> 15281 bytes
-rw-r--r--tutorial/pcb/pic_instance.gifbin0 -> 18944 bytes
-rw-r--r--tutorial/pcb/pic_object.gifbin0 -> 19324 bytes
-rw-r--r--tutorial/pcb/powersup.pcb10
-rw-r--r--tutorial/psfiles/analoglib1.lps238
-rw-r--r--tutorial/psfiles/analoglib2.lps235
-rw-r--r--tutorial/psfiles/bridge.ps370
-rw-r--r--tutorial/psfiles/buses.ps245
-rw-r--r--tutorial/psfiles/dff.ps228
-rw-r--r--tutorial/psfiles/filter.ps260
-rw-r--r--tutorial/psfiles/integrator.ps327
-rw-r--r--tutorial/psfiles/powersup.ps429
-rw-r--r--tutorial/psfiles/test1.ps154
-rw-r--r--tutorial/tutorial.html803
-rw-r--r--tutorial/tutorial2.html1455
94 files changed, 8717 insertions, 0 deletions
diff --git a/debian/README.sources b/debian/README.sources
new file mode 100644
index 0000000..215ca8f
--- /dev/null
+++ b/debian/README.sources
@@ -0,0 +1,11 @@
+README.source for xcircuit
+==========================
+
+Repackaging xcircuit
+--------------------
+
+To produce a DFSG-compliant source tarball, remove the contents of the asg/
+directory and repackage.
+
+--
+Roland Stigge <stigge@antcom.de>, Thu, 11 Aug 2011 21:44:22 +0200
diff --git a/debian/changelog b/debian/changelog
new file mode 100644
index 0000000..aab00c0
--- /dev/null
+++ b/debian/changelog
@@ -0,0 +1,541 @@
+xcircuit (3.8.78.dfsg-1) unstable; urgency=medium
+
+ * New upstream release
+ * debian/control:
+ - Standards-Version: 3.9.6
+ - Depends: wish (Closes: #770587)
+
+ -- Roland Stigge <stigge@antcom.de> Thu, 14 Jan 2016 22:14:05 +0100
+
+xcircuit (3.7.57.dfsg-1) unstable; urgency=medium
+
+ * New upstream release
+
+ -- Roland Stigge <stigge@antcom.de> Sun, 18 May 2014 19:56:04 +0200
+
+xcircuit (3.7.56.dfsg-1) unstable; urgency=medium
+
+ * New upstream release
+ - API adjustment (Closes: #741821)
+ - Dependencies fixed (Closes: #742495)
+ * Applied Tcl 8.6 fix by Sergei Golovan (Closes: #724826)
+ * Use chrpath to strip RPATH from /usr/lib/xcircuit/xcircexec
+
+ -- Roland Stigge <stigge@antcom.de> Mon, 07 Apr 2014 11:46:15 +0200
+
+xcircuit (3.7.55.dfsg-1) unstable; urgency=low
+
+ * New upstream release
+ * debian/control: Standards-Version: 3.9.5
+
+ -- Roland Stigge <stigge@antcom.de> Sat, 14 Dec 2013 12:24:06 +0100
+
+xcircuit (3.7.54.dfsg-1) unstable; urgency=low
+
+ * New upstream release
+
+ -- Roland Stigge <stigge@antcom.de> Mon, 21 Oct 2013 11:20:36 +0200
+
+xcircuit (3.7.52.dfsg-1) unstable; urgency=low
+
+ * New upstream release
+
+ -- Roland Stigge <stigge@antcom.de> Thu, 17 Oct 2013 15:49:35 +0200
+
+xcircuit (3.7.51.dfsg-1) unstable; urgency=low
+
+ * New upstream release
+
+ -- Roland Stigge <stigge@antcom.de> Sun, 28 Jul 2013 16:12:10 +0200
+
+xcircuit (3.7.50.dfsg-1) unstable; urgency=low
+
+ * New upstream release
+
+ -- Roland Stigge <stigge@antcom.de> Fri, 14 Jun 2013 21:08:34 +0200
+
+xcircuit (3.7.49.dfsg-1) unstable; urgency=low
+
+ * New upstream release
+
+ -- Roland Stigge <stigge@antcom.de> Sat, 18 May 2013 16:24:01 +0200
+
+xcircuit (3.7.48.dfsg-3) unstable; urgency=low
+
+ * Added patch to fix foreground / background readability issue, thanks to
+ Tim Edwards (Closes: #)
+
+ -- Roland Stigge <stigge@antcom.de> Thu, 16 May 2013 20:48:16 +0200
+
+xcircuit (3.7.48.dfsg-2) unstable; urgency=low
+
+ * debian/control: Standards-Version: 3.9.4
+
+ -- Roland Stigge <stigge@antcom.de> Wed, 15 May 2013 21:06:18 +0200
+
+xcircuit (3.7.48.dfsg-1) experimental; urgency=low
+
+ * New upstream release
+
+ -- Roland Stigge <stigge@antcom.de> Fri, 25 Jan 2013 11:17:32 +0100
+
+xcircuit (3.7.47.dfsg-1) experimental; urgency=low
+
+ * New upstream release
+
+ -- Roland Stigge <stigge@antcom.de> Sun, 06 Jan 2013 14:47:55 +0100
+
+xcircuit (3.7.46.dfsg-1) experimental; urgency=low
+
+ * New upstream release
+
+ -- Roland Stigge <stigge@antcom.de> Mon, 31 Dec 2012 13:44:36 +0100
+
+xcircuit (3.7.45.dfsg-1) experimental; urgency=low
+
+ * New upstream release
+
+ -- Roland Stigge <stigge@antcom.de> Sun, 23 Dec 2012 19:26:52 +0100
+
+xcircuit (3.7.44.dfsg-1) experimental; urgency=low
+
+ * New upstream release
+
+ -- Roland Stigge <stigge@antcom.de> Wed, 03 Oct 2012 12:16:57 +0200
+
+xcircuit (3.7.43.dfsg-1) experimental; urgency=low
+
+ * New upstream release
+
+ -- Roland Stigge <stigge@antcom.de> Tue, 25 Sep 2012 13:50:18 +0200
+
+xcircuit (3.7.41.dfsg-1) experimental; urgency=low
+
+ * New upstream release
+ * debian/control, debian/rules: Force tk8.5 and tcl8.5 since 8.6 leads to X
+ errors (BadValue)
+
+ -- Roland Stigge <stigge@antcom.de> Fri, 17 Aug 2012 10:38:16 +0200
+
+xcircuit (3.7.40.dfsg-1) unstable; urgency=low
+
+ * New upstream release
+
+ -- Roland Stigge <stigge@antcom.de> Mon, 28 May 2012 12:03:03 +0200
+
+xcircuit (3.7.39.dfsg-1) unstable; urgency=low
+
+ * New upstream release
+
+ -- Roland Stigge <stigge@antcom.de> Fri, 06 Apr 2012 14:39:32 +0200
+
+xcircuit (3.7.37.dfsg-1) unstable; urgency=low
+
+ * New upstream release
+ * Dropped 02_fix_tcl_libs.patch (integrated upstream)
+
+ -- Roland Stigge <stigge@antcom.de> Sun, 25 Mar 2012 12:47:54 +0200
+
+xcircuit (3.7.35.dfsg-1) unstable; urgency=low
+
+ * New upstream release
+
+ -- Roland Stigge <stigge@antcom.de> Fri, 23 Mar 2012 11:18:44 +0100
+
+xcircuit (3.7.33.dfsg-1) unstable; urgency=low
+
+ * New upstream release
+ * debian/compat: 9
+ * Added patch to fix string format issues (05_fix_string_format.patch)
+
+ -- Roland Stigge <stigge@antcom.de> Sat, 10 Mar 2012 21:17:32 +0100
+
+xcircuit (3.7.32.dfsg-1) unstable; urgency=low
+
+ * New upstream release
+ * debian/control: Standards-Version: 3.9.3
+ * debian/rules: Added get-orig-source target
+
+ -- Roland Stigge <stigge@antcom.de> Sat, 25 Feb 2012 21:54:52 +0100
+
+xcircuit (3.7.30.dfsg-1) unstable; urgency=low
+
+ * New upstream release
+ * Fixed manpage (04_fix_manpage.patch)
+
+ -- Roland Stigge <stigge@antcom.de> Mon, 13 Feb 2012 21:04:00 +0100
+
+xcircuit (3.7.26.dfsg-1) unstable; urgency=low
+
+ * New upstream release (Closes: #636948)
+ * debian/control: Uploaders: Roland Stigge <stigge@antcom.de>
+ * debian/source/format: 3.0 (quilt)
+ * Added tutorial.tar.gz (Closes: #72945)
+
+ -- Roland Stigge <stigge@antcom.de> Thu, 11 Aug 2011 22:27:10 +0200
+
+xcircuit (3.6.135.dfsg-1) unstable; urgency=high
+
+ * New upstream release.
+ - Dropped debian/patches/fix_tk_version.dpatch, since it's been applied
+ in the new upstream release.
+ * Modified debian/rules to fix FTBFS in when sudo is used instead of
+ fakeroot. (Closes: #481460)
+ * Updated Standards Version to 3.8.0.
+ - Removed "Conflicts: xbase (<< 3.3.2.3a-2)" from debian/control
+ * Fixed some lintian warnings.
+ + Added watch file.
+ + Removed deprecated build-deps (x-dev, xutils), added x11proto-core-dev
+ instead.
+ + Fixed debian/rules so that config.sub and config.guess differences
+ aren't shipped.
+ * Made debian/copyright a machine parsable file.
+
+ -- Margarita Manterola <marga@debian.org> Sat, 28 Jun 2008 22:32:54 +0000
+
+xcircuit (3.6.130.dfsg-1) unstable; urgency=low
+
+ * New upstream release.
+ * Updated Standards Version.
+ + Updated menu entries.
+ * Added Homepage field
+ * Several changes to debian/rules
+ + Moved DH_COMPAT to debian/compat
+ + Fixed the clean target so that the package can be built twice in row
+ (Closes: #442767).
+ + Fixed the install target so that the appdefaults are correctly
+ installed, and menus work as expected (Closes: #102640).
+ + Fix the configure target so that it finds tcl correctly. This fixes
+ some of the reported segfaults (Closes: #418631, #441893).
+ * Added debian/patches/fix_lib_files.dpatch, to be able to
+ correctly install the files in /usr/share and /usr/lib.
+ * Added debian/patches/fix_tk_version.dpatch, to allow the use of
+ tcl/tk 8.5.2, which didn't work.
+
+ -- Margarita Manterola <marga@debian.org> Sun, 27 Apr 2008 02:53:28 +0000
+
+xcircuit (3.6.78.dfsg-1) unstable; urgency=low
+
+ * New upstream release.
+ - Works correctly in amd64 (Closes: #229955).
+ - Drop python in favour of tcl support (Closes: #380989, #226233).
+ * New maintainer (Closes: #401609).
+ * Migrated from cdbs to debhelper.
+ * Repackaged original sources due to licensing problems of the asg module.
+ * Added extra menu entry for Apps/Technical (Closes: #128764)
+
+ -- Margarita Manterola <marga@debian.org> Wed, 6 Dec 2006 11:11:48 -0300
+
+xcircuit (3.6.24-1) unstable; urgency=low
+
+ * QA Upload
+ * New Upstream Version (Closes: #266080, #262321)
+ * Update debian/copyright
+ * debian/{menu, install}:
+ + install pixmaps to /usr/share/pixmaps/xcircuit/
+ * Conforms with new Standards version 3.7.2
+
+ -- Michael Ablassmeier <abi@debian.org> Mon, 22 May 2006 10:08:25 +0200
+
+xcircuit (3.1.19-2) unstable; urgency=low
+
+ * QA Group upload orphaning this package
+ * debian/changelog: removed obsolete crap from the bottom
+ * debian/menu: quoted the unquoted
+ * Updated config.{sub,guess}
+
+ -- Andrew Pollock <apollock@debian.org> Sun, 9 Apr 2006 14:52:08 -0700
+
+xcircuit (3.1.19-1.1) unstable; urgency=low
+
+ * Non-maintainer upload.
+ * Remove Build-Dependency on xlibs-dev (Closes: #346798).
+ * Credit and Big Thanks to Justin Pryzby <justinpryzby@users.sourceforge.net>
+ for the patch and testing.
+
+ -- Amaya Rodrigo Sastre <amaya@debian.org> Sat, 21 Jan 2006 18:07:15 +0100
+
+xcircuit (3.1.19-1) unstable; urgency=low
+
+ * New upstream release.
+
+ -- David Z Maze <dmaze@debian.org> Sun, 24 Aug 2003 09:08:10 -0400
+
+xcircuit (3.1.18-1) unstable; urgency=low
+
+ * New upstream release.
+ * Standards-Version 3.6.0 (no changes).
+ * Build vs. Python 2.3.
+
+ -- David Z Maze <dmaze@debian.org> Sat, 9 Aug 2003 10:59:26 -0400
+
+xcircuit (3.1.15-1) unstable; urgency=low
+
+ * New upstream release.
+ * Migrate from CBS to cdbs. Thanks to Colin Walters for creating the
+ infrastructure, and for giving tips on setting up debian/rules.
+
+ -- David Z Maze <dmaze@debian.org> Thu, 29 May 2003 14:44:08 -0400
+
+xcircuit (3.1.14-1) unstable; urgency=low
+
+ * New upstream release.
+ * Update to CBS 1.59.
+ * Standards-Version 3.5.10.0 (no changes).
+
+ -- David Z Maze <dmaze@debian.org> Sun, 18 May 2003 21:00:19 -0400
+
+xcircuit (3.1.12-1) unstable; urgency=low
+
+ * New upstream release.
+ * Update to CBS 1.57.
+ * Should build from source (not tripping over internal gcc errors)
+ on hppa. (Closes: #189583)
+
+ -- David Z Maze <dmaze@debian.org> Mon, 21 Apr 2003 15:26:08 -0400
+
+xcircuit (3.1.10-1) unstable; urgency=low
+
+ * New upstream release.
+ * Update to CBS 1.56.
+ * Standards-Version 3.5.9.0 (no changes).
+
+ -- David Z Maze <dmaze@debian.org> Sun, 13 Apr 2003 13:57:35 -0400
+
+xcircuit (3.0rev8-1) unstable; urgency=low
+
+ * New upstream release.
+ * Update to CBS 1.50.
+
+ -- David Z Maze <dmaze@debian.org> Sun, 19 Jan 2003 10:57:32 -0500
+
+xcircuit (3.0rev7-1) unstable; urgency=low
+
+ * New upstream release.
+ * Update to CBS 1.48.
+
+ -- David Z Maze <dmaze@debian.org> Wed, 18 Dec 2002 23:58:36 -0500
+
+xcircuit (3.0rev5-2) unstable; urgency=low
+
+ * Use Colin's Build System. This includes finally switching the package
+ to using debhelper.
+
+ -- David Z Maze <dmaze@debian.org> Sat, 7 Dec 2002 11:47:30 -0500
+
+xcircuit (3.0rev5-1) unstable; urgency=low
+
+ * New upstream release.
+ * Updated to standards-version 3.5.8.0 (no changes).
+
+ -- David Z Maze <dmaze@debian.org> Fri, 6 Dec 2002 23:35:31 -0500
+
+xcircuit (3.0rev4-1) unstable; urgency=low
+
+ * New upstream release. This includes a fix to a critical bug (though
+ with a goto rather than a continue). (Closes: #166509)
+ * Switch to using the default version of Python, rather than forcing
+ python2.1.
+ * No longer manage a /usr/doc link. (These things are much easier when
+ you use debhelper. :-)
+
+ -- David Z Maze <dmaze@debian.org> Sat, 23 Nov 2002 10:24:39 -0500
+
+xcircuit (2.5.5rev0-1) unstable; urgency=low
+
+ * New upstream release.
+
+ -- David Z Maze <dmaze@debian.org> Wed, 29 May 2002 23:30:23 -0400
+
+xcircuit (2.5.3rev0-1) unstable; urgency=low
+
+ * New upstream release.
+
+ -- David Z Maze <dmaze@debian.org> Sat, 5 Jan 2002 19:37:48 -0500
+
+xcircuit (2.5.2rev1-1) unstable; urgency=low
+
+ * New upstream release.
+ * Add a build dependency on m4; it's needed to generate the man page.
+
+ -- David Z Maze <dmaze@debian.org> Sun, 30 Dec 2001 18:39:56 -0500
+
+xcircuit (2.5.2rev0-1) unstable; urgency=low
+
+ * New upstream release.
+
+ -- David Z Maze <dmaze@debian.org> Mon, 24 Dec 2001 11:49:33 -0500
+
+xcircuit (2.5.1rev1-1) unstable; urgency=low
+
+ * New upstream release. License changed from Artistic to GPL.
+
+ -- David Z Maze <dmaze@debian.org> Sat, 15 Dec 2001 10:11:38 -0500
+
+xcircuit (2.4.0rev2-1) unstable; urgency=low
+
+ * New upstream release. Includes correct location for tutorial in
+ xcircuit.1 (Closes: #114752).
+ * Added an icon to the menu item.
+ * Updated debian/rules to deal correctly with auto*.
+ * Use Python 2.1.
+
+ -- David Z Maze <dmaze@debian.org> Thu, 22 Nov 2001 09:06:56 -0500
+
+xcircuit (2.3.3-1) unstable; urgency=low
+
+ * New upstream release.
+ * Updated to Standards-Version 3.5.5.0 (no changes).
+
+ -- David Z Maze <dmaze@debian.org> Wed, 11 Jul 2001 17:18:54 -0400
+
+xcircuit (2.3-1) unstable; urgency=low
+
+ * New upstream release.
+ * Let ld bring in Python's dependencies automatically; don't explicitly
+ build-depend on e.g. libdb2-dev which isn't directly used by xcircuit.
+
+ -- David Z Maze <dmaze@debian.org> Sat, 26 May 2001 08:48:03 -0400
+
+xcircuit (2.2.2-3) unstable; urgency=low
+
+ * Move the X resource file to /etc/X11/app-defaults. Hopefully this
+ addresses bug #94996.
+ * Updated to standards-version 3.5.3.0.
+
+ -- David Z Maze <dmaze@debian.org> Mon, 23 Apr 2001 21:58:17 -0400
+
+xcircuit (2.2.2-2) unstable; urgency=low
+
+ * Added a build dependency on libdb2-dev. (Closes: #90259) Looking
+ at the things xcircuit links against, this should be the only missing
+ build dependency.
+
+ * I don't think xcircuit falls into any of the categories for "extra"
+ packages in policy (sec. 2.2), so upgrade priority to "optional".
+
+ -- David Z Maze <dmaze@debian.org> Mon, 19 Mar 2001 21:40:35 -0500
+
+xcircuit (2.2.2-1) unstable; urgency=low
+
+ * New upstream version. User-defined keybindings (introduced in
+ 2.2.1) can now include mouse buttons, and the help screen reflects
+ user setup. Improved Python interface. Fixed a PostScript bug.
+
+ -- David Z Maze <dmaze@debian.org> Tue, 13 Mar 2001 23:51:47 -0500
+
+xcircuit (2.2.1-2) unstable; urgency=low
+
+ * Build-depend on python2-dev. (Closes: #85759)
+
+ -- David Z Maze <dmaze@mit.edu> Mon, 12 Feb 2001 22:51:17 -0500
+
+xcircuit (2.2.1-1) unstable; urgency=low
+
+ * New upstream version. Major change: some internal use of Python as
+ a start on replacing the configuration language.
+ * Updated to Standards-Version 3.5.0.0.
+ * Move the library files to /usr/share/xcircuit, since they're
+ platform-independent and we don't worry about multiple versions.
+ * Move the X resources file to /etc/X11/Xresources, as per policy.
+ * Strip the xcircuit binary enough to appease lintian.
+
+ -- David Z Maze <dmaze@mit.edu> Tue, 6 Feb 2001 22:45:07 -0500
+
+xcircuit (2.2.0-1) unstable; urgency=low
+
+ * New maintainer. (Closes: #80358)
+ * New upstream release. (Closes: #60608, #74043)
+ * Updated to Standards-Version 3.2.1.0. Moved stuff into /usr/share
+ as appropriate, and added correct language in postinst/prerm to
+ deal with /usr/doc link. Moved update-menus call to postrm.
+ * Move the binary from /usr/X11R6/bin to /usr/bin.
+ * Install app-defaults file correctly in /etc/X11/app-defaults.
+ (Closes: #80854)
+ * Copy all of the upstream README files to /usr/share/doc/xcircuit.
+ * Now Lintian-clean. Yay! (Closes: #73019)
+ * Permissions on everything look correct now. (Closes: #70822)
+ * Added "Vector" hint to menu entry. (Closes: #80056)
+ * Remove menu entry for xschema. (Closes: #79054) Also remove mention
+ of xschema from description.
+
+ -- David Z Maze <dmaze@mit.edu> Tue, 16 Jan 2001 20:27:46 -0500
+
+xcircuit (2.0b1-2) frozen unstable; urgency=low
+
+ * Applied Ben Collins' patch for app defaults. closes: #59571
+
+ -- Dale Scheetz <dwarf@polaris.net> Sat, 4 Mar 2000 19:19:49 -0500
+
+xcircuit (2.0b1-1) unstable; urgency=low
+
+ * new upstream source
+ * Patched install process to put bins in X11R6/bin instead of
+ * bin. closes: #49915
+ * Commented out default apps install in Imakefile, letting the
+ * rules file install it properly. closes: #50573
+
+ -- Dale Scheetz <dwarf@polaris.net> Sat, 1 Jan 2000 16:21:46 -0500
+
+xcircuit (2.0a11-1) unstable; urgency=low
+
+ * new upstream source:
+ * closes: #34966, #37019, #41834
+
+ -- Dale Scheetz <dwarf@polaris.net> Tue, 9 Nov 1999 18:33:45 -0500
+
+xcircuit (2.0a6-3) frozen unstable; urgency=high
+
+ * retarget package for frozen to propogate previous fix into stable
+
+ -- Dale Scheetz <dwarf@polaris.net> Wed, 13 Jan 1999 19:35:29 -0500
+
+xcircuit (2.0a6-2) unstable; urgency=low
+
+ * recompiled with glibc 2.0.7u-7 to follow __register_frame_info fix
+
+ -- Dale Scheetz <dwarf@polaris.net> Wed, 2 Dec 1998 16:21:43 -0500
+
+xcircuit (2.0a6-1) unstable; urgency=low
+
+ * new upstream source
+ * includes fix for "segfault when breaking a line": fixes 21727
+ * added menu entry for Xschema for access to the new schematic code.
+
+ -- Dale Scheetz <dwarf@polaris.net> Mon, 16 Nov 1998 10:36:44 -0500
+
+xcircuit (1.7-5) unstable; urgency=low
+
+ * recompiled against correct libc6 shlibs file for proper dependencies.
+
+ -- Dale Scheetz <dwarf@polaris.net> Sat, 3 Oct 1998 16:05:28 -0400
+
+xcircuit (1.7-4) unstable; urgency=low
+
+ * applied Paul Slootman's patch repairing the return value of
+ * _XwMapFromHex to unsigned long, so it can cast to a pointer
+ * on the alpha. Also replaced references of <strings.h> with the
+ * more correct reference to <string.h>: fixes 22650
+ * Removed XCircuit.ad from the Imakefile, leaving the installation
+ * of this file to the rules file: fixes 24856
+
+ -- Dale Scheetz <dwarf@polaris.net> Sun, 27 Sep 1998 14:45:46 -0400
+
+xcircuit (1.7-3) frozen unstable; urgency=low
+
+ * rules clean target now removes substvars* and files*: fixes 21216
+
+ -- Dale Scheetz <dwarf@polaris.net> Sat, 18 Apr 1998 22:03:50 -0400
+
+xcircuit (1.7-2) frozen unstable; urgency=low
+
+ * Added XCircuit.ad for proper color defaults: fixes 20142 and 20933
+ * Fixed clean target in rules for clean build: fixes 20970
+
+ -- Dale Scheetz <dwarf@polaris.net> Sat, 11 Apr 1998 12:29:46 -0400
+
+xcircuit (1.7-1) unstable; urgency=low
+
+ * New package from upstream sources
+
+ -- Dale Scheetz <dwarf@polaris.net> Sat, 7 Mar 1998 20:55:26 -0500
diff --git a/debian/clean b/debian/clean
new file mode 100644
index 0000000..5c5a1dc
--- /dev/null
+++ b/debian/clean
@@ -0,0 +1,5 @@
+config.guess
+config.sub
+config.log
+lib/tcl/xcircuit.tcl
+
diff --git a/debian/compat b/debian/compat
new file mode 100644
index 0000000..ec63514
--- /dev/null
+++ b/debian/compat
@@ -0,0 +1 @@
+9
diff --git a/debian/control b/debian/control
new file mode 100644
index 0000000..ea3bf6b
--- /dev/null
+++ b/debian/control
@@ -0,0 +1,23 @@
+Source: xcircuit
+Section: electronics
+Priority: extra
+Maintainer: Margarita Manterola <marga@debian.org>
+Uploaders: Roland Stigge <stigge@antcom.de>
+Build-Depends: libx11-dev, libxpm-dev, libxt-dev, x11proto-core-dev, m4, debhelper (>= 9), tcl-dev (>= 8.6.0+6), tk-dev (>= 8.6.0+6), autotools-dev, dpkg-dev (>= 1.16.0), chrpath
+Standards-Version: 3.9.6
+Homepage: http://opencircuitdesign.com/xcircuit/
+
+Package: xcircuit
+Section: electronics
+Priority: optional
+Architecture: any
+Depends: wish, ${shlibs:Depends}, ${misc:Depends}
+Description: Draw circuit schematics or almost anything
+ xcircuit is a generic drawing program tailored for making circuit
+ diagrams.
+ .
+ The graphical interface attempts to maintain consistency between
+ X11 window rendering and the pure PostScript output.
+ .
+ xcircuit is mouse, menu and keyboard driven. The emphasis is on
+ single character macros.
diff --git a/debian/copyright b/debian/copyright
new file mode 100644
index 0000000..9a0a9c9
--- /dev/null
+++ b/debian/copyright
@@ -0,0 +1,120 @@
+Format-Specification: http://wiki.debian.org/Proposals/CopyrightFormat
+Upstream-Author: R. Timothy Edwards.
+Packaged-By: Margarita Manterola <marga@debian.org>
+Original-Source-Location: http://opencircuitdesign.com/xcircuit/
+
+Files: *
+Copyright:
+ Copyright 2002-2003, Tim Edwards, Johns Hopkins University.
+ Copyright 2004-2005, Tim Edwards, MultiGiG, Inc.
+License: GPL-2+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+ .
+ On Debian Systems, a copy of this license agreement can be found in:
+ /usr/share/common-licenses/GPL
+
+Files: debian/*
+Copyright:
+ Copyright 2006-2008, Margarita Manterola <marga@debian.org>
+ Copyright 2006, Michael Ablassmeier <abi@debian.org>
+ Copyright 2006, Andrew Pollock <apollock@debian.org>
+ Copyright 2006, Amaya Rodrigo Sastre <amaya@debian.org> and
+ Justin Pryzby <justinpryzby@users.sourceforge.net>
+ Copyright 2001-2003, David Z Maze <dmaze@debian.org>
+ Copyright 1998-2000, Dale Scheetz <dwarf@polaris.net>
+License: GPL-2+
+ Although most maintainers didn't specify it explicitly, it is assumed that
+ the work done for the package was licensed with the same license as the
+ rest of the code.
+ .
+ On Debian Systems, a copy of this license agreement can be found in:
+ /usr/share/common-licenses/GPL
+
+Files: flate.c, compression.c, compression.h
+Copyright: Copyright 2003-2004, Sergei Gerasenko.
+License: GPL-2
+ They were taken from the SourceForge project "acroformtool", which is
+ licensed under the GNU General Public License.
+
+Files: netlist.c
+Copyright:
+ Copyright 1998 Chow Seong Hwai, Leeds University, U.K.
+ Copyright 2004 Tim Edwards, Johns Hopkins University, MultiGiG, Inc.,
+ and Open Circuit Design, Inc.
+ Copyright 2005 Tim Edwards, MultiGiG, Inc.
+License: GPL-2+
+
+Files: lib/tcl/mousehint.tcl
+Copyright: Copyright 2006, James Vernon March
+License: GPL-2+
+
+Files: lib/tcl/panzoom.tcl
+Copyright: Copyright 2003, Ed Casas
+License: GPL-2+
+
+Files: lib/tcl/tkcon.tcl
+Copyright: Copyright 1995-2001, Jeffrey Hobbs
+License: GPL-2+
+
+Files: spiceparser/*
+Copyright: Copyright 2003, Conrad Ziesler
+License: GPL-2+
+
+Files: spiceparser/xcircspice.c
+Copyright:
+ Copyright 2003, Conrad Ziesler.
+ Copyright 2004-2008, Tim Edwards.
+License: GPL-2+
+
+Files: Xw/*
+Copyright:
+ 1988 by Hewlett-Packard Company
+ 1988 by the Massachusetts Institute of Technology
+License: other
+ Permission to use, copy, modify, and distribute this software
+ and its documentation for any purpose and without fee is hereby
+ granted, provided that the above copyright notice appear in all
+ copies and that both that copyright notice and this permission
+ notice appear in supporting documentation, and that the names of
+ Hewlett-Packard, Digital or M.I.T. not be used in advertising or
+ publicity pertaining to distribution of the software without
+ written prior permission.
+ .
+ DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+ DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
+ ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+ SOFTWARE.
+ .
+ This is included as part "X widgets" project.
+
+Files: Xw/Display.c, Xw/MapEvents.c, Xw/SourceStr.c, Xw/sub.c, Xw/TextEdit.c
+Copyright:
+ Copyright 1988 by Hewlett-Packard Company
+ Copyright 1987, 1988 by Digital Equipment Corporation, Maynard,
+ Massachusetts, and the Massachusetts Institute of Technology,
+ Cambridge, Massachusetts
+License: other
+ Permission to use, copy, modify, and distribute this software
+ and its documentation for any purpose and without fee is hereby
+ granted, provided that the above copyright notice appear in all
+ copies and that both that copyright notice and this permission
+ notice appear in supporting documentation, and that the names of
+ Hewlett-Packard, Digital or M.I.T. not be used in advertising or
+ publicity pertaining to distribution of the software without
+ written prior permission.
+ .
+ DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+ DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
+ ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+ SOFTWARE.
+ .
+ This is included as part "X widgets" project.
diff --git a/debian/docs b/debian/docs
new file mode 100644
index 0000000..0b5faeb
--- /dev/null
+++ b/debian/docs
@@ -0,0 +1,4 @@
+README
+README.ISOLatin2
+README.Tcl
+README.notes
diff --git a/debian/examples b/debian/examples
new file mode 100644
index 0000000..ee75652
--- /dev/null
+++ b/debian/examples
@@ -0,0 +1,4 @@
+examples/*.lgf
+examples/*.lps
+examples/*.ps
+examples/*.py
diff --git a/debian/install b/debian/install
new file mode 100644
index 0000000..44f4da3
--- /dev/null
+++ b/debian/install
@@ -0,0 +1,2 @@
+debian/xcircuit-icon.xpm usr/share/pixmaps/xcircuit/
+tutorial usr/share/doc/xcircuit/
diff --git a/debian/menu b/debian/menu
new file mode 100644
index 0000000..3606e9a
--- /dev/null
+++ b/debian/menu
@@ -0,0 +1,12 @@
+?package(xcircuit):needs="X11" \
+ section="Applications/Graphics" \
+ title="Xcircuit" \
+ command="/usr/bin/xcircuit" \
+ hints="Vector" \
+ icon="/usr/share/pixmaps/xcircuit/xcircuit-icon.xpm"
+?package(xcircuit):needs="X11" \
+ section="Applications/Science/Electronics" \
+ title="Xcircuit" \
+ command="/usr/bin/xcircuit" \
+ hints="CAD,Electric" \
+ icon="/usr/share/pixmaps/xcircuit/xcircuit-icon.xpm"
diff --git a/debian/patches/01_remove_asg.patch b/debian/patches/01_remove_asg.patch
new file mode 100644
index 0000000..a70ae53
--- /dev/null
+++ b/debian/patches/01_remove_asg.patch
@@ -0,0 +1,59 @@
+Description: Remove ASG from build
+Author: Margarita Manterola <marga@debian.org>
+
+--- xcircuit-3.8.78.dfsg.orig/Makefile.in
++++ xcircuit-3.8.78.dfsg/Makefile.in
+@@ -849,7 +849,6 @@ install-tcl: xcircexec$(EXEEXT) lib/$(IN
+
+ clean:
+ (cd ./Xw; $(RM) *.o *.a *.bak core)
+- (cd ./asg; $(MAKE) clean)
+ (cd ./spiceparser; $(MAKE) clean)
+ $(RM) lib/$(INTERP_PATH)/$(WRAPPER_OBJ) lib/$(INTERP_PATH)/$(WRAPPER_SH)
+ $(RM) lib/$(INTERP_PATH)/$(WRAPPER_INIT)
+@@ -859,7 +858,6 @@ clean:
+
+ distclean:
+ (cd ./Xw; $(RM) *.o *.a *.bak Makefile core)
+- (cd ./asg; $(MAKE) clean ; $(RM) Makefile)
+ (cd ./spiceparser; $(MAKE) clean ; $(RM) Makefile)
+ $(RM) xcircuit *.o *.bak core
+ $(RM) lib/$(INTERP_PATH)/$(WRAPPER_OBJ) lib/$(INTERP_PATH)/$(WRAPPER_SH)
+@@ -879,7 +877,6 @@ dist:
+
+ quiteclean:
+ (cd ./Xw; $(RM) *.o *.a *.bak Makefile.in Makefile core)
+- (cd ./asg; $(MAKE) clean ; $(RM) Makefile.in Makefile)
+ (cd ./spiceparser; $(MAKE) clean ; $(RM) Makefile.in Makefile)
+ $(RM) xcircuit *.o *.bak core
+ $(RM) lib/$(INTERP_PATH)/$(WRAPPER_OBJ) lib/$(INTERP_PATH)/$(WRAPPER_SH)
+--- xcircuit-3.8.78.dfsg.orig/configure
++++ xcircuit-3.8.78.dfsg/configure
+@@ -7208,8 +7208,8 @@ if test "${enable_asg+set}" = set; then
+
+ $as_echo "#define CONFIGURED 1" >>confdefs.h
+
+- SUBDIRS="asg spiceparser"
+- SUBLIB="asg/libasg.a spiceparser/libspiceparser.a"
++ SUBDIRS="spiceparser"
++ SUBLIB="spiceparser/libspiceparser.a"
+
+ fi
+
+@@ -7571,7 +7571,7 @@ fi
+
+
+
+-ac_config_files="$ac_config_files Makefile Xw/Makefile asg/Makefile spiceparser/Makefile"
++ac_config_files="$ac_config_files Makefile Xw/Makefile spiceparser/Makefile"
+
+ cat >confcache <<\_ACEOF
+ # This file is a shell script that caches the results of configure
+@@ -8321,7 +8321,6 @@ do
+ "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
+ "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+ "Xw/Makefile") CONFIG_FILES="$CONFIG_FILES Xw/Makefile" ;;
+- "asg/Makefile") CONFIG_FILES="$CONFIG_FILES asg/Makefile" ;;
+ "spiceparser/Makefile") CONFIG_FILES="$CONFIG_FILES spiceparser/Makefile" ;;
+
+ *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
diff --git a/debian/patches/03_fix_lib_files.patch b/debian/patches/03_fix_lib_files.patch
new file mode 100644
index 0000000..191c4cc
--- /dev/null
+++ b/debian/patches/03_fix_lib_files.patch
@@ -0,0 +1,183 @@
+Description: Fix for FHS compliant file locations
+Author: Margarita Manterola <marga@debian.org>
+
+--- xcircuit-3.8.78.dfsg.orig/Makefile.am
++++ xcircuit-3.8.78.dfsg/Makefile.am
+@@ -65,6 +65,9 @@ tmpdir = /tmp
+ appdefaultsdir = $(libdir)/$(PACKAGE)-$(VERSION)/app-defaults
+ appmandir = $(libdir)/$(PACKAGE)-$(VERSION)/man
+
++# Directory for binary library files
++exelibdir = $(libdir)/$(PACKAGE)-$(VERSION)
++
+ PATHNAMES = -DPROG_VERSION=$(VERSION) \
+ -DPROG_REVISION=$(REVISION) \
+ -DCAD_DIR=\"$(libdir)\" \
+@@ -146,6 +149,7 @@ CONSOLE_SCRIPT = console.tcl
+
+ lib/$(INTERP_PATH)/$(WRAPPER_SH): lib/$(INTERP_PATH)/$(WRAPPER_SH).in
+ sed -e '/XCLIBDIR/s#XCLIBDIR#$(librarydir)#' \
++ -e '/XCEXELIBDIR/s#XCEXELIBDIR#$(exelibdir)#' \
+ -e '/WRAPPER_INIT/s/WRAPPER_INIT/$(WRAPPER_INIT)/' \
+ -e '/CONSOLE_SCRIPT/s/CONSOLE_SCRIPT/$(CONSOLE_SCRIPT)/' \
+ -e '/CONSOLE/s/CONSOLE/$(CONSOLE)/' \
+@@ -157,7 +161,7 @@ lib/$(INTERP_PATH)/$(WRAPPER_SH): lib/$(
+ chmod 0755 $@
+
+ lib/$(INTERP_PATH)/$(WRAPPER_INIT): lib/$(INTERP_PATH)/$(WRAPPER_INIT).in
+- sed -e '/LIBDIR/s#LIBDIR#$(librarydir)#' \
++ sed -e '/LIBDIR/s#LIBDIR#$(exelibdir)#' \
+ -e '/SCRIPTSDIR/s#SCRIPTSDIR#$(scriptsdir)#' \
+ lib/$(INTERP_PATH)/$(WRAPPER_INIT).in > $@
+ chmod 0755 $@
+@@ -211,19 +215,20 @@ install-tcl: xcircexec$(EXEEXT) lib/$(IN
+ @echo "Installing standard XCircuit library files"
+ $(MAKE) $(AM_MAKEFLAGS) install-data-local
+ @echo "Installing Tcl files"
+- $(mkinstalldirs) $(DESTDIR)$(librarydir)
++ $(mkinstalldirs) $(DESTDIR)$(exelibdir)
+ $(mkinstalldirs) $(DESTDIR)$(scriptsdir)
+- ( cd lib/$(INTERP_PATH) ; for i in $(WRAPPER_OBJ) *.tcl ; do \
++ ( cd lib/$(INTERP_PATH) ; for i in *.tcl ; do \
+ $(INSTALL_DATA) $$i $(DESTDIR)$(scriptsdir); \
+- done )
+- $(INSTALL_DATA) xcircexec$(EXEEXT) $(DESTDIR)$(librarydir)
++ done; \
++ $(INSTALL_DATA) $(WRAPPER_OBJ) $(DESTDIR)$(exelibdir) )
++ $(INSTALL_DATA) xcircexec$(EXEEXT) $(DESTDIR)$(exelibdir)
+ chmod 0755 $(DESTDIR)$(librarydir)/$(CONSOLE)
+ chmod 0755 $(DESTDIR)$(librarydir)/$(CONSOLE_SCRIPT)
+- chmod 0755 $(DESTDIR)$(librarydir)/$(WRAPPER_OBJ)
+- chmod 0755 $(DESTDIR)$(librarydir)/xcircexec$(EXEEXT)
++ chmod 0755 $(DESTDIR)$(exelibdir)/$(WRAPPER_OBJ)
++ chmod 0755 $(DESTDIR)$(exelibdir)/xcircexec$(EXEEXT)
+
+ if test "${SHDLIB_EXT}" != ".so"; then \
+- ( cd $(DESTDIR)$(librarydir); \
++ ( cd $(DESTDIR)$(exelibdir); \
+ $(RM) $(WRAPPER_SO) ; \
+ ln -s $(WRAPPER_OBJ) $(WRAPPER_SO) ) ; \
+ fi
+--- xcircuit-3.8.78.dfsg.orig/Makefile.in
++++ xcircuit-3.8.78.dfsg/Makefile.in
+@@ -264,9 +264,6 @@ ac_aux_dir = dist
+ # Temporary directory (if not overridden by environment variable TMPDIR)
+ tmpdir = /tmp
+
+-# Directories for app-defaults file and manual page
+-appdefaultsdir = $(libdir)/$(PACKAGE)-$(VERSION)/app-defaults
+-appmandir = $(libdir)/$(PACKAGE)-$(VERSION)/man
+ PATHNAMES = -DPROG_VERSION=$(VERSION) \
+ -DPROG_REVISION=$(REVISION) \
+ -DCAD_DIR=\"$(libdir)\" \
+@@ -297,6 +294,13 @@ M4_DEFS = @M4_DEFS@ @DEFS@
+ man_MANS = lib/xcircuit.1
+ INCLUDES = -IXw ${INC_SPECS}
+
++# Directories for app-defaults file and manual page
++appdefaultsdir = $(libdir)/$(PACKAGE)-$(VERSION)/app-defaults
++appmandir = $(libdir)/$(PACKAGE)-$(VERSION)/man
++
++# Directory for binary library files
++exelibdir = $(libdir)/$(PACKAGE)-$(VERSION)
++
+ # Library directory and files
+ librarydir = $(libdir)/$(PACKAGE)-$(VERSION)
+ scriptsdir = $(libdir)/$(PACKAGE)-$(VERSION)
+@@ -755,6 +759,7 @@ xtfuncs.c: menudep.h
+
+ lib/$(INTERP_PATH)/$(WRAPPER_SH): lib/$(INTERP_PATH)/$(WRAPPER_SH).in
+ sed -e '/XCLIBDIR/s#XCLIBDIR#$(librarydir)#' \
++ -e '/XCEXELIBDIR/s#XCEXELIBDIR#$(exelibdir)#' \
+ -e '/WRAPPER_INIT/s/WRAPPER_INIT/$(WRAPPER_INIT)/' \
+ -e '/CONSOLE_SCRIPT/s/CONSOLE_SCRIPT/$(CONSOLE_SCRIPT)/' \
+ -e '/CONSOLE/s/CONSOLE/$(CONSOLE)/' \
+@@ -766,7 +771,7 @@ lib/$(INTERP_PATH)/$(WRAPPER_SH): lib/$(
+ chmod 0755 $@
+
+ lib/$(INTERP_PATH)/$(WRAPPER_INIT): lib/$(INTERP_PATH)/$(WRAPPER_INIT).in
+- sed -e '/LIBDIR/s#LIBDIR#$(librarydir)#' \
++ sed -e '/LIBDIR/s#LIBDIR#$(exelibdir)#' \
+ -e '/SCRIPTSDIR/s#SCRIPTSDIR#$(scriptsdir)#' \
+ lib/$(INTERP_PATH)/$(WRAPPER_INIT).in > $@
+ chmod 0755 $@
+@@ -820,19 +825,20 @@ install-tcl: xcircexec$(EXEEXT) lib/$(IN
+ @echo "Installing standard XCircuit library files"
+ $(MAKE) $(AM_MAKEFLAGS) install-data-local
+ @echo "Installing Tcl files"
+- $(mkinstalldirs) $(DESTDIR)$(librarydir)
++ $(mkinstalldirs) $(DESTDIR)$(exelibdir)
+ $(mkinstalldirs) $(DESTDIR)$(scriptsdir)
+- ( cd lib/$(INTERP_PATH) ; for i in $(WRAPPER_OBJ) *.tcl ; do \
++ ( cd lib/$(INTERP_PATH) ; for i in *.tcl ; do \
+ $(INSTALL_DATA) $$i $(DESTDIR)$(scriptsdir); \
+- done )
+- $(INSTALL_DATA) xcircexec$(EXEEXT) $(DESTDIR)$(librarydir)
++ done; \
++ $(INSTALL_DATA) $(WRAPPER_OBJ) $(DESTDIR)$(exelibdir) )
++ $(INSTALL_DATA) xcircexec$(EXEEXT) $(DESTDIR)$(exelibdir)
+ chmod 0755 $(DESTDIR)$(librarydir)/$(CONSOLE)
+ chmod 0755 $(DESTDIR)$(librarydir)/$(CONSOLE_SCRIPT)
+- chmod 0755 $(DESTDIR)$(librarydir)/$(WRAPPER_OBJ)
+- chmod 0755 $(DESTDIR)$(librarydir)/xcircexec$(EXEEXT)
++ chmod 0755 $(DESTDIR)$(exelibdir)/$(WRAPPER_OBJ)
++ chmod 0755 $(DESTDIR)$(exelibdir)/xcircexec$(EXEEXT)
+
+ if test "${SHDLIB_EXT}" != ".so"; then \
+- ( cd $(DESTDIR)$(librarydir); \
++ ( cd $(DESTDIR)$(exelibdir); \
+ $(RM) $(WRAPPER_SO) ; \
+ ln -s $(WRAPPER_OBJ) $(WRAPPER_SO) ) ; \
+ fi
+--- xcircuit-3.8.78.dfsg.orig/lib/tcl/xcircuit.sh.in
++++ xcircuit-3.8.78.dfsg/lib/tcl/xcircuit.sh.in
+@@ -6,7 +6,9 @@
+ #
+
+ loclibdir=${XCIRCUIT_LIB_DIR:=XCLIBDIR}
++exelibdir=${XCIRCUIT_LIB_DIR:=XCEXELIBDIR}
+ export XCIRCUIT_LIB_DIR
++export XCIRCUIT_EXELIB_DIR
+ XCIRCUIT_WISH=WISH_EXE
+ export XCIRCUIT_WISH
+
+@@ -53,6 +55,6 @@ else
+ # *only* needed when running without the console; the console itself is
+ # capable of sourcing the startup script.
+ #
+- exec ${loclibdir}/xcircexec -- $@
++ exec ${exelibdir}/xcircexec -- $@
+
+ fi
+--- xcircuit-3.8.78.dfsg.orig/lib/tcl/xcircuit.tcl.in
++++ xcircuit-3.8.78.dfsg/lib/tcl/xcircuit.tcl.in
+@@ -12,6 +12,11 @@ if {$envlibdir == {}} {
+ }
+ unset envlibdir
+
++set exelibdir [array get env "XCIRCUIT_EXELIB_DIR"]
++if {$exelibdir == {}} {
++ set exelibdir LIBDIR
++}
++
+ set envsrcdir [array get env "XCIRCUIT_SRC_DIR"]
+ if {$envsrcdir != {}} {
+ set path [lindex $envsrcdir 1]
+@@ -28,13 +33,14 @@ if {[string compare $tcl_platform(platfo
+ }
+
+ set tcllibdir $path
+-if {![file exists ${tcllibdir}/xcircuit$libext]} {
++
++if {![file exists ${exelibdir}/xcircuit$libext]} {
+ set tcllibdir ${path}/tcl
+ }
+-if {![file exists ${tcllibdir}/xcircuit$libext]} {
++if {![file exists ${exelibdir}/xcircuit$libext]} {
+ puts stderr "Error: Cannot find file xcircuit$libext"
+ }
+-load ${tcllibdir}/xcircuit$libext
++load ${exelibdir}/xcircuit$libext
+
+ package require Xcircuit
+
diff --git a/debian/patches/04_fix_manpage.patch b/debian/patches/04_fix_manpage.patch
new file mode 100644
index 0000000..4ed05c4
--- /dev/null
+++ b/debian/patches/04_fix_manpage.patch
@@ -0,0 +1,179 @@
+Description: Manpage fix
+ This patch fixes a format problem in a table in the manpage
+Author: Roland Stigge <stigge@antcom.de>
+
+--- xcircuit-3.8.78.dfsg.orig/lib/xcircuit.1.in
++++ xcircuit-3.8.78.dfsg/lib/xcircuit.1.in
+@@ -1042,89 +1042,89 @@ follows, with their default values given
+ .br
+ .sp
+
+- Function name Function performed Default key binding
+- ---------------------------------------------------------------------
+- "Page", change page, Number keys 1-9 and 0
+- "Justify", change text justification, Keypad keys 1-9
+- "Superscript", set text superscript, Keypad +
+- "Subscript", set text subscript, Keypad -
+- "Normalscript", cancel sub/superscript, Keypad Enter
+- "Nextfont", change to next font, Alt-f
+- "Boldfont", change to bold font, Alt-b
+- "Italicfont", change to italic font, Alt-i
+- "Normalfont", cancel italic/bold, Alt-n
+- "Underline", generate underline, Alt-u
+- "Overline", generate overline, Alt-o
+- "ISO Encoding", change to ISO encoding, Alt-e
+- "Return", embedded return character, Alt-Enter
+- "Halfspace", embedded half-space, Alt-h
+- "Quarterspace", embedded quarter-space, Alt-q
+- "Special", special character, Alt-c
+- "Parameter", embedded parameter, Alt-p
+- "Edit Break", break at point, x
+- "Edit Delete", delete point, d, Delete
+- "Edit Insert", insert point, i, Insert
+- "Edit Next", go to next point, e
+- "Attach", attach line to object, A
+- "Next Library", go to next library, l
+- "Library Directory", library directory, L
+- "Library Move", arrange library objects, M
+- "Library Copy", get object in copy mode, c
+- "Library Edit", edit library name, E
+- "Library Delete", delete library object, D
+- "Library Duplicate", duplicate object, C
+- "Library Hide", hide library object, H
+- "Page Directory ", page directory, P
+- "Library Pop", return from library, <
+- "Help", generate help screen, h, ?
+- "Redraw", redraw the window, space
+- "View", fit page to window, v
+- "Zoom In", zoom in, Z
+- "Zoom Out", zoom out, z
+- "Pan", center pan, p
+- "Double Snap", increase snap space, +
+- "Halve Snap", decrease snap space, -
+- "Pan Left", pan left one-half page, Left arrow
+- "Pan Right", pan right one-half page, Right arrow
+- "Pan Up", pan up one-half page, Up arrow
+- "Pan Down", pan down one-half page, Down arrow
+- "Write", popup output window, W
+- "Rotate", Rotate, r,R,o,O
+- "Flip X", Flip horizontal, f
+- "Flip Y", Flip vertical, F
+- "Snap", Snap to grid, S
+- "Pop", Return from object edit, <
+- "Push", Edit object, >
+- "Delete", Delete element, d
+- "Select", Select element, Select
+- "Box", Create box, b
+- "Arc", Create arc, a
+- "Text", Create label, t
+- "Exchange", Exchange vertical order, X
+- "Copy", Copy element, c
+- "Join", Join into path, j
+- "Unjoin", Split path into elements, J
+- "Spline", Create spline, s
+- "Edit", Edit element, e
+- "Undelete", Undelete last deleted, u
+- "Select Save", Make object from selected, M,m
+- "Unselect", Unselect element, x
+- "Dashed", Set line style to dashed, |
+- "Dotted", Set line style to dotted, :
+- "Solid", Set line style to solid, _
+- "Prompt", Execute from command line, %
+- "Dot", Place dot at location, .
+- "Exit", Exit xcircuit Ctrl-Alt-q
+- "Netlist", Generate a netlist, Alt-q
+- "Swap", Swap schematic, symbol, /
+- "Pin Label", Create pin label, T
+- "Info Label", Create info label, I
+- "Connectivity", Show wire connectivity, Alt-w
+- "Sim", Generate sim netlist, Alt-s
+- "SPICE", Generate SPICE netlist, Alt-S
+- "PCB", Generate PCB netlist, Alt-p
+- "SPICE Flat" Generate flattened SPICE, Alt-f
+- ------------------------------------------------------------------
++ Function name Function performed Default key binding
++ ---------------------------------------------------------------------
++ "Page", change page, Number keys 1-9 and 0
++ "Justify", change text justification, Keypad keys 1-9
++ "Superscript", set text superscript, Keypad +
++ "Subscript", set text subscript, Keypad -
++ "Normalscript", cancel sub/superscript, Keypad Enter
++ "Nextfont", change to next font, Alt-f
++ "Boldfont", change to bold font, Alt-b
++ "Italicfont", change to italic font, Alt-i
++ "Normalfont", cancel italic/bold, Alt-n
++ "Underline", generate underline, Alt-u
++ "Overline", generate overline, Alt-o
++ "ISO Encoding", change to ISO encoding, Alt-e
++ "Return", embedded return character, Alt-Enter
++ "Halfspace", embedded half-space, Alt-h
++ "Quarterspace", embedded quarter-space, Alt-q
++ "Special", special character, Alt-c
++ "Parameter", embedded parameter, Alt-p
++ "Edit Break", break at point, x
++ "Edit Delete", delete point, d, Delete
++ "Edit Insert", insert point, i, Insert
++ "Edit Next", go to next point, e
++ "Attach", attach line to object, A
++ "Next Library", go to next library, l
++ "Library Directory", library directory, L
++ "Library Move", arrange library objects, M
++ "Library Copy", get object in copy mode, c
++ "Library Edit", edit library name, E
++ "Library Delete", delete library object, D
++ "Library Duplicate", duplicate object, C
++ "Library Hide", hide library object, H
++ "Page Directory ", page directory, P
++ "Library Pop", return from library, <
++ "Help", generate help screen, h, ?
++ "Redraw", redraw the window, space
++ "View", fit page to window, v
++ "Zoom In", zoom in, Z
++ "Zoom Out", zoom out, z
++ "Pan", center pan, p
++ "Double Snap", increase snap space, +
++ "Halve Snap", decrease snap space, -
++ "Pan Left", pan left one-half page, Left arrow
++ "Pan Right", pan right one-half page, Right arrow
++ "Pan Up", pan up one-half page, Up arrow
++ "Pan Down", pan down one-half page, Down arrow
++ "Write", popup output window, W
++ "Rotate", Rotate, r,R,o,O
++ "Flip X", Flip horizontal, f
++ "Flip Y", Flip vertical, F
++ "Snap", Snap to grid, S
++ "Pop", Return from object edit, <
++ "Push", Edit object, >
++ "Delete", Delete element, d
++ "Select", Select element, Select
++ "Box", Create box, b
++ "Arc", Create arc, a
++ "Text", Create label, t
++ "Exchange", Exchange vertical order, X
++ "Copy", Copy element, c
++ "Join", Join into path, j
++ "Unjoin", Split path into elements, J
++ "Spline", Create spline, s
++ "Edit", Edit element, e
++ "Undelete", Undelete last deleted, u
++ "Select Save", Make object from selected, M,m
++ "Unselect", Unselect element, x
++ "Dashed", Set line style to dashed, |
++ "Dotted", Set line style to dotted, :
++ "Solid", Set line style to solid, _
++ "Prompt", Execute from command line, %
++ "Dot", Place dot at location, .
++ "Exit", Exit xcircuit Ctrl-Alt-q
++ "Netlist", Generate a netlist, Alt-q
++ "Swap", Swap schematic, symbol, /
++ "Pin Label", Create pin label, T
++ "Info Label", Create info label, I
++ "Connectivity", Show wire connectivity, Alt-w
++ "Sim", Generate sim netlist, Alt-s
++ "SPICE", Generate SPICE netlist, Alt-S
++ "PCB", Generate PCB netlist, Alt-p
++ "SPICE Flat", Generate flattened SPICE, Alt-f
++ ------------------------------------------------------------------
+ .br
+ .sp
+ 2-Button mouse users may find it useful to forego the Shift-Button1
diff --git a/debian/patches/05_fix_string_format.patch b/debian/patches/05_fix_string_format.patch
new file mode 100644
index 0000000..d902ff7
--- /dev/null
+++ b/debian/patches/05_fix_string_format.patch
@@ -0,0 +1,61 @@
+Description: Fix sprintf() format strings
+ In several snprintf() calls, no appropriate format arguments were given. This
+ patch adds them.
+Author: Roland Stigge <stigge@antcom.de>
+
+--- xcircuit-3.8.78.dfsg.orig/svg.c
++++ xcircuit-3.8.78.dfsg/svg.c
+@@ -1109,12 +1109,12 @@ int xctcl_svg(ClientData clientData, Tcl
+
+ if (locobjc >= 2) {
+ /* If there is a non-option argument, use it for the output filename */
+- sprintf(filename, Tcl_GetString(objv[1]));
++ sprintf(filename, "%s", Tcl_GetString(objv[1]));
+ }
+ else if (xobjs.pagelist[areawin->page]->pageinst->thisobject->name == NULL)
+- sprintf(filename, xobjs.pagelist[areawin->page]->filename);
++ sprintf(filename, "%s", xobjs.pagelist[areawin->page]->filename);
+ else
+- sprintf(filename, xobjs.pagelist[areawin->page]->pageinst->thisobject->name);
++ sprintf(filename, "%s", xobjs.pagelist[areawin->page]->pageinst->thisobject->name);
+
+ pptr = strrchr(filename, '.');
+ if (pptr != NULL)
+--- xcircuit-3.8.78.dfsg.orig/tclxcircuit.c
++++ xcircuit-3.8.78.dfsg/tclxcircuit.c
+@@ -3857,7 +3857,7 @@ int xctcl_object(ClientData clientData,
+ case NameIdx:
+ if (nidx == 1 || areawin->selects == 0) {
+ if (objc == 3) {
+- sprintf(thisinst->thisobject->name, Tcl_GetString(objv[nidx + 2]));
++ sprintf(thisinst->thisobject->name, "%s", Tcl_GetString(objv[nidx + 2]));
+ checkname(thisinst->thisobject);
+ }
+ Tcl_AppendElement(interp, thisinst->thisobject->name);
+@@ -7267,7 +7267,7 @@ int xctcl_page(ClientData clientData, Tc
+
+ case LoadIdx:
+ TechReplaceSave();
+- sprintf(_STR2, Tcl_GetString(objv[2 + nidx]));
++ sprintf(_STR2, "%s", Tcl_GetString(objv[2 + nidx]));
+ for (i = 3 + nidx; i < objc; i++) {
+ argv = Tcl_GetString(objv[i]);
+ if ((*argv == '-') && !strncmp(argv, "-repl", 5)) {
+@@ -7353,7 +7353,7 @@ int xctcl_page(ClientData clientData, Tc
+
+ switch (importtype) {
+ case XCircuitIdx:
+- sprintf(_STR2, Tcl_GetString(objv[3 + nidx]));
++ sprintf(_STR2, "%s", Tcl_GetString(objv[3 + nidx]));
+ for (i = 4; i < objc; i++) {
+ strcat(_STR2, ",");
+ strcat(_STR2, Tcl_GetString(objv[i + nidx]));
+@@ -7370,7 +7370,7 @@ int xctcl_page(ClientData clientData, Tc
+ Tcl_SetObjResult(interp, objPtr);
+ return XcTagCallback(interp, objc, objv);
+ }
+- sprintf(_STR2, Tcl_GetString(objv[3 + nidx]));
++ sprintf(_STR2, "%s", Tcl_GetString(objv[3 + nidx]));
+ if (savepage != pageno) newpage(pageno);
+ loadbackground();
+ if (savepage != pageno) newpage(savepage);
diff --git a/debian/patches/series b/debian/patches/series
new file mode 100644
index 0000000..5a99fb0
--- /dev/null
+++ b/debian/patches/series
@@ -0,0 +1,4 @@
+01_remove_asg.patch
+03_fix_lib_files.patch
+04_fix_manpage.patch
+05_fix_string_format.patch
diff --git a/debian/postinst b/debian/postinst
new file mode 100644
index 0000000..685a941
--- /dev/null
+++ b/debian/postinst
@@ -0,0 +1,10 @@
+#!/bin/sh
+set -e
+
+#DEBHELPER#
+
+if [ "$1" = "configure" ]; then
+ if dpkg --compare-versions "$2" lt-nl "2.2.2-3"; then
+ rm -f /etc/X11/Xresources/XCircuit
+ fi
+fi
diff --git a/debian/preinst b/debian/preinst
new file mode 100644
index 0000000..53deb9c
--- /dev/null
+++ b/debian/preinst
@@ -0,0 +1,13 @@
+#!/bin/sh
+set -e
+
+#DEBHELPER#
+
+# Move the app-defaults conffile.
+if [ "$1" = "install" -o "$1" = "upgrade" ]; then
+ if dpkg --compare-versions "$2" lt-nl "2.2.2-3"; then
+ if [ -f /etc/X11/Xresources/XCircuit ]; then
+ mv /etc/X11/Xresources/XCircuit /etc/X11/app-defaults/XCircuit
+ fi
+ fi
+fi
diff --git a/debian/rules b/debian/rules
new file mode 100755
index 0000000..e69f51b
--- /dev/null
+++ b/debian/rules
@@ -0,0 +1,61 @@
+#!/usr/bin/make -f
+
+# Uncomment this to turn on verbose mode.
+#export DH_VERBOSE=1
+
+DEB_HOST_MULTIARCH ?= $(shell dpkg-architecture -qDEB_HOST_MULTIARCH)
+
+%:
+ dh $@
+
+override_dh_auto_configure:
+ cp -f /usr/share/misc/config.sub config.sub
+ cp -f /usr/share/misc/config.guess config.guess
+ # Some touch-fu
+ touch --time=mtime -r configure.in Makefile.am
+ touch --time=mtime -r configure.in Makefile.in
+ touch --time=mtime -r configure.in configure
+ touch --time=mtime -r configure.in aclocal.m4
+ touch --time=mtime -r configure.in Xw/Makefile.am
+ touch --time=mtime -r Xw/Makefile.am Xw/Makefile.in
+ dh_auto_configure -- --x-includes=/usr --with-tcl=/usr/lib \
+ --with-tcllibs=/usr/lib/$(DEB_HOST_MULTIARCH) \
+ --with-tklibs=/usr/lib/$(DEB_HOST_MULTIARCH)
+
+override_dh_auto_build:
+ dh_auto_build -- \
+ librarydir=/usr/share/xcircuit \
+ exelibdir=/usr/lib/xcircuit \
+ scriptsdir=/usr/share/xcircuit
+
+override_dh_auto_install:
+ $(MAKE) install \
+ librarydir=/usr/share/xcircuit \
+ exelibdir=/usr/lib/xcircuit \
+ scriptsdir=/usr/share/xcircuit \
+ appdefaultsdir=/etc/X11/app-defaults \
+ appmandir=/usr/share/man/man1/ \
+ DESTDIR=$(CURDIR)/debian/xcircuit
+ chmod a-x $(CURDIR)/debian/xcircuit/usr/share/xcircuit/console.tcl
+ chrpath -d $(CURDIR)/debian/xcircuit/usr/lib/xcircuit/xcircexec
+
+override_dh_installchangelogs:
+ dh_installchangelogs CHANGES
+
+override_dh_compress:
+ dh_compress --exclude examples/
+
+override_dh_auto_test:
+
+TMP=get-orig-source-tmp
+get-orig-source:
+ rm -rf $(TMP)
+ mkdir $(TMP)
+ uscan --download --no-symlink --destdir $(TMP)
+ cd $(TMP) && tar xf xcircuit*.tgz && \
+ rm xcircuit*.tgz && \
+ rm -r */asg && \
+ rm -f */spiceparser/example && \
+ VERSION=`ls -d xcircuit*` && \
+ tar cfj ../$$VERSION.dfsg.tar.bz2 $$VERSION
+ rm -rf $(TMP)
diff --git a/debian/source/format b/debian/source/format
new file mode 100644
index 0000000..163aaf8
--- /dev/null
+++ b/debian/source/format
@@ -0,0 +1 @@
+3.0 (quilt)
diff --git a/debian/watch b/debian/watch
new file mode 100644
index 0000000..951583b
--- /dev/null
+++ b/debian/watch
@@ -0,0 +1,3 @@
+version=3
+opts="dversionmangle=s/\.dfsg$//" \
+http://opencircuitdesign.com/xcircuit/archive/xcircuit-(3\.7\..*)\.tgz
diff --git a/debian/xcircuit-icon.xpm b/debian/xcircuit-icon.xpm
new file mode 100644
index 0000000..da9f034
--- /dev/null
+++ b/debian/xcircuit-icon.xpm
@@ -0,0 +1,48 @@
+/* XPM */
+static char *magick[] = {
+/* columns rows colors chars-per-pixel */
+"27 32 10 1",
+" c #7f7f00",
+". c #666667",
+"X c gray50",
+"o c red",
+"O c yellow",
+"+ c gray60",
+"@ c #b2b2b2",
+"# c gray80",
+"$ c gray90",
+"% c white",
+/* pixels */
+"ooooooOooooo@oooooOoooooo+o",
+"o$@#$##$O#$#@#@###$#@@%$@##",
+"+###@@#$@$@##+#$+#$@+@#$O$$",
+"o+O+O++@o++@O@++o+O@O+@@+o@",
+"o @%$$$%%%%%%%%$%%%%%$%%%%%",
+"oo@$@%$@%@.$%%%%%%%%%%%$#%$",
+"++@$X@@#@X#+$#%$%#%%%%@@X%$",
+"oo@%%.@%.%%%#+XX+++##@+#+%$",
+"oo#%#X.$@+$#$++$X%@@@@+#+%$",
+"+O@%X$#+$X.##.@%#.@+X#X#+#$",
+"oX@$%%%%%%%%%%%%%%%%%%%%%%$",
+"oo@%#X$%%%$%%%%$$%%%%$%%%%$",
+"o++$#@+@%%%%%%%%%%%%%$%%%%$",
+"oO@%#@%@+@%#%%%@$#%@%%%%%%$",
+"oo+@X@$%%@.X++#.+.+X++.@++#",
+"X@@#+#%%@@@+##X#.$.$#@X####",
+"o @%##$+@$%%%%%%%%%%%$@%%%$",
+"oo@$@.@$%%%$%%%%%%%%%#@%%%$",
+"++@$$#%%%%$%%%%$%%%$$#+$$%$",
+"oo@%%%#%$%$$%$%$$$%$++++@$$",
+"oX@$%%%%%%%%%%%$%%%$@++@#%$",
+"OX@$%$$%%%$%%%%%%%%$$$+$$%$",
+"o+@$%%$%%%%%%%%%$%%%%#@%%%$",
+"oo@$%%%%%%%%%%%$%%%%%$@%%%$",
+"o++$$$$$%%#$%$%$$%$$@@X@@$$",
+"oO@%%$%%$%$%%%%%$%%$@++@#%$",
+"o+@$%%$%%%%$%%%$%%%%$@@$%$$",
+"X @$%%%%%%%%%%%%%%%%%$@%%%%",
+"o#o++@+++++@@#+++#@+@++@@@+",
+"o@@+oX oXoo ooo+o oXoo o o",
+"o#o@++@+O+o+@O+O@O@@O+++@O+",
+"o# +@+O@@#+#$$##########$$#"
+};
diff --git a/tutorial/footnote.html b/tutorial/footnote.html
new file mode 100644
index 0000000..0e20367
--- /dev/null
+++ b/tutorial/footnote.html
@@ -0,0 +1,27 @@
+<HTML>
+<TITLE>A footnote about the "mu" character in LaTeX</TITLE>
+<BODY BACKGROUND=../giffiles/blpaper.gif>
+
+It just so happens that although the "mu"
+character is encoded into the Adobe fonts, but is not part of any of the
+TeX fonts or TeX font encodings of standard Adobe (or TrueType) fonts.
+However, it is not strictly true that printing the character is impossible.
+I, being the enterprising character that I am, have found a (somewhat
+kludgy) workaround:
+
+<OL>
+ <LI> First, you must be using one of the PSNFSS packages available under
+ LaTeX2e, such as "times" (<TT>\usepackage{times}</TT>)
+ <LI> Next, create the following definition:<BR>
+ <TT>\def\micro{\special{ps:(µ)show}\nobreak\hspace*{0.55em}}</TT><BR>
+ (The "mu" character here is the embedded 8-bit character encoding
+ hex 0xb5, or decimal 181, or octal 0625).
+ <LI> The <TT>\micro</TT> definition can be used as follows, for example:<BR>
+ <TT>The correlator measures 700\,{\micro}m $\times$ 1170\,{\micro}m</TT>
+ <LI> This definition of <TT>\micro</TT> uses a \special{} function defined only
+ by (as far as I know) <TT>dvips</TT>, so the proper symbol will only show
+ up after postprocessing the <TT>.dvi</TT> file through <TT>dvips</TT>.
+</OL>
+
+</BODY>
+</HTML>
diff --git a/tutorial/giffiles/aggregate.gif b/tutorial/giffiles/aggregate.gif
new file mode 100644
index 0000000..371b19f
--- /dev/null
+++ b/tutorial/giffiles/aggregate.gif
Binary files differ
diff --git a/tutorial/giffiles/alib.gif b/tutorial/giffiles/alib.gif
new file mode 100644
index 0000000..865dc2d
--- /dev/null
+++ b/tutorial/giffiles/alib.gif
Binary files differ
diff --git a/tutorial/giffiles/amp1.gif b/tutorial/giffiles/amp1.gif
new file mode 100644
index 0000000..d022255
--- /dev/null
+++ b/tutorial/giffiles/amp1.gif
Binary files differ
diff --git a/tutorial/giffiles/amp2.gif b/tutorial/giffiles/amp2.gif
new file mode 100644
index 0000000..5606af0
--- /dev/null
+++ b/tutorial/giffiles/amp2.gif
Binary files differ
diff --git a/tutorial/giffiles/amp3.gif b/tutorial/giffiles/amp3.gif
new file mode 100644
index 0000000..c9fcd8f
--- /dev/null
+++ b/tutorial/giffiles/amp3.gif
Binary files differ
diff --git a/tutorial/giffiles/arcs1.gif b/tutorial/giffiles/arcs1.gif
new file mode 100644
index 0000000..09db235
--- /dev/null
+++ b/tutorial/giffiles/arcs1.gif
Binary files differ
diff --git a/tutorial/giffiles/bridge.gif b/tutorial/giffiles/bridge.gif
new file mode 100644
index 0000000..ac18bbc
--- /dev/null
+++ b/tutorial/giffiles/bridge.gif
Binary files differ
diff --git a/tutorial/giffiles/bridge1.gif b/tutorial/giffiles/bridge1.gif
new file mode 100644
index 0000000..da964e2
--- /dev/null
+++ b/tutorial/giffiles/bridge1.gif
Binary files differ
diff --git a/tutorial/giffiles/bridge2.gif b/tutorial/giffiles/bridge2.gif
new file mode 100644
index 0000000..53ea047
--- /dev/null
+++ b/tutorial/giffiles/bridge2.gif
Binary files differ
diff --git a/tutorial/giffiles/bridge3.gif b/tutorial/giffiles/bridge3.gif
new file mode 100644
index 0000000..d0bcd2c
--- /dev/null
+++ b/tutorial/giffiles/bridge3.gif
Binary files differ
diff --git a/tutorial/giffiles/bridge4.gif b/tutorial/giffiles/bridge4.gif
new file mode 100644
index 0000000..3439f07
--- /dev/null
+++ b/tutorial/giffiles/bridge4.gif
Binary files differ
diff --git a/tutorial/giffiles/bridge5.gif b/tutorial/giffiles/bridge5.gif
new file mode 100644
index 0000000..668ae54
--- /dev/null
+++ b/tutorial/giffiles/bridge5.gif
Binary files differ
diff --git a/tutorial/giffiles/bridge6.gif b/tutorial/giffiles/bridge6.gif
new file mode 100644
index 0000000..3aafac5
--- /dev/null
+++ b/tutorial/giffiles/bridge6.gif
Binary files differ
diff --git a/tutorial/giffiles/dff.gif b/tutorial/giffiles/dff.gif
new file mode 100644
index 0000000..6260fba
--- /dev/null
+++ b/tutorial/giffiles/dff.gif
Binary files differ
diff --git a/tutorial/giffiles/filter1.gif b/tutorial/giffiles/filter1.gif
new file mode 100644
index 0000000..3529749
--- /dev/null
+++ b/tutorial/giffiles/filter1.gif
Binary files differ
diff --git a/tutorial/giffiles/filter2.gif b/tutorial/giffiles/filter2.gif
new file mode 100644
index 0000000..57d2733
--- /dev/null
+++ b/tutorial/giffiles/filter2.gif
Binary files differ
diff --git a/tutorial/giffiles/fullamp.gif b/tutorial/giffiles/fullamp.gif
new file mode 100644
index 0000000..a2efe6b
--- /dev/null
+++ b/tutorial/giffiles/fullamp.gif
Binary files differ
diff --git a/tutorial/giffiles/fullamp_anno.gif b/tutorial/giffiles/fullamp_anno.gif
new file mode 100644
index 0000000..db0f63a
--- /dev/null
+++ b/tutorial/giffiles/fullamp_anno.gif
Binary files differ
diff --git a/tutorial/giffiles/halfamp.gif b/tutorial/giffiles/halfamp.gif
new file mode 100644
index 0000000..63ca65e
--- /dev/null
+++ b/tutorial/giffiles/halfamp.gif
Binary files differ
diff --git a/tutorial/giffiles/integrate1.gif b/tutorial/giffiles/integrate1.gif
new file mode 100644
index 0000000..f77b941
--- /dev/null
+++ b/tutorial/giffiles/integrate1.gif
Binary files differ
diff --git a/tutorial/giffiles/lib1.gif b/tutorial/giffiles/lib1.gif
new file mode 100644
index 0000000..06f4483
--- /dev/null
+++ b/tutorial/giffiles/lib1.gif
Binary files differ
diff --git a/tutorial/giffiles/load1.gif b/tutorial/giffiles/load1.gif
new file mode 100644
index 0000000..76fc7eb
--- /dev/null
+++ b/tutorial/giffiles/load1.gif
Binary files differ
diff --git a/tutorial/giffiles/nand4.gif b/tutorial/giffiles/nand4.gif
new file mode 100644
index 0000000..56292a5
--- /dev/null
+++ b/tutorial/giffiles/nand4.gif
Binary files differ
diff --git a/tutorial/giffiles/object.gif b/tutorial/giffiles/object.gif
new file mode 100644
index 0000000..f783581
--- /dev/null
+++ b/tutorial/giffiles/object.gif
Binary files differ
diff --git a/tutorial/giffiles/objedit.gif b/tutorial/giffiles/objedit.gif
new file mode 100644
index 0000000..3318d19
--- /dev/null
+++ b/tutorial/giffiles/objedit.gif
Binary files differ
diff --git a/tutorial/giffiles/overunder.gif b/tutorial/giffiles/overunder.gif
new file mode 100644
index 0000000..f1fce9b
--- /dev/null
+++ b/tutorial/giffiles/overunder.gif
Binary files differ
diff --git a/tutorial/giffiles/path1.gif b/tutorial/giffiles/path1.gif
new file mode 100644
index 0000000..11c6a1e
--- /dev/null
+++ b/tutorial/giffiles/path1.gif
Binary files differ
diff --git a/tutorial/giffiles/path2.gif b/tutorial/giffiles/path2.gif
new file mode 100644
index 0000000..384c37f
--- /dev/null
+++ b/tutorial/giffiles/path2.gif
Binary files differ
diff --git a/tutorial/giffiles/path3.gif b/tutorial/giffiles/path3.gif
new file mode 100644
index 0000000..3dc0213
--- /dev/null
+++ b/tutorial/giffiles/path3.gif
Binary files differ
diff --git a/tutorial/giffiles/path4.gif b/tutorial/giffiles/path4.gif
new file mode 100644
index 0000000..34671ba
--- /dev/null
+++ b/tutorial/giffiles/path4.gif
Binary files differ
diff --git a/tutorial/giffiles/path5.gif b/tutorial/giffiles/path5.gif
new file mode 100644
index 0000000..326a015
--- /dev/null
+++ b/tutorial/giffiles/path5.gif
Binary files differ
diff --git a/tutorial/giffiles/pcbcap.gif b/tutorial/giffiles/pcbcap.gif
new file mode 100644
index 0000000..69bbd8c
--- /dev/null
+++ b/tutorial/giffiles/pcbcap.gif
Binary files differ
diff --git a/tutorial/giffiles/pcbdiode.gif b/tutorial/giffiles/pcbdiode.gif
new file mode 100644
index 0000000..0906f88
--- /dev/null
+++ b/tutorial/giffiles/pcbdiode.gif
Binary files differ
diff --git a/tutorial/giffiles/poly1.gif b/tutorial/giffiles/poly1.gif
new file mode 100644
index 0000000..360f400
--- /dev/null
+++ b/tutorial/giffiles/poly1.gif
Binary files differ
diff --git a/tutorial/giffiles/poly2.gif b/tutorial/giffiles/poly2.gif
new file mode 100644
index 0000000..b58ea3c
--- /dev/null
+++ b/tutorial/giffiles/poly2.gif
Binary files differ
diff --git a/tutorial/giffiles/powersup.gif b/tutorial/giffiles/powersup.gif
new file mode 100644
index 0000000..68a9576
--- /dev/null
+++ b/tutorial/giffiles/powersup.gif
Binary files differ
diff --git a/tutorial/giffiles/powersup2.gif b/tutorial/giffiles/powersup2.gif
new file mode 100644
index 0000000..d00e6eb
--- /dev/null
+++ b/tutorial/giffiles/powersup2.gif
Binary files differ
diff --git a/tutorial/giffiles/quadparts.gif b/tutorial/giffiles/quadparts.gif
new file mode 100644
index 0000000..0be0e22
--- /dev/null
+++ b/tutorial/giffiles/quadparts.gif
Binary files differ
diff --git a/tutorial/giffiles/save1.gif b/tutorial/giffiles/save1.gif
new file mode 100644
index 0000000..c98500e
--- /dev/null
+++ b/tutorial/giffiles/save1.gif
Binary files differ
diff --git a/tutorial/giffiles/save2.gif b/tutorial/giffiles/save2.gif
new file mode 100644
index 0000000..d947ad6
--- /dev/null
+++ b/tutorial/giffiles/save2.gif
Binary files differ
diff --git a/tutorial/giffiles/select1.gif b/tutorial/giffiles/select1.gif
new file mode 100644
index 0000000..dfc319e
--- /dev/null
+++ b/tutorial/giffiles/select1.gif
Binary files differ
diff --git a/tutorial/giffiles/select2.gif b/tutorial/giffiles/select2.gif
new file mode 100644
index 0000000..26d255d
--- /dev/null
+++ b/tutorial/giffiles/select2.gif
Binary files differ
diff --git a/tutorial/giffiles/spline1.gif b/tutorial/giffiles/spline1.gif
new file mode 100644
index 0000000..0f6368a
--- /dev/null
+++ b/tutorial/giffiles/spline1.gif
Binary files differ
diff --git a/tutorial/giffiles/spline2.gif b/tutorial/giffiles/spline2.gif
new file mode 100644
index 0000000..25c1264
--- /dev/null
+++ b/tutorial/giffiles/spline2.gif
Binary files differ
diff --git a/tutorial/giffiles/spline3.gif b/tutorial/giffiles/spline3.gif
new file mode 100644
index 0000000..01df61f
--- /dev/null
+++ b/tutorial/giffiles/spline3.gif
Binary files differ
diff --git a/tutorial/giffiles/symbol_enc.gif b/tutorial/giffiles/symbol_enc.gif
new file mode 100644
index 0000000..934bfdb
--- /dev/null
+++ b/tutorial/giffiles/symbol_enc.gif
Binary files differ
diff --git a/tutorial/giffiles/text.gif b/tutorial/giffiles/text.gif
new file mode 100644
index 0000000..0939c71
--- /dev/null
+++ b/tutorial/giffiles/text.gif
Binary files differ
diff --git a/tutorial/giffiles/text2.gif b/tutorial/giffiles/text2.gif
new file mode 100644
index 0000000..e988e64
--- /dev/null
+++ b/tutorial/giffiles/text2.gif
Binary files differ
diff --git a/tutorial/giffiles/tut1.gif b/tutorial/giffiles/tut1.gif
new file mode 100644
index 0000000..d664463
--- /dev/null
+++ b/tutorial/giffiles/tut1.gif
Binary files differ
diff --git a/tutorial/giffiles/wramp1.gif b/tutorial/giffiles/wramp1.gif
new file mode 100644
index 0000000..7e57adb
--- /dev/null
+++ b/tutorial/giffiles/wramp1.gif
Binary files differ
diff --git a/tutorial/index.html b/tutorial/index.html
new file mode 120000
index 0000000..1808037
--- /dev/null
+++ b/tutorial/index.html
@@ -0,0 +1 @@
+tutorial.html \ No newline at end of file
diff --git a/tutorial/netfiles/filter.spc b/tutorial/netfiles/filter.spc
new file mode 100644
index 0000000..394b0b0
--- /dev/null
+++ b/tutorial/netfiles/filter.spc
@@ -0,0 +1,6 @@
+Spice circuit filter
+
+V1 GND Vin SIN(0 5 5k)
+C2 Vout GND 1.0u
+R3 Vin Vout 100k
+.end
diff --git a/tutorial/netfiles/integrator.spc b/tutorial/netfiles/integrator.spc
new file mode 100644
index 0000000..2448672
--- /dev/null
+++ b/tutorial/netfiles/integrator.spc
@@ -0,0 +1,17 @@
+Spice circuit integrator
+
+.subckt wramp bias out in.p in.m
+M1 net.1 net.1 GND GND nmos
+M2 out net.1 GND GND nmos
+M3 net.1 net.2 Vdd Vdd pmos
+M4 out net.3 Vdd Vdd pmos
+M5 net.3 net.3 Vdd Vdd pmos
+M6 net.2 net.2 Vdd Vdd pmos
+M7 net.4 bias GND GND nmos
+M8 net.3 in.p net.4 GND nmos
+M9 net.2 in.m net.4 GND nmos
+.ends
+
+C10 Output GND 1.0P
+X1 Bias Output Input Output wramp
+.end
diff --git a/tutorial/pcb/FlareLED.ps b/tutorial/pcb/FlareLED.ps
new file mode 100644
index 0000000..d807858
--- /dev/null
+++ b/tutorial/pcb/FlareLED.ps
@@ -0,0 +1,720 @@
+%!PS-Adobe-3.0
+%%Title: examples/FlareLED
+%%Creator: Xcircuit v2.3
+%%CreationDate: Mon Jul 2 14:17:57 2001
+%%Pages: 1
+%%BoundingBox: -319 -124 931 916
+%%DocumentNeededResources: font Helvetica font Helvetica-Bold font Times-Roman
+%%+ font Times-RomanISO font Symbol
+%%EndComments
+%%BeginProlog
+%
+% PostScript prolog for output from xcircuit
+% Version: 2.3
+%
+% Electrical circuit (and otherwise general) drawing program
+%
+% Written by Tim Edwards 8/5/93--5/16/01 (tim@bach.ece.jhu.edu)
+% The Johns Hopkins University
+%
+%%BeginResource: procset XCIRCproc 2.3 1
+% supporting definitions --- these are the primary xcircuit types.
+
+/XCIRCsave save def
+/topmat matrix currentmatrix def
+
+/fontslant { /slant exch def [1 0 slant 1 0 0]
+ exch findfont exch makefont dup length dict /ndict exch def
+ { 1 index /FID ne { ndict 3 1 roll put } { pop pop } ifelse } forall
+ ndict definefont pop} def
+/ul { dup type /stringtype eq showflag 1 eq and { gsave
+ currentpoint topmat setmatrix 0 0 moveto 2 index stringwidth pop (_)
+ false charpath flattenpath pathbbox grestore exch pop 1 index
+ sub setlinewidth exch pop currentpoint 3 -1 roll add moveto 0
+ rlineto stroke moveto } if } def
+/ol { dup type /stringtype eq showflag 1 eq and { gsave gsave
+ currentpoint topmat setmatrix 2 index stringwidth pop 3 index
+ true charpath flattenpath pathbbox grestore exch pop
+ exch pop topmat setmatrix (_) true charpath pathbbox grestore
+ exch pop 1 index sub setlinewidth exch pop currentpoint
+ exch 4 1 roll exch sub add moveto pop 0 rlineto stroke
+ moveto } if } def
+/stW { gsave currentpoint newpath moveto true charpath flattenpath
+ pathbbox pop exch pop sub grestore } def
+/Ts {mark Tabs aload pop counttomark 1 add array astore /Tabs exch def Tabs
+ 0 currentpoint pop put} def
+/Tbn {mark Tabs aload pop counttomark dup 2 add 1 roll cleartomark 1 sub} def
+/Tb { 0 1 Tbn {Tabs exch get dup currentpoint pop lt
+ {currentpoint exch pop moveto exit} {pop} ifelse } for } def
+/Tf { Tbn -1 0 {Tabs exch get dup currentpoint pop gt
+ {currentpoint exch pop moveto exit} {pop} ifelse } for } def
+/qS { (aa) stW (a a) stW sub 4 div 0 Kn } def
+/hS { qS qS } def
+/pspc 0 def
+/cf0 { scalefont setfont } bind def
+/Kn { dup kY add /kY exch def rmoveto } bind def
+/ss { /fscale fscale 0.67 mul def currentfont 0.67 cf0 0 fscale0 fscale mul
+ 0.33 mul neg Kn} def
+/Ss { /fscale fscale 0.67 mul def currentfont 0.67 cf0 0 fscale0 fscale mul
+ 0.67 mul Kn } def
+/ns { 0 kY neg Kn /kY 0 def /fscale 1.0 def xfont0 1.0 cf0 } def
+/CR { ns 0 /Bline Bline fscale0 neg add def Bline moveto } def
+/cf { dup type /realtype ne {1.0} if exch findfont exch kY 0 eq
+ { 40 mul dup /fscale0 exch def cf0 /xfont0 currentfont def}
+ {fscale0 mul fscale mul cf0} ifelse } def
+/ctmk { counttomark dup 2 add -1 roll pop } bind def
+/label { gsave translate 0 0 moveto dup scale /rotval exch def /just exch def
+ just 16 and 0 gt {0 1 dtransform gsave pagemat setmatrix idtransform
+ exch grestore 1 0 dtransform gsave pagemat setmatrix idtransform
+ exch grestore dup 0 eq {pop mul 0 gt} {3 1 roll pop pop 0 lt} ifelse
+ {-1 /just just dup 3 and 1 ne {3 xor} if def} {1} ifelse exch 0 lt
+ {-1 /just just dup 12 and 4 ne {12 xor} if def} {1} ifelse scale }
+ if /showflag 0 def /fspc pspc def /Bline 0 def /Tabs 0 array def
+ /fscale 1.0 def /kY 0 def
+ gsave dup 1 add copy 0 exch {exch dup type /stringtype eq {true
+ charpath flattenpath} {exec} ifelse } repeat pop pathbbox grestore
+ 3 -1 roll pop 3 1 roll just 1 and 0 gt {just 2 and 0 gt {exch pop
+ neg fspc sub} {exch sub 0.5 mul neg} ifelse} {pop neg fspc add}
+ ifelse exch Bline exch just 4 and 0 gt {just 8 and 0 gt {exch pop
+ neg fspc sub} {add 0.5 mul neg} ifelse} {pop neg fspc add} ifelse
+ /showflag 1 def rotval rotate Kn currentpoint translate
+ /Bline 0 def /Tabs 0 array def /fscale 1.0 def /kY 0 def
+ {dup type /stringtype eq {show}{exec} ifelse} repeat grestore } def
+/pinlabel { hlevel 0 eq { /pspc 20 def label /pspc 0 def }
+ { pop pop pop pop pop {pop} repeat } ifelse } def
+/pinglobal { pinlabel } def
+/infolabel { pinlabel } def
+
+/scb { setrgbcolor } bind def /sce { defColor aload pop scb } bind def
+/cRedef {/defColor currentcolor 3 array astore def} def
+/begingate { /hlevel hlevel 1 add def /defColor currentcolor sce 3 array
+ astore def gsave sce translate 0 0 moveto dup 0 lt
+ {neg 1 sub -1 1 scale} if rotate dup scale } bind def
+/makeparm {3 string cvs dup length 1 add string /tstr exch def tstr exch
+ 1 exch putinterval tstr 0 (v) putinterval tstr cvn} bind def
+/beginparm { -1 1 {makeparm exch def} for
+ dup type /arraytype eq { aload length -1 1 {makeparm exch def}
+ for } if begingate } bind def
+/endgate { /hlevel hlevel 1 sub def grestore defColor aload pop cRedef
+ scb} bind def
+
+/hlevel 0 def
+/tmpa [1 0 0 1 0 0] def
+/gar {8 8 true tmpa {<c0 c0 00 00 0c 0c 00 00>} imagemask} bind
+{8 8 true tmpa {<30 70 60 02 03 07 06 20>} imagemask} bind
+{8 8 true tmpa {<0c 1e 1e 0c c0 e1 e1 c0>} imagemask} bind
+{8 8 true tmpa {<0f 0f 0f 0f f0 f0 f0 f0>} imagemask} bind
+{8 8 true tmpa {<3f f3 e1 e1 f3 3f 1e 1e>} imagemask} bind
+{8 8 true tmpa {<df cf 8f 9f fd fc f8 f9>} imagemask} bind
+{8 8 true tmpa {<ff 3f 3f ff ff f3 f3 ff>} imagemask} bind 7 array astore def
+/ppaint { gsave clip tmpa dup setmatrix pathbbox neg exch neg 4 2 roll
+ neg 4 -1 roll 2 copy gt {exch} if 8 div ceiling 8 mul 4 2 roll neg 2 copy
+ gt {exch} if 8 div ceiling 8 mul 3 -1 roll -8 5 -1 roll
+ { 3 index exch 5 exch put dup -8 3 index { 3 index
+ exch 4 exch put 3 index exec } for } for pop pop pop pop grestore } bind def
+/setstyles {
+ currentlinewidth mul setlinewidth /style exch def
+ style 1 and 0 gt not {closepath} if
+ style 2 and 0 gt {currentlinewidth 4 mul dup 2 array astore 0 setdash} if
+ style 4 and 0 gt {0.5 currentlinewidth 4 mul 2 array astore 0 setdash} if
+ style dup 256 ge exch 480 lt and { gsave 1 setgray eofill grestore } if
+ style 16 and 0 gt { gsave style 224 and -5 bitshift dup 7 lt
+ {gar exch get ppaint} { pop eofill } ifelse grestore } if
+ style 8 and 0 gt style 512 eq or { newpath } { stroke } ifelse grestore } def
+
+/polygon { gsave /num exch def moveto num 1 sub {lineto} repeat setstyles } def
+/xcarc { gsave newpath arc setstyles } def
+/elb { matrix currentmatrix 7 -1 roll 7 -1 roll translate 5 1 roll 4 -1 roll
+ 3 index div 1 scale } def
+/ele { 0 4 1 roll 0 4 1 roll } bind def
+/ellipse { gsave elb newpath ele arc setmatrix setstyles } def
+/pellip { elb ele arc setmatrix } def
+/nellip { elb ele arcn setmatrix } def
+/spline { gsave moveto curveto setstyles } def
+/polyc { {lineto} repeat } bind def
+/beginpath { gsave moveto } bind def
+/endpath { setstyles } bind def
+/bop { 1 setlinecap 0 setlinejoin 6 setmiterlimit 0 0 0 scb cRedef } def
+/insertion {/PSobj save def /showpage {} def bop translate} def
+/end_insert {PSobj restore} def
+/setpagemat {/pagemat matrix currentmatrix def} def
+/inchscale {setpagemat 0.375 mul dup scale} def
+/cmscale {setpagemat 0.35433071 mul dup scale} def
+
+%%EndResource
+%%EndProlog
+
+/Times-Roman findfont dup length dict begin
+{1 index /FID ne {def} {pop pop} ifelse} forall
+/Encoding ISOLatin1Encoding def currentdict end
+/Times-RomanISO exch definefont pop
+
+% XCircuit output starts here.
+
+/PIC16C54 {
+% 0 0 480 736 bbox
+(?) 1 beginparm
+0 1.00 0 0 0 736 480 736 480 0 4 polygon
+(PIC16C54A) {/Helvetica-Bold cf} 2 21 0 1.00 240 320 label
+(Vdd) {/Helvetica cf} 2 23 0 1.00 464 368 label
+(RA2) {/Helvetica cf} 2 20 0 1.00 16 688 label
+(RA3) {/Helvetica cf} 2 20 0 1.00 16 624 label
+(RTCC) {/Helvetica cf} 2 20 0 1.00 16 560 label
+(MCLR) {ol} {/Helvetica cf} 3 20 0 1.00 16 496 label
+(Vss) {/Helvetica cf} 2 20 0 1.00 16 368 label
+(RB0) {/Helvetica cf} 2 20 0 1.00 16 240 label
+(RB1) {/Helvetica cf} 2 20 0 1.00 16 176 label
+(RB2) {/Helvetica cf} 2 20 0 1.00 16 112 label
+(RB3) {/Helvetica cf} 2 20 0 1.00 16 48 label
+(RB4) {/Helvetica cf} 2 23 0 1.00 464 48 label
+(RB5) {/Helvetica cf} 2 23 0 1.00 464 112 label
+(RB6) {/Helvetica cf} 2 23 0 1.00 464 176 label
+(RB7) {/Helvetica cf} 2 23 0 1.00 464 240 label
+(OSC2/CLKOUT) {/Helvetica cf} 2 23 0 1.00 464 496 label
+(OSC1/CLKIN) {/Helvetica cf} 2 23 0 1.00 464 560 label
+(RA0) {/Helvetica cf} 2 23 0 1.00 464 624 label
+(RA1) {/Helvetica cf} 2 23 0 1.00 464 688 label
+sce
+mark v1 (pcb:U) {/Helvetica cf} ctmk 21 0 1.00 224 256 infolabel
+1.000 0.000 0.000 scb
+(1) {/Helvetica cf} 2 23 0 1.00 0 688 pinlabel
+(2) {/Helvetica cf} 2 23 0 1.00 0 624 pinlabel
+(3) {/Helvetica cf} 2 23 0 1.00 0 560 pinlabel
+(4) {/Helvetica cf} 2 23 0 1.00 0 496 pinlabel
+(5) {/Helvetica cf} 2 23 0 1.00 0 368 pinlabel
+(6) {/Helvetica cf} 2 23 0 1.00 0 240 pinlabel
+(7) {/Helvetica cf} 2 23 0 1.00 0 176 pinlabel
+(8) {/Helvetica cf} 2 23 0 1.00 0 112 pinlabel
+(9) {/Helvetica cf} 2 23 0 1.00 0 48 pinlabel
+(10) {/Helvetica cf} 2 20 0 1.00 480 48 pinlabel
+(11) {/Helvetica cf} 2 20 0 1.00 480 112 pinlabel
+(12) {/Helvetica cf} 2 20 0 1.00 480 176 pinlabel
+(13) {/Helvetica cf} 2 20 0 1.00 480 240 pinlabel
+(14) {/Helvetica cf} 2 20 0 1.00 480 368 pinlabel
+(15) {/Helvetica cf} 2 20 0 1.00 480 496 pinlabel
+(16) {/Helvetica cf} 2 20 0 1.00 480 560 pinlabel
+(17) {/Helvetica cf} 2 20 0 1.00 480 624 pinlabel
+(18) {/Helvetica cf} 2 20 0 1.00 480 688 pinlabel
+endgate
+} def
+
+/LTC490 {
+% 0 0 416 384 bbox
+(?) 1 beginparm
+0 1.00 0 0 0 384 416 384 416 0 4 polygon
+(RS422) {/Helvetica cf} 2 21 0 1.00 192 176 label
+(Transciever) {/Helvetica cf} 2 21 0 1.00 208 128 label
+(LTC490) {/Helvetica-Bold cf} 2 21 0 1.00 192 256 label
+(Vcc) {/Helvetica cf} 2 20 0 1.00 16 336 label
+(R) {/Helvetica cf} 2 20 0 1.00 16 240 label
+(D) {/Helvetica cf} 2 20 0 1.00 16 144 label
+(GND) {/Helvetica cf} 2 20 0 1.00 16 48 label
+(Y) {/Helvetica cf} 2 23 0 1.00 400 48 label
+(Z) {/Helvetica cf} 2 23 0 1.00 400 144 label
+(B) {/Helvetica cf} 2 23 0 1.00 400 240 label
+(A) {/Helvetica cf} 2 23 0 1.00 400 336 label
+sce
+mark v1 (pcb:U) {/Helvetica cf} ctmk 21 0 1.00 208 80 infolabel
+1.000 0.000 0.000 scb
+(1) {/Helvetica cf} 2 23 0 1.00 0 336 pinlabel
+(2) {/Helvetica cf} 2 23 0 1.00 0 240 pinlabel
+(3) {/Helvetica cf} 2 23 0 1.00 0 144 pinlabel
+(4) {/Helvetica cf} 2 23 0 1.00 0 48 pinlabel
+(5) {/Helvetica cf} 2 20 0 1.00 416 48 pinlabel
+(6) {/Helvetica cf} 2 20 0 1.00 416 144 pinlabel
+(7) {/Helvetica cf} 2 20 0 1.00 416 240 pinlabel
+(8) {/Helvetica cf} 2 20 0 1.00 416 336 pinlabel
+endgate
+} def
+
+/terminal_block {
+% -160 -80 320 173 bbox
+(?) 1 beginparm
+0 1.00 -160 -80 -160 48 160 48 160 -80 4 polygon
+(ED100/3DS) {/Helvetica cf} 2 21 0 1.00 0 80 label
+1 1.00 0 -16 32 0.00 360.00 xcarc
+1 1.00 96 -16 32 0.00 360.00 xcarc
+1 1.00 -96 -16 32 0.00 360.00 xcarc
+sce
+mark v1 (pcb:J) {/Helvetica cf} ctmk 21 0 1.00 0 -112 infolabel
+1.000 0.000 0.000 scb
+(1) {/Helvetica cf} 2 25 0 1.00 -96 -16 pinlabel
+(2) {/Helvetica cf} 2 25 0 1.00 0 -16 pinlabel
+(3) {/Helvetica cf} 2 25 0 1.00 96 -16 pinlabel
+endgate
+} def
+
+/LTC1152 {
+% -192 -192 384 384 bbox
+(?) 1 beginparm
+0 1.00 -192 -192 -192 192 192 192 192 -192 4 polygon
+(LTC1152) {/Helvetica-Bold cf} 2 25 0 1.00 0 48 label
+(Op-amp) {/Helvetica cf} 2 29 0 1.00 0 0 label
+(SHDN) {/Helvetica cf} 2 20 0 1.00 -176 144 label
+(IN) {/Helvetica cf} (-) {/Symbol cf} 4 20 0 1.00 -176 48 label
+(IN) {/Helvetica cf} (+) {/Symbol cf} 4 20 0 1.00 -176 -48 label
+(-) {/Symbol cf} (V) {/Helvetica cf} 4 20 0 1.00 -176 -144 label
+(COMP) {/Helvetica cf} 2 23 0 1.00 176 -144 label
+(OUT) {/Helvetica cf} 2 23 0 1.00 176 -48 label
+(+) {/Symbol cf} (V) {/Helvetica cf} 4 23 0 1.00 176 48 label
+(CP) {/Helvetica cf} 2 23 0 1.00 176 144 label
+sce
+mark v1 (pcb:U) {/Helvetica cf} ctmk 21 0 1.00 0 -80 infolabel
+1.000 0.000 0.000 scb
+(1) {/Helvetica cf} 2 23 0 1.00 -192 144 pinlabel
+(2) {/Helvetica cf} 2 23 0 1.00 -192 48 pinlabel
+(3) {/Helvetica cf} 2 23 0 1.00 -192 -48 pinlabel
+(5) {/Helvetica cf} 2 20 0 1.00 192 -144 pinlabel
+(4) {/Helvetica cf} 2 23 0 1.00 -192 -144 pinlabel
+(6) {/Helvetica cf} 2 20 0 1.00 192 -48 pinlabel
+(7) {/Helvetica cf} 2 20 0 1.00 192 48 pinlabel
+(8) {/Helvetica cf} 2 20 0 1.00 192 144 pinlabel
+endgate
+} def
+
+/DSUB9 {
+% -160 0 320 186 bbox
+(?) 1 beginparm
+1 1.00 -128 96 16 0.00 360.00 xcarc
+1 1.00 -32 32 16 0.00 360.00 xcarc
+1 1.00 0 96 16 0.00 360.00 xcarc
+1 1.00 64 96 16 0.00 360.00 xcarc
+1 1.00 128 96 16 15.00 375.00 xcarc
+1 1.00 96 32 16 0.00 360.00 xcarc
+1 1.00 32 32 16 0.00 360.00 xcarc
+1 1.00 -64 96 16 0.00 360.00 xcarc
+1 1.00 -96 32 16 0.00 360.00 xcarc
+sce
+mark v1 (pcb:J) {/Helvetica cf} ctmk 21 0 1.00 16 -48 infolabel
+128 128 beginpath
+128 96 32 450.00 333.43 arcn
+124 17 1 polyc
+96 32 32 333.43 270.00 arcn
+-96 0 1 polyc
+-96 32 32 270.00 206.57 arcn
+-156 81 1 polyc
+-128
+96 32 206.57 90.00 arcn
+128 128 1 polyc
+1 1.00 endpath
+(AMP 745781-4) {/Helvetica cf} 2 25 0 1.00 0 160 label
+1.000 0.000 0.000 scb
+(1) {/Helvetica cf} 2 25 0 1.00 -128 96 pinlabel
+(3) {/Helvetica cf} 2 25 0 1.00 0 96 pinlabel
+(2) {/Helvetica cf} 2 25 0 1.00 -64 96 pinlabel
+(4) {/Helvetica cf} 2 25 0 1.00 64 96 pinlabel
+(5) {/Helvetica cf} 2 25 0 1.00 128 96 pinlabel
+(6) {/Helvetica cf} 2 29 0 1.00 -96 32 pinlabel
+(7) {/Helvetica cf} 2 29 0 1.00 -32 32 pinlabel
+(8) {/Helvetica cf} 2 29 0 1.00 32 32 pinlabel
+(9) {/Helvetica cf} 2 29 0 1.00 96 32 pinlabel
+endgate
+} def
+
+/Crystal {
+% -144 -144 288 288 bbox
+(?) 1 beginparm
+0 1.00 -144 -144 -144 144 144 144 144 -144 4 polygon
+(CTX169) {/Helvetica-Bold cf} 2 25 0 1.00 0 16 label
+(MHz) {hS} (20) {/Helvetica cf} 4 21 0 1.00 0 -32 label
+(N/C) {/Helvetica cf} 2 20 0 1.00 -128 96 label
+(GND) {/Helvetica cf} 2 20 0 1.00 -128 -96 label
+(OUT) {/Helvetica cf} 2 23 0 1.00 128 -96 label
+(Vdd) {/Helvetica cf} 2 23 0 1.00 128 96 label
+sce
+mark v1 (pcb:X) {/Helvetica cf} ctmk 21 0 1.00 0 -176 infolabel
+1.000 0.000 0.000 scb
+(1) {/Helvetica cf} 2 23 0 1.00 -144 96 pinlabel
+(2) {/Helvetica cf} 2 23 0 1.00 -144 -96 pinlabel
+(3) {/Helvetica cf} 2 20 0 1.00 144 -96 pinlabel
+(4) {/Helvetica cf} 2 20 0 1.00 144 96 pinlabel
+endgate
+} def
+
+/ADC12138 {
+% -240 -464 480 928 bbox
+(?) 1 beginparm
+0 1.00 -240 -464 -240 464 240 464 240 -464 4 polygon
+(CH0) {/Helvetica cf} 2 20 0 1.00 -224 416 label
+(CH1) {/Helvetica cf} 2 20 0 1.00 -224 352 label
+(CH2) {/Helvetica cf} 2 20 0 1.00 -224 288 label
+(CH3) {/Helvetica cf} 2 20 0 1.00 -224 224 label
+(CH4) {/Helvetica cf} 2 20 0 1.00 -224 160 label
+(CH5) {/Helvetica cf} 2 20 0 1.00 -224 96 label
+(CH6) {/Helvetica cf} 2 20 0 1.00 -224 32 label
+(CH7) {/Helvetica cf} 2 20 0 1.00 -224 -32 label
+(COM) {/Helvetica cf} 2 20 0 1.00 -224 -96 label
+(MuxOut1) {/Helvetica cf} 2 20 0 1.00 -224 -160 label
+(A/Din2) {/Helvetica cf} 2 20 0 1.00 -224 -352 label
+(DGND) {/Helvetica cf} 2 20 0 1.00 -224 -416 label
+(+) {/Symbol cf} (VA) {/Helvetica cf} 4 23 0 1.00 224 -416 label
+(-) {/Symbol cf} (Vref) {/Helvetica cf} 4 23 0 1.00 224 -352 label
+(+) {/Symbol cf} (Vref) {/Helvetica cf} 4 23 0 1.00 224 -288 label
+(AGND) {/Helvetica cf} 2 23 0 1.00 224 -224 label
+(PD) {/Helvetica cf} 2 23 0 1.00 224 -160 label
+(EOC) {/Helvetica cf} 2 23 0 1.00 224 -96 label
+(CONV) {ol} {/Helvetica cf} 3 23 0 1.00 224 -32 label
+(CS) {ol} {/Helvetica cf} 3 23 0 1.00 224 32 label
+(DO) {/Helvetica cf} 2 23 0 1.00 224 96 label
+(DI) {/Helvetica cf} 2 23 0 1.00 224 160 label
+(SCLK) {/Helvetica cf} 2 23 0 1.00 224 224 label
+(A/Din1) {/Helvetica cf} 2 20 0 1.00 -224 -224 label
+(MuxOut2) {/Helvetica cf} 2 20 0 1.00 -224 -288 label
+(CCLK) {/Helvetica cf} 2 23 0 1.00 224 288 label
+(DOR) {ol} {/Helvetica cf} 3 23 0 1.00 224 352 label
+(+) {/Symbol cf} (VD) {/Helvetica cf} 4 23 0 1.00 224 416 label
+(ADC12138) {/Helvetica-Bold cf} 2 21 0 1.00 0 64 label
+sce
+mark v1 (pcb:U) {/Helvetica cf} ctmk 21 0 1.00 0 0 infolabel
+1.000 0.000 0.000 scb
+(1) {/Helvetica cf} 2 23 0 1.00 -240 416 pinlabel
+(2) {/Helvetica cf} 2 23 0 1.00 -240 352 pinlabel
+(3) {/Helvetica cf} 2 23 0 1.00 -240 288 pinlabel
+(4) {/Helvetica cf} 2 23 0 1.00 -240 224 pinlabel
+(5) {/Helvetica cf} 2 23 0 1.00 -240 160 pinlabel
+(6) {/Helvetica cf} 2 23 0 1.00 -240 96 pinlabel
+(7) {/Helvetica cf} 2 23 0 1.00 -240 32 pinlabel
+(8) {/Helvetica cf} 2 23 0 1.00 -240 -32 pinlabel
+(9) {/Helvetica cf} 2 23 0 1.00 -240 -96 pinlabel
+(10) {/Helvetica cf} 2 23 0 1.00 -240 -160 pinlabel
+(11) {/Helvetica cf} 2 23 0 1.00 -240 -224 pinlabel
+(12) {/Helvetica cf} 2 23 0 1.00 -240 -288 pinlabel
+(13) {/Helvetica cf} 2 23 0 1.00 -240 -352 pinlabel
+(14) {/Helvetica cf} 2 23 0 1.00 -240 -416 pinlabel
+(15) {/Helvetica cf} 2 20 0 1.00 240 -416 pinlabel
+(16) {/Helvetica cf} 2 20 0 1.00 240 -352 pinlabel
+(17) {/Helvetica cf} 2 20 0 1.00 240 -288 pinlabel
+(18) {/Helvetica cf} 2 20 0 1.00 240 -224 pinlabel
+(19) {/Helvetica cf} 2 20 0 1.00 240 -160 pinlabel
+(20) {/Helvetica cf} 2 20 0 1.00 240 -96 pinlabel
+(21) {/Helvetica cf} 2 20 0 1.00 240 -32 pinlabel
+(22) {/Helvetica cf} 2 20 0 1.00 240 32 pinlabel
+(23) {/Helvetica cf} 2 20 0 1.00 240 96 pinlabel
+(24) {/Helvetica cf} 2 20 0 1.00 240 160 pinlabel
+(25) {/Helvetica cf} 2 20 0 1.00 240 224 pinlabel
+(26) {/Helvetica cf} 2 20 0 1.00 240 288 pinlabel
+(27) {/Helvetica cf} 2 20 0 1.00 240 352 pinlabel
+(28) {/Helvetica cf} 2 20 0 1.00 240 416 pinlabel
+endgate
+} def
+
+/TK11950 {
+% -336 -112 672 224 bbox
+(?) 1 beginparm
+0 1.00 -336 -112 -336 112 336 112 336 -112 4 polygon
+(NOISE BYPASS) {/Helvetica cf} 2 20 0 1.00 -320 64 label
+(CONTROL) {/Helvetica cf} 2 20 0 1.00 -320 0 label
+(RESET OUT) {/Helvetica cf} 2 20 0 1.00 -320 -64 label
+(VO) {/Helvetica cf} 2 23 0 1.00 320 -64 label
+(GND) {/Helvetica cf} 2 23 0 1.00 320 0 label
+(VIN) {/Helvetica cf} 2 23 0 1.00 320 64 label
+(TK11950) {/Helvetica-Bold cf} 2 21 0 1.00 64 16 label
+(V) {hS} (5.0) {/Helvetica cf} 4 29 0 1.00 64 -32 label
+sce
+mark v1 (pcb:U) {/Helvetica cf} ctmk 21 0 1.00 0 -144 infolabel
+1.000 0.000 0.000 scb
+(1) {/Helvetica cf} 2 23 0 1.00 -336 64 pinlabel
+(2) {/Helvetica cf} 2 23 0 1.00 -336 0 pinlabel
+(3) {/Helvetica cf} 2 23 0 1.00 -336 -64 pinlabel
+(4) {/Helvetica cf} 2 20 0 1.00 336 -64 pinlabel
+(5) {/Helvetica cf} 2 20 0 1.00 336 0 pinlabel
+(6) {/Helvetica cf} 2 20 0 1.00 336 64 pinlabel
+endgate
+} def
+
+/Capacitor {
+% -32 -64 186 128 bbox
+(1.0) (\265) (?) 3 beginparm
+1 1.00 0 -64 0 -6 2 polygon
+1 1.00 0 64 0 6 2 polygon
+1 1.00 -32 6 32 6 2 polygon
+1 1.00 -32 -6 32 -6 2 polygon
+1.000 0.000 0.000 scb
+(1) {/Times-Roman cf} 2 9 0 1.00 0 64 pinlabel
+(2) {/Times-Roman cf} 2 13 0 1.00 0 -64 pinlabel
+sce
+mark v2 v1 ( %p1 %p2 ) v3 (spice:C) {/Times-RomanISO cf} ctmk 4 0 1.00 -208
+-160 infolabel
+sce
+(sim:c %p1 %p2) {/Times-Roman cf} 2 4 0 1.00 -208 -208 infolabel
+mark (F) v2 {hS} v1 {/Times-RomanISO cf} ctmk 20 0 1.00 48 0 label
+sce
+mark v3 (pcb:C) {/Times-Roman cf} ctmk 20 0 1.00 -208 -256 infolabel
+endgate
+} def
+
+/LM13700 {
+% -256 -256 480 544 bbox
+(?) 1 beginparm
+0 1.00 -256 -256 -256 288 224 288 224 -256 4 polygon
+(BufIn1) {/Helvetica cf} 2 20 0 1.00 -240 -144 label
+(BufOut1) {/Helvetica cf} 2 20 0 1.00 -240 -208 label
+(BufIn2) {/Helvetica cf} 2 23 0 1.00 208 -144 label
+(+) {/Symbol cf} (V) {/Helvetica cf} 4 23 0 1.00 208 -80 label
+(Out2) {/Helvetica cf} 2 23 0 1.00 208 -16 label
+1.000 0.000 0.000 scb
+(7) {/Helvetica cf} 2 23 0 1.00 -256 -144 pinlabel
+(8) {/Helvetica cf} 2 23 0 1.00 -256 -208 pinlabel
+(10) {/Helvetica cf} 2 20 0 1.00 224 -144 pinlabel
+(11) {/Helvetica cf} 2 20 0 1.00 224 -80 pinlabel
+(12) {/Helvetica cf} 2 20 0 1.00 224 -16 pinlabel
+sce
+(LM13700) {/Helvetica-Bold cf} 2 21 0 1.00 -16 16 label
+(Iabc1) {/Helvetica cf} 2 20 0 1.00 -240 240 label
+(Dbias1) {/Helvetica cf} 2 20 0 1.00 -240 176 label
+(1) {/Helvetica cf} (+) {/Symbol cf} (In) {/Helvetica cf} 6 20 0 1.00 -240 112
+label
+(Out1) {/Helvetica cf} 2 20 0 1.00 -240 -16 label
+1.000 0.000 0.000 scb
+(1) {/Helvetica cf} 2 23 0 1.00 -256 240 pinlabel
+(2) {/Helvetica cf} 2 23 0 1.00 -256 176 pinlabel
+(3) {/Helvetica cf} 2 23 0 1.00 -256 112 pinlabel
+(4) {/Helvetica cf} 2 23 0 1.00 -256 48 pinlabel
+(5) {/Helvetica cf} 2 23 0 1.00 -256 -16 pinlabel
+(14) {/Helvetica cf} 2 20 0 1.00 224 112 pinlabel
+(15) {/Helvetica cf} 2 20 0 1.00 224 176 pinlabel
+(16) {/Helvetica cf} 2 20 0 1.00 224 240 pinlabel
+sce
+(-) {/Symbol cf} (V) {/Helvetica cf} 4 20 0 1.00 -240 -80 label
+1.000 0.000 0.000 scb
+(6) {/Helvetica cf} 2 23 0 1.00 -256 -80 pinlabel
+(13) {/Helvetica cf} 2 20 0 1.00 224 48 pinlabel
+sce
+(BufOut2) {/Helvetica cf} 2 23 0 1.00 208 -208 label
+1.000 0.000 0.000 scb
+(9) {/Helvetica cf} 2 20 0 1.00 224 -208 pinlabel
+sce
+(1) {/Helvetica cf} (-) {/Symbol cf} (In) {/Helvetica cf} 6 20 0 1.00 -240 48
+label
+(Iabc2) {/Helvetica cf} 2 23 0 1.00 208 240 label
+(Dbias2) {/Helvetica cf} 2 23 0 1.00 208 176 label
+(2) {/Helvetica cf} (+) {/Symbol cf} (In) {/Helvetica cf} 6 23 0 1.00 208 112
+label
+(2) {/Helvetica cf} (-) {/Symbol cf} (In) {/Helvetica cf} 6 23 0 1.00 208 48
+label
+sce
+mark v1 (pcb:U) {/Helvetica cf} ctmk 21 0 1.00 -16 -304 infolabel
+endgate
+} def
+
+/Resistor {
+% -14 -64 157 128 bbox
+(1.0) (k) (?) 3 beginparm
+1 1.00 0 64 0 36 2 polygon
+1 1.00 0 -64 0 -36 2 polygon
+1 1.00 0 -36 14 -30 -14 -18 14 -6 -14 6 14 18 -14 30 0 36 8 polygon
+1.000 0.000 0.000 scb
+(1) {/Times-Roman cf} 2 9 0 1.00 0 64 pinlabel
+(2) {/Times-Roman cf} 2 13 0 1.00 0 -64 pinlabel
+sce
+mark v2 v1 ( %p1 %p2 ) v3 (spice:R) {/Times-Roman cf} ctmk 4 0 1.00 -208 -160
+infolabel
+sce
+(sim:R %p1 %p2) {/Times-Roman cf} 2 4 0 1.00 -208 -208 infolabel
+mark (W) {/Symbol cf} v2 {hS} v1 {/Times-Roman cf} ctmk 20 0 1.00 32 0 label
+sce
+mark v3 (pcb:R) {/Times-Roman cf} ctmk 20 0 1.00 -208 -256 infolabel
+endgate
+} def
+
+/gnd {
+% -32 -60 64 68 bbox
+% trivial
+begingate
+1 1.00 0 0 0 -32 2 polygon
+1 1.00 -32 -32 32 -32 2 polygon
+1 1.00 -18 -46 18 -46 2 polygon
+1 1.00 -4 -60 4 -60 2 polygon
+1.000 0.000 0.000 scb
+(GND) {/Times-Roman cf} 2 1 0 1.00 0 0 pinglobal
+endgate
+} def
+
+/dot {
+% -10 -10 20 20 bbox
+% trivial
+begingate
+248 1.00 0 0 6 0.00 360.00 xcarc
+1.000 0.000 0.000 scb
+(x) {/Times-Roman cf} 2 29 0 1.00 0 0 pinlabel
+endgate
+} def
+
+/vdd {
+% -32 0 64 66 bbox
+% trivial
+begingate
+1 1.00 0 0 0 32 2 polygon
+1 1.00 -32 32 32 32 2 polygon
+(Vdd) {/Times-Roman cf} 2 17 0 0.90 0 38 label
+1.000 0.000 0.000 scb
+(Vdd) {/Times-Roman cf} 2 13 0 1.00 0 0 pinglobal
+endgate
+} def
+
+%%Page: 1 1
+%%PageOrientation: Portrait
+/pgsave save def bop
+% 1688 848 offsets
+1.0000 inchscale
+2.6000 setlinewidth
+
+1.00 0 664 1648 [(5) ] PIC16C54
+1.00 180 -24 2384 [(6) ] LTC490
+1.00 0 712 -160 [(2) ] terminal_block
+1.00 0 1800 944 [(7) ] LTC1152
+1.00 0 -568 1296 [(3) ] DSUB9
+1.00 180 1576 2192 [(1) ] Crystal
+1.00 0 904 1088 [(2) ] ADC12138
+1.00 -181 -56 1664 [(4) ] TK11950
+1 1.00 1432 2288 1304 2288 1304 2208 1144 2208 4 polygon
+1.00 -1 2072 1168 Capacitor
+1.00 0 920 304 [(1) ] LM13700
+1.00 0 1096 -160 [(1) ] terminal_block
+1.00 0 1320 1424 Resistor
+1.00 0 120 1984 Resistor
+1.00 0 328 1456 Resistor
+1.00 -1 -696 2064 Resistor
+1.00 0 408 1600 Resistor
+1.00 0 1384 992 Resistor
+1.00 0 1784 2224 Capacitor
+1.00 -1 1512 720 Capacitor
+1.00 0 2088 832 Capacitor
+1.00 0 -280 1456 Capacitor
+1.00 0 504 416 Capacitor
+1 1.00 664 544 504 544 504 480 3 polygon
+1 1.00 504 352 504 224 664 224 3 polygon
+1 1.00 -664 1328 -664 224 504 224 3 polygon
+1.00 0 -664 224 gnd
+1 1.00 664 160 -472 160 -472 1328 3 polygon
+1 1.00 -696 2000 -696 1392 2 polygon
+1 1.00 -440 2240 -504 2240 -504 1392 3 polygon
+1 1.00 -440 2336 -568 2336 -568 1392 3 polygon
+1 1.00 280 1664 408 1664 408 2336 -24 2336 4 polygon
+1 1.00 -24 2048 344 2048 2 polygon
+1 1.00 344 2048 344 1728 280 1728 3 polygon
+1 1.00 328 1520 328 1600 280 1600 3 polygon
+1 1.00 408 1664 408 1664 2 polygon
+1 1.00 328 1520 408 1520 408 1536 3 polygon
+1.00 -181 1704 1760 [(3) ] TK11950
+1 1.00 1144 736 1352 736 2 polygon
+1.00 0 1352 736 dot
+1 1.00 1608 896 1384 896 1384 928 3 polygon
+1 1.00 1608 1088 1384 1088 1384 1056 3 polygon
+1 1.00 1992 992 2136 992 2136 1232 1384 1232 1384 1088 5 polygon
+1.00 0 1384 1088 dot
+1 1.00 -440 2144 -696 2144 -696 2128 3 polygon
+1 1.00 -440 2048 -536 2048 -536 2000 -696 2000 4 polygon
+1 1.00 -632 1392 -632 2144 2 polygon
+1.00 0 -632 2144 dot
+1.00 0 -696 2000 dot
+1 1.00 -440 1392 -440 1888 408 1888 3 polygon
+1.00 0 408 1888 dot
+1.00 0 408 1664 dot
+1.00 0 328 1520 dot
+1 1.00 1144 2016 1368 2016 1368 2112 1432 2112 4 polygon
+1 1.00 664 2016 568 2016 568 2432 1784 2432 1784 2288 1720 2288 6 polygon
+1 1.00 1352 2016 1784 2016 1784 2160 3 polygon
+1.00 0 1368 2016 dot
+1 1.00 1144 1376 1240 1376 1240 2144 1144 2144 4 polygon
+1 1.00 1144 1312 1224 1312 1224 1632 616 1632 616 1888 664 1888 6 polygon
+1 1.00 1144 1248 1208 1248 1208 1616 600 1616 600 1824 664 1824 6 polygon
+1 1.00 1144 1184 1192 1184 1192 1600 584 1600 584 1760 664 1760 6 polygon
+1 1.00 1144 1120 1176 1120 1176 1584 568 1584 568 1696 664 1696 6 polygon
+1 1.00 1144 1056 1256 1056 1256 1760 1144 1760 4 polygon
+1 1.00 1144 992 1272 992 1272 1696 1144 1696 4 polygon
+1 1.00 1144 2272 1208 2272 1208 2416 24 2416 24 2240 -24 2240 6 polygon
+1 1.00 -24 2144 40 2144 40 2400 1176 2400 1176 2336 1144 2336 6 polygon
+1 1.00 664 736 632 736 632 800 664 800 4 polygon
+1 1.00 664 864 632 864 632 928 664 928 4 polygon
+1 1.00 664 672 600 672 2 polygon
+1.00 0 456 608 gnd
+1.00 0 -280 1360 gnd
+1 1.00 -280 1392 -440 1392 2 polygon
+1.00 0 1368 2112 vdd
+1 1.00 1992 800 2040 800 2040 768 2088 768 4 polygon
+1.00 0 1512 640 dot
+1 1.00 1608 800 1512 800 1512 784 3 polygon
+1.00 0 2088 896 dot
+1 1.00 1992 1088 2072 1088 2072 1104 3 polygon
+1.00 0 2072 1232 dot
+1 1.00 664 96 408 96 408 480 664 480 4 polygon
+1 1.00 408 96 408 0 1208 0 1208 480 1128 480 5 polygon
+1.00 0 408 96 dot
+1 1.00 408 480 408 1040 536 1040 536 1440 664 1440 5 polygon
+1.00 0 408 480 dot
+(Flare Genesis) {/Helvetica cf} 2 16 0 1.50 1896 432 label
+(LED Interface) {/Helvetica cf} 2 16 0 1.50 1896 336 label
+1 1.00 664 416 632 416 632 16 712 16 712 -176 5 polygon
+1 1.00 664 352 616 352 616 -176 3 polygon
+1 1.00 1000 -176 1000 -16 1240 -16 1240 352 1144 352 5 polygon
+1 1.00 1096 -176 1096 -32 1256 -32 1256 416 1144 416 5 polygon
+1 1.00 1192 -176 1192 -288 344 -288 344 1072 504 1072 504 1248 664 1248
+7 polygon
+1 1.00 1144 288 1304 288 1304 -320 296 -320 296 1104 472 1104 472 1504 664
+1504 8 polygon
+1 1.00 1144 672 1288 672 1288 800 1144 800 4 polygon
+1 1.00 1384 1072 1288 1072 1288 800 1192 800 4 polygon
+1.00 0 1288 800 dot
+1.00 0 1384 1072 dot
+1 1.00 1144 864 1240 864 1240 928 1144 928 4 polygon
+1 1.00 1560 848 1560 992 1608 992 3 polygon
+1 1.00 1560 848 1352 848 1352 640 2136 640 2136 896 1992 896 6 polygon
+1 1.00 1512 656 1512 640 2 polygon
+1 1.00 1576 800 1576 720 2 polygon
+1.00 0 1576 800 dot
+1.00 0 1576 720 gnd
+1 1.00 -392 1664 -440 1664 2 polygon
+1.00 0 -440 1664 dot
+1 1.00 -392 1728 -424 1728 -424 1856 472 1856 472 2144 664 2144 6 polygon
+1 1.00 120 1920 120 1856 2 polygon
+1.00 0 120 2048 dot
+1.00 0 120 1856 dot
+1 1.00 -392 1600 -408 1600 -408 1520 -280 1520 4 polygon
+1 1.00 -280 1360 -280 1392 2 polygon
+1.00 0 -280 1392 dot
+1 1.00 328 1392 328 1248 -472 1248 3 polygon
+1.00 0 -472 1248 dot
+1 1.00 1144 224 1320 224 2 polygon
+1 1.00 1176 224 1176 32 504 32 504 160 4 polygon
+1.00 0 504 160 dot
+1.00 0 1176 224 dot
+1 1.00 1320 1360 1320 224 2 polygon
+1 1.00 2136 1232 2136 1696 2040 1696 3 polygon
+1.00 0 2136 1232 dot
+1 1.00 2040 1760 2136 1760 2136 1936 1320 1936 1320 1760 1368 1760 6 polygon
+1 1.00 1320 1488 1320 1584 2088 1584 2088 1824 2040 1824 5 polygon
+1 1.00 664 992 600 992 600 1184 664 1184 4 polygon
+1 1.00 664 1120 600 1120 2 polygon
+1 1.00 664 1056 600 1056 2 polygon
+1.00 0 600 1056 dot
+1.00 0 600 1120 dot
+1 1.00 600 992 600 608 2 polygon
+1.00 0 600 672 dot
+1.00 0 600 992 dot
+1 1.00 1240 864 1240 608 456 608 3 polygon
+1.00 0 600 608 dot
+1.00 0 1240 864 dot
+(is not complete!) {CR} (this schematic) {/Helvetica cf} 4 16 0 1.00 1864 -80
+label
+0 1.00 1592 -176 1592 496 2456 496 2456 -176 4 polygon
+1 1.00 1592 400 2456 400 2 polygon
+1 1.00 1592 304 2456 304 2 polygon
+(1.0) {/Helvetica cf} 2 16 0 1.50 1896 240 label
+1 1.00 1592 208 2456 208 2 polygon
+(Project:) {/Helvetica cf} 2 16 0 1.50 1624 432 label
+(Name:) {/Helvetica cf} 2 16 0 1.50 1624 336 label
+(Revision:) {/Helvetica cf} 2 16 0 1.50 1624 240 label
+(Design:) {/Helvetica cf} 2 16 0 1.50 1624 144 label
+(Date:) {/Helvetica cf} 2 16 0 1.50 1624 48 label
+(Notes:) {/Helvetica cf} 2 16 0 1.50 1624 -48 label
+1 1.00 1592 112 2456 112 2 polygon
+1 1.00 1592 16 2456 16 2 polygon
+(Harry Eaton) {/Helvetica cf} 2 16 0 1.50 1912 144 label
+0 1.00 1576 -192 1576 512 2472 512 2472 -192 4 polygon
+1.00 0 -664 224 dot
+pgsave restore showpage
+
+%%Trailer
+XCIRCsave restore
+%%EOF
diff --git a/tutorial/pcb/LED b/tutorial/pcb/LED
new file mode 100755
index 0000000..dcfdb16
--- /dev/null
+++ b/tutorial/pcb/LED
@@ -0,0 +1,1794 @@
+# release: pcb 1.7.0.ALPHA
+# date: Sat Jan 16 20:06:58 1999
+# user: root (root)
+# host: localhost
+
+PCB("" 3500 3300)
+
+Grid(5 0 0 0)
+Cursor(65 880 4)
+Flags(0x000001d0)
+Groups("4,5,6,c:1,2,3,s:8:7:")
+Styles("Signal,10,40,20:Power,25,60,35:Fat,40,60,35:Skinny,8,36,20")
+
+Symbol(' ' 18)
+(
+)
+Symbol('!' 12)
+(
+ SymbolLine(0 35 0 40 8)
+ SymbolLine(0 0 0 25 8)
+)
+Symbol('"' 12)
+(
+ SymbolLine(0 0 0 10 8)
+ SymbolLine(10 0 10 10 8)
+)
+Symbol('#' 12)
+(
+ SymbolLine(0 25 20 25 8)
+ SymbolLine(0 15 20 15 8)
+ SymbolLine(15 10 15 30 8)
+ SymbolLine(5 10 5 30 8)
+)
+Symbol('$' 12)
+(
+ SymbolLine(15 5 20 10 8)
+ SymbolLine(5 5 15 5 8)
+ SymbolLine(0 10 5 5 8)
+ SymbolLine(0 10 0 15 8)
+ SymbolLine(0 15 5 20 8)
+ SymbolLine(5 20 15 20 8)
+ SymbolLine(15 20 20 25 8)
+ SymbolLine(20 25 20 30 8)
+ SymbolLine(15 35 20 30 8)
+ SymbolLine(5 35 15 35 8)
+ SymbolLine(0 30 5 35 8)
+ SymbolLine(10 0 10 40 8)
+)
+Symbol('%' 12)
+(
+ SymbolLine(0 5 0 10 8)
+ SymbolLine(0 5 5 0 8)
+ SymbolLine(5 0 10 0 8)
+ SymbolLine(10 0 15 5 8)
+ SymbolLine(15 5 15 10 8)
+ SymbolLine(10 15 15 10 8)
+ SymbolLine(5 15 10 15 8)
+ SymbolLine(0 10 5 15 8)
+ SymbolLine(0 40 40 0 8)
+ SymbolLine(35 40 40 35 8)
+ SymbolLine(40 30 40 35 8)
+ SymbolLine(35 25 40 30 8)
+ SymbolLine(30 25 35 25 8)
+ SymbolLine(25 30 30 25 8)
+ SymbolLine(25 30 25 35 8)
+ SymbolLine(25 35 30 40 8)
+ SymbolLine(30 40 35 40 8)
+)
+Symbol('&' 12)
+(
+ SymbolLine(0 35 5 40 8)
+ SymbolLine(0 5 0 15 8)
+ SymbolLine(0 5 5 0 8)
+ SymbolLine(0 25 15 10 8)
+ SymbolLine(5 40 10 40 8)
+ SymbolLine(10 40 20 30 8)
+ SymbolLine(0 15 25 40 8)
+ SymbolLine(5 0 10 0 8)
+ SymbolLine(10 0 15 5 8)
+ SymbolLine(15 5 15 10 8)
+ SymbolLine(0 25 0 35 8)
+)
+Symbol(''' 12)
+(
+ SymbolLine(0 10 10 0 8)
+)
+Symbol('(' 12)
+(
+ SymbolLine(0 35 5 40 8)
+ SymbolLine(0 5 5 0 8)
+ SymbolLine(0 5 0 35 8)
+)
+Symbol(')' 12)
+(
+ SymbolLine(0 0 5 5 8)
+ SymbolLine(5 5 5 35 8)
+ SymbolLine(0 40 5 35 8)
+)
+Symbol('*' 12)
+(
+ SymbolLine(0 10 20 30 8)
+ SymbolLine(0 30 20 10 8)
+ SymbolLine(0 20 20 20 8)
+ SymbolLine(10 10 10 30 8)
+)
+Symbol('+' 12)
+(
+ SymbolLine(0 20 20 20 8)
+ SymbolLine(10 10 10 30 8)
+)
+Symbol(',' 12)
+(
+ SymbolLine(0 50 10 40 8)
+)
+Symbol('-' 12)
+(
+ SymbolLine(0 20 20 20 8)
+)
+Symbol('.' 12)
+(
+ SymbolLine(0 40 5 40 8)
+)
+Symbol('/' 12)
+(
+ SymbolLine(0 35 30 5 8)
+)
+Symbol('0' 12)
+(
+ SymbolLine(0 35 5 40 8)
+ SymbolLine(0 5 0 35 8)
+ SymbolLine(0 5 5 0 8)
+ SymbolLine(5 0 15 0 8)
+ SymbolLine(15 0 20 5 8)
+ SymbolLine(20 5 20 35 8)
+ SymbolLine(15 40 20 35 8)
+ SymbolLine(5 40 15 40 8)
+ SymbolLine(0 30 20 10 8)
+)
+Symbol('1' 12)
+(
+ SymbolLine(5 40 15 40 8)
+ SymbolLine(10 0 10 40 8)
+ SymbolLine(0 10 10 0 8)
+)
+Symbol('2' 12)
+(
+ SymbolLine(0 5 5 0 8)
+ SymbolLine(5 0 20 0 8)
+ SymbolLine(20 0 25 5 8)
+ SymbolLine(25 5 25 15 8)
+ SymbolLine(0 40 25 15 8)
+ SymbolLine(0 40 25 40 8)
+)
+Symbol('3' 12)
+(
+ SymbolLine(0 5 5 0 8)
+ SymbolLine(5 0 15 0 8)
+ SymbolLine(15 0 20 5 8)
+ SymbolLine(20 5 20 35 8)
+ SymbolLine(15 40 20 35 8)
+ SymbolLine(5 40 15 40 8)
+ SymbolLine(0 35 5 40 8)
+ SymbolLine(5 20 20 20 8)
+)
+Symbol('4' 12)
+(
+ SymbolLine(0 20 20 0 8)
+ SymbolLine(0 20 25 20 8)
+ SymbolLine(20 0 20 40 8)
+)
+Symbol('5' 12)
+(
+ SymbolLine(0 0 20 0 8)
+ SymbolLine(0 0 0 20 8)
+ SymbolLine(0 20 5 15 8)
+ SymbolLine(5 15 15 15 8)
+ SymbolLine(15 15 20 20 8)
+ SymbolLine(20 20 20 35 8)
+ SymbolLine(15 40 20 35 8)
+ SymbolLine(5 40 15 40 8)
+ SymbolLine(0 35 5 40 8)
+)
+Symbol('6' 12)
+(
+ SymbolLine(15 0 20 5 8)
+ SymbolLine(5 0 15 0 8)
+ SymbolLine(0 5 5 0 8)
+ SymbolLine(0 5 0 35 8)
+ SymbolLine(0 35 5 40 8)
+ SymbolLine(15 20 20 25 8)
+ SymbolLine(0 20 15 20 8)
+ SymbolLine(5 40 15 40 8)
+ SymbolLine(15 40 20 35 8)
+ SymbolLine(20 25 20 35 8)
+)
+Symbol('7' 12)
+(
+ SymbolLine(0 40 25 15 8)
+ SymbolLine(25 0 25 15 8)
+ SymbolLine(0 0 25 0 8)
+)
+Symbol('8' 12)
+(
+ SymbolLine(0 35 5 40 8)
+ SymbolLine(0 25 0 35 8)
+ SymbolLine(0 25 5 20 8)
+ SymbolLine(5 20 15 20 8)
+ SymbolLine(15 20 20 25 8)
+ SymbolLine(20 25 20 35 8)
+ SymbolLine(15 40 20 35 8)
+ SymbolLine(5 40 15 40 8)
+ SymbolLine(0 15 5 20 8)
+ SymbolLine(0 5 0 15 8)
+ SymbolLine(0 5 5 0 8)
+ SymbolLine(5 0 15 0 8)
+ SymbolLine(15 0 20 5 8)
+ SymbolLine(20 5 20 15 8)
+ SymbolLine(15 20 20 15 8)
+)
+Symbol('9' 12)
+(
+ SymbolLine(0 40 20 20 8)
+ SymbolLine(20 5 20 20 8)
+ SymbolLine(15 0 20 5 8)
+ SymbolLine(5 0 15 0 8)
+ SymbolLine(0 5 5 0 8)
+ SymbolLine(0 5 0 15 8)
+ SymbolLine(0 15 5 20 8)
+ SymbolLine(5 20 20 20 8)
+)
+Symbol(':' 12)
+(
+ SymbolLine(0 15 5 15 8)
+ SymbolLine(0 25 5 25 8)
+)
+Symbol(';' 12)
+(
+ SymbolLine(0 40 10 30 8)
+ SymbolLine(10 15 10 20 8)
+)
+Symbol('<' 12)
+(
+ SymbolLine(0 20 10 10 8)
+ SymbolLine(0 20 10 30 8)
+)
+Symbol('=' 12)
+(
+ SymbolLine(0 15 20 15 8)
+ SymbolLine(0 25 20 25 8)
+)
+Symbol('>' 12)
+(
+ SymbolLine(0 10 10 20 8)
+ SymbolLine(0 30 10 20 8)
+)
+Symbol('?' 12)
+(
+ SymbolLine(10 20 10 25 8)
+ SymbolLine(10 35 10 40 8)
+ SymbolLine(0 5 0 10 8)
+ SymbolLine(0 5 5 0 8)
+ SymbolLine(5 0 15 0 8)
+ SymbolLine(15 0 20 5 8)
+ SymbolLine(20 5 20 10 8)
+ SymbolLine(10 20 20 10 8)
+)
+Symbol('A' 12)
+(
+ SymbolLine(0 5 0 40 8)
+ SymbolLine(0 5 5 0 8)
+ SymbolLine(5 0 20 0 8)
+ SymbolLine(20 0 25 5 8)
+ SymbolLine(25 5 25 40 8)
+ SymbolLine(0 20 25 20 8)
+)
+Symbol('B' 12)
+(
+ SymbolLine(0 40 20 40 8)
+ SymbolLine(20 40 25 35 8)
+ SymbolLine(25 25 25 35 8)
+ SymbolLine(20 20 25 25 8)
+ SymbolLine(5 20 20 20 8)
+ SymbolLine(5 0 5 40 8)
+ SymbolLine(0 0 20 0 8)
+ SymbolLine(20 0 25 5 8)
+ SymbolLine(25 5 25 15 8)
+ SymbolLine(20 20 25 15 8)
+)
+Symbol('C' 12)
+(
+ SymbolLine(5 40 20 40 8)
+ SymbolLine(0 35 5 40 8)
+ SymbolLine(0 5 0 35 8)
+ SymbolLine(0 5 5 0 8)
+ SymbolLine(5 0 20 0 8)
+)
+Symbol('D' 12)
+(
+ SymbolLine(5 0 5 40 8)
+ SymbolLine(20 0 25 5 8)
+ SymbolLine(25 5 25 35 8)
+ SymbolLine(20 40 25 35 8)
+ SymbolLine(0 40 20 40 8)
+ SymbolLine(0 0 20 0 8)
+)
+Symbol('E' 12)
+(
+ SymbolLine(0 20 15 20 8)
+ SymbolLine(0 40 20 40 8)
+ SymbolLine(0 0 0 40 8)
+ SymbolLine(0 0 20 0 8)
+)
+Symbol('F' 12)
+(
+ SymbolLine(0 0 0 40 8)
+ SymbolLine(0 0 20 0 8)
+ SymbolLine(0 20 15 20 8)
+)
+Symbol('G' 12)
+(
+ SymbolLine(20 0 25 5 8)
+ SymbolLine(5 0 20 0 8)
+ SymbolLine(0 5 5 0 8)
+ SymbolLine(0 5 0 35 8)
+ SymbolLine(0 35 5 40 8)
+ SymbolLine(5 40 20 40 8)
+ SymbolLine(20 40 25 35 8)
+ SymbolLine(25 25 25 35 8)
+ SymbolLine(20 20 25 25 8)
+ SymbolLine(10 20 20 20 8)
+)
+Symbol('H' 12)
+(
+ SymbolLine(0 0 0 40 8)
+ SymbolLine(25 0 25 40 8)
+ SymbolLine(0 20 25 20 8)
+)
+Symbol('I' 12)
+(
+ SymbolLine(0 0 10 0 8)
+ SymbolLine(5 0 5 40 8)
+ SymbolLine(0 40 10 40 8)
+)
+Symbol('J' 12)
+(
+ SymbolLine(0 0 15 0 8)
+ SymbolLine(15 0 15 35 8)
+ SymbolLine(10 40 15 35 8)
+ SymbolLine(5 40 10 40 8)
+ SymbolLine(0 35 5 40 8)
+)
+Symbol('K' 12)
+(
+ SymbolLine(0 0 0 40 8)
+ SymbolLine(0 20 20 0 8)
+ SymbolLine(0 20 20 40 8)
+)
+Symbol('L' 12)
+(
+ SymbolLine(0 0 0 40 8)
+ SymbolLine(0 40 20 40 8)
+)
+Symbol('M' 12)
+(
+ SymbolLine(0 0 0 40 8)
+ SymbolLine(0 0 15 15 8)
+ SymbolLine(15 15 30 0 8)
+ SymbolLine(30 0 30 40 8)
+)
+Symbol('N' 12)
+(
+ SymbolLine(0 0 0 40 8)
+ SymbolLine(0 0 0 5 8)
+ SymbolLine(0 5 25 30 8)
+ SymbolLine(25 0 25 40 8)
+)
+Symbol('O' 12)
+(
+ SymbolLine(0 5 0 35 8)
+ SymbolLine(0 5 5 0 8)
+ SymbolLine(5 0 15 0 8)
+ SymbolLine(15 0 20 5 8)
+ SymbolLine(20 5 20 35 8)
+ SymbolLine(15 40 20 35 8)
+ SymbolLine(5 40 15 40 8)
+ SymbolLine(0 35 5 40 8)
+)
+Symbol('P' 12)
+(
+ SymbolLine(5 0 5 40 8)
+ SymbolLine(0 0 20 0 8)
+ SymbolLine(20 0 25 5 8)
+ SymbolLine(25 5 25 15 8)
+ SymbolLine(20 20 25 15 8)
+ SymbolLine(5 20 20 20 8)
+)
+Symbol('Q' 12)
+(
+ SymbolLine(0 5 0 35 8)
+ SymbolLine(0 5 5 0 8)
+ SymbolLine(5 0 15 0 8)
+ SymbolLine(15 0 20 5 8)
+ SymbolLine(20 5 20 35 8)
+ SymbolLine(15 40 20 35 8)
+ SymbolLine(5 40 15 40 8)
+ SymbolLine(0 35 5 40 8)
+ SymbolLine(10 30 20 40 8)
+)
+Symbol('R' 12)
+(
+ SymbolLine(0 0 20 0 8)
+ SymbolLine(20 0 25 5 8)
+ SymbolLine(25 5 25 15 8)
+ SymbolLine(20 20 25 15 8)
+ SymbolLine(5 20 20 20 8)
+ SymbolLine(5 0 5 40 8)
+ SymbolLine(5 20 25 40 8)
+)
+Symbol('S' 12)
+(
+ SymbolLine(20 0 25 5 8)
+ SymbolLine(5 0 20 0 8)
+ SymbolLine(0 5 5 0 8)
+ SymbolLine(0 5 0 15 8)
+ SymbolLine(0 15 5 20 8)
+ SymbolLine(5 20 20 20 8)
+ SymbolLine(20 20 25 25 8)
+ SymbolLine(25 25 25 35 8)
+ SymbolLine(20 40 25 35 8)
+ SymbolLine(5 40 20 40 8)
+ SymbolLine(0 35 5 40 8)
+)
+Symbol('T' 12)
+(
+ SymbolLine(0 0 20 0 8)
+ SymbolLine(10 0 10 40 8)
+)
+Symbol('U' 12)
+(
+ SymbolLine(0 0 0 35 8)
+ SymbolLine(0 35 5 40 8)
+ SymbolLine(5 40 15 40 8)
+ SymbolLine(15 40 20 35 8)
+ SymbolLine(20 0 20 35 8)
+)
+Symbol('V' 12)
+(
+ SymbolLine(0 0 0 30 8)
+ SymbolLine(0 30 10 40 8)
+ SymbolLine(10 40 20 30 8)
+ SymbolLine(20 0 20 30 8)
+)
+Symbol('W' 12)
+(
+ SymbolLine(0 0 0 40 8)
+ SymbolLine(0 40 15 25 8)
+ SymbolLine(15 25 30 40 8)
+ SymbolLine(30 0 30 40 8)
+)
+Symbol('X' 12)
+(
+ SymbolLine(0 0 0 5 8)
+ SymbolLine(0 5 25 30 8)
+ SymbolLine(25 30 25 40 8)
+ SymbolLine(0 30 0 40 8)
+ SymbolLine(0 30 25 5 8)
+ SymbolLine(25 0 25 5 8)
+)
+Symbol('Y' 12)
+(
+ SymbolLine(0 0 0 5 8)
+ SymbolLine(0 5 10 15 8)
+ SymbolLine(10 15 20 5 8)
+ SymbolLine(20 0 20 5 8)
+ SymbolLine(10 15 10 40 8)
+)
+Symbol('Z' 12)
+(
+ SymbolLine(0 0 25 0 8)
+ SymbolLine(25 0 25 5 8)
+ SymbolLine(0 30 25 5 8)
+ SymbolLine(0 30 0 40 8)
+ SymbolLine(0 40 25 40 8)
+)
+Symbol('[' 12)
+(
+ SymbolLine(0 0 5 0 8)
+ SymbolLine(0 0 0 40 8)
+ SymbolLine(0 40 5 40 8)
+)
+Symbol('\' 12)
+(
+ SymbolLine(0 5 30 35 8)
+)
+Symbol(']' 12)
+(
+ SymbolLine(0 0 5 0 8)
+ SymbolLine(5 0 5 40 8)
+ SymbolLine(0 40 5 40 8)
+)
+Symbol('^' 12)
+(
+ SymbolLine(0 5 5 0 8)
+ SymbolLine(5 0 10 5 8)
+)
+Symbol('_' 12)
+(
+ SymbolLine(0 40 20 40 8)
+)
+Symbol('a' 12)
+(
+ SymbolLine(15 20 20 25 8)
+ SymbolLine(5 20 15 20 8)
+ SymbolLine(0 25 5 20 8)
+ SymbolLine(0 25 0 35 8)
+ SymbolLine(0 35 5 40 8)
+ SymbolLine(20 20 20 35 8)
+ SymbolLine(20 35 25 40 8)
+ SymbolLine(5 40 15 40 8)
+ SymbolLine(15 40 20 35 8)
+)
+Symbol('b' 12)
+(
+ SymbolLine(0 0 0 40 8)
+ SymbolLine(0 35 5 40 8)
+ SymbolLine(5 40 15 40 8)
+ SymbolLine(15 40 20 35 8)
+ SymbolLine(20 25 20 35 8)
+ SymbolLine(15 20 20 25 8)
+ SymbolLine(5 20 15 20 8)
+ SymbolLine(0 25 5 20 8)
+)
+Symbol('c' 12)
+(
+ SymbolLine(5 20 20 20 8)
+ SymbolLine(0 25 5 20 8)
+ SymbolLine(0 25 0 35 8)
+ SymbolLine(0 35 5 40 8)
+ SymbolLine(5 40 20 40 8)
+)
+Symbol('d' 12)
+(
+ SymbolLine(20 0 20 40 8)
+ SymbolLine(15 40 20 35 8)
+ SymbolLine(5 40 15 40 8)
+ SymbolLine(0 35 5 40 8)
+ SymbolLine(0 25 0 35 8)
+ SymbolLine(0 25 5 20 8)
+ SymbolLine(5 20 15 20 8)
+ SymbolLine(15 20 20 25 8)
+)
+Symbol('e' 12)
+(
+ SymbolLine(5 40 20 40 8)
+ SymbolLine(0 35 5 40 8)
+ SymbolLine(0 25 0 35 8)
+ SymbolLine(0 25 5 20 8)
+ SymbolLine(5 20 15 20 8)
+ SymbolLine(15 20 20 25 8)
+ SymbolLine(0 30 20 30 8)
+ SymbolLine(20 30 20 25 8)
+)
+Symbol('f' 10)
+(
+ SymbolLine(5 5 5 40 8)
+ SymbolLine(5 5 10 0 8)
+ SymbolLine(10 0 15 0 8)
+ SymbolLine(0 20 10 20 8)
+)
+Symbol('g' 12)
+(
+ SymbolLine(15 20 20 25 8)
+ SymbolLine(5 20 15 20 8)
+ SymbolLine(0 25 5 20 8)
+ SymbolLine(0 25 0 35 8)
+ SymbolLine(0 35 5 40 8)
+ SymbolLine(5 40 15 40 8)
+ SymbolLine(15 40 20 35 8)
+ SymbolLine(0 50 5 55 8)
+ SymbolLine(5 55 15 55 8)
+ SymbolLine(15 55 20 50 8)
+ SymbolLine(20 20 20 50 8)
+)
+Symbol('h' 12)
+(
+ SymbolLine(0 0 0 40 8)
+ SymbolLine(0 25 5 20 8)
+ SymbolLine(5 20 15 20 8)
+ SymbolLine(15 20 20 25 8)
+ SymbolLine(20 25 20 40 8)
+)
+Symbol('i' 10)
+(
+ SymbolLine(0 10 0 15 8)
+ SymbolLine(0 25 0 40 8)
+)
+Symbol('j' 10)
+(
+ SymbolLine(5 10 5 15 8)
+ SymbolLine(5 25 5 50 8)
+ SymbolLine(0 55 5 50 8)
+)
+Symbol('k' 12)
+(
+ SymbolLine(0 0 0 40 8)
+ SymbolLine(0 25 15 40 8)
+ SymbolLine(0 25 10 15 8)
+)
+Symbol('l' 10)
+(
+ SymbolLine(0 0 0 35 8)
+ SymbolLine(0 35 5 40 8)
+)
+Symbol('m' 12)
+(
+ SymbolLine(5 25 5 40 8)
+ SymbolLine(5 25 10 20 8)
+ SymbolLine(10 20 15 20 8)
+ SymbolLine(15 20 20 25 8)
+ SymbolLine(20 25 20 40 8)
+ SymbolLine(20 25 25 20 8)
+ SymbolLine(25 20 30 20 8)
+ SymbolLine(30 20 35 25 8)
+ SymbolLine(35 25 35 40 8)
+ SymbolLine(0 20 5 25 8)
+)
+Symbol('n' 12)
+(
+ SymbolLine(5 25 5 40 8)
+ SymbolLine(5 25 10 20 8)
+ SymbolLine(10 20 15 20 8)
+ SymbolLine(15 20 20 25 8)
+ SymbolLine(20 25 20 40 8)
+ SymbolLine(0 20 5 25 8)
+)
+Symbol('o' 12)
+(
+ SymbolLine(0 25 0 35 8)
+ SymbolLine(0 25 5 20 8)
+ SymbolLine(5 20 15 20 8)
+ SymbolLine(15 20 20 25 8)
+ SymbolLine(20 25 20 35 8)
+ SymbolLine(15 40 20 35 8)
+ SymbolLine(5 40 15 40 8)
+ SymbolLine(0 35 5 40 8)
+)
+Symbol('p' 12)
+(
+ SymbolLine(5 25 5 55 8)
+ SymbolLine(0 20 5 25 8)
+ SymbolLine(5 25 10 20 8)
+ SymbolLine(10 20 20 20 8)
+ SymbolLine(20 20 25 25 8)
+ SymbolLine(25 25 25 35 8)
+ SymbolLine(20 40 25 35 8)
+ SymbolLine(10 40 20 40 8)
+ SymbolLine(5 35 10 40 8)
+)
+Symbol('q' 12)
+(
+ SymbolLine(20 25 20 55 8)
+ SymbolLine(15 20 20 25 8)
+ SymbolLine(5 20 15 20 8)
+ SymbolLine(0 25 5 20 8)
+ SymbolLine(0 25 0 35 8)
+ SymbolLine(0 35 5 40 8)
+ SymbolLine(5 40 15 40 8)
+ SymbolLine(15 40 20 35 8)
+)
+Symbol('r' 12)
+(
+ SymbolLine(5 25 5 40 8)
+ SymbolLine(5 25 10 20 8)
+ SymbolLine(10 20 20 20 8)
+ SymbolLine(0 20 5 25 8)
+)
+Symbol('s' 12)
+(
+ SymbolLine(5 40 20 40 8)
+ SymbolLine(20 40 25 35 8)
+ SymbolLine(20 30 25 35 8)
+ SymbolLine(5 30 20 30 8)
+ SymbolLine(0 25 5 30 8)
+ SymbolLine(0 25 5 20 8)
+ SymbolLine(5 20 20 20 8)
+ SymbolLine(20 20 25 25 8)
+ SymbolLine(0 35 5 40 8)
+)
+Symbol('t' 10)
+(
+ SymbolLine(5 0 5 35 8)
+ SymbolLine(5 35 10 40 8)
+ SymbolLine(0 15 10 15 8)
+)
+Symbol('u' 12)
+(
+ SymbolLine(0 20 0 35 8)
+ SymbolLine(0 35 5 40 8)
+ SymbolLine(5 40 15 40 8)
+ SymbolLine(15 40 20 35 8)
+ SymbolLine(20 20 20 35 8)
+)
+Symbol('v' 12)
+(
+ SymbolLine(0 20 0 30 8)
+ SymbolLine(0 30 10 40 8)
+ SymbolLine(10 40 20 30 8)
+ SymbolLine(20 20 20 30 8)
+)
+Symbol('w' 12)
+(
+ SymbolLine(0 20 0 35 8)
+ SymbolLine(0 35 5 40 8)
+ SymbolLine(5 40 10 40 8)
+ SymbolLine(10 40 15 35 8)
+ SymbolLine(15 20 15 35 8)
+ SymbolLine(15 35 20 40 8)
+ SymbolLine(20 40 25 40 8)
+ SymbolLine(25 40 30 35 8)
+ SymbolLine(30 20 30 35 8)
+)
+Symbol('x' 12)
+(
+ SymbolLine(0 20 20 40 8)
+ SymbolLine(0 40 20 20 8)
+)
+Symbol('y' 12)
+(
+ SymbolLine(0 20 0 35 8)
+ SymbolLine(0 35 5 40 8)
+ SymbolLine(20 20 20 50 8)
+ SymbolLine(15 55 20 50 8)
+ SymbolLine(5 55 15 55 8)
+ SymbolLine(0 50 5 55 8)
+ SymbolLine(5 40 15 40 8)
+ SymbolLine(15 40 20 35 8)
+)
+Symbol('z' 12)
+(
+ SymbolLine(0 20 20 20 8)
+ SymbolLine(0 40 20 20 8)
+ SymbolLine(0 40 20 40 8)
+)
+Symbol('{' 12)
+(
+ SymbolLine(5 5 10 0 8)
+ SymbolLine(5 5 5 15 8)
+ SymbolLine(0 20 5 15 8)
+ SymbolLine(0 20 5 25 8)
+ SymbolLine(5 25 5 35 8)
+ SymbolLine(5 35 10 40 8)
+)
+Symbol('|' 12)
+(
+ SymbolLine(0 0 0 40 8)
+)
+Symbol('}' 12)
+(
+ SymbolLine(0 0 5 5 8)
+ SymbolLine(5 5 5 15 8)
+ SymbolLine(5 15 10 20 8)
+ SymbolLine(5 25 10 20 8)
+ SymbolLine(5 25 5 35 8)
+ SymbolLine(0 40 5 35 8)
+)
+Symbol('~' 12)
+(
+ SymbolLine(0 25 5 20 8)
+ SymbolLine(5 20 10 20 8)
+ SymbolLine(10 20 15 25 8)
+ SymbolLine(15 25 20 25 8)
+ SymbolLine(20 25 25 20 8)
+)
+Via(2075 1455 50 30 28 "" 0x12120002)
+Via(1790 1570 50 30 28 "" 0x12120002)
+Via(1450 1575 50 30 28 "" 0x12120002)
+Via(1070 1265 50 30 28 "" 0x00000002)
+Via(1520 2495 50 30 28 "" 0x00000002)
+Via(465 3015 110 30 110 "" 0x0000000a)
+Via(1605 2660 50 30 28 "" 0x00000002)
+Via(1985 1300 50 30 28 "" 0x00000002)
+Via(465 605 110 30 110 "" 0x0000000a)
+Via(2965 595 110 30 110 "" 0x0000000a)
+Via(2965 3005 110 30 110 "" 0x0000000a)
+Via(1185 2660 50 30 28 "" 0x00000002)
+
+Element(0x00000000 "3 TERM BLOCK" "J2" "DK ED1602-ND" 1695 2925 -590 76 0 150 0x00000000)
+(
+ Pin(0 0 110 30 140 48 "1" "1" 0x00000001)
+ Pin(-194 0 110 30 140 48 "2" "2" 0x00000001)
+ Pin(-388 0 110 30 140 48 "3" "3" 0x00000001)
+ ElementLine (-388 160 -388 140 10)
+ ElementLine (-194 160 -194 140 10)
+ ElementLine (0 160 0 140 10)
+ ElementLine (81 -170 101 -170 10)
+ ElementLine (81 -190 81 -170 10)
+ ElementLine (101 -190 81 -190 10)
+ ElementLine (-509 -170 -489 -170 10)
+ ElementLine (-509 -190 -509 -170 10)
+ ElementLine (-489 -190 -509 -190 10)
+ ElementLine (101 -200 101 160 10)
+ ElementLine (-489 -200 101 -200 10)
+ ElementLine (-489 160 -489 -200 10)
+ ElementLine (101 160 -489 160 10)
+ )
+
+Element(0x00000000 "RS422 Transciever" "U6" "LTC490" 1005 895 -505 -55 0 150 0x00000000)
+(
+ Pin(0 0 60 30 90 28 "Vcc" "1" 0x00000101)
+ Pin(0 -100 60 30 90 28 "R" "2" 0x00000001)
+ Pin(0 -200 60 30 90 28 "D" "3" 0x00000001)
+ Pin(0 -300 60 30 90 28 "GND" "4" 0x00000001)
+ Pin(-300 -300 60 30 90 28 "Y" "5" 0x00000001)
+ Pin(-300 -200 60 30 90 28 "Z" "6" 0x00000001)
+ Pin(-300 -100 60 30 90 28 "B" "7" 0x00000001)
+ Pin(-300 0 60 30 90 28 "A" "8" 0x00000001)
+ ElementLine (50 50 50 -350 10)
+ ElementLine (50 -350 -350 -350 10)
+ ElementLine (-350 -350 -350 50 10)
+ ElementLine (50 50 -100 50 10)
+ ElementLine (-200 50 -350 50 10)
+ ElementArc (-150 50 50 50 180 180 10)
+ )
+
+Element(0x00000000 "PIC16C54A" "U5" "PIC16C54" 1195 860 465 80 0 150 0x00000000)
+(
+ Pin(0 0 60 30 90 28 "RA2" "1" 0x00000101)
+ Pin(100 0 60 30 90 28 "RA3" "2" 0x00000001)
+ Pin(200 0 60 30 90 28 "RTCC" "3" 0x00000001)
+ Pin(300 0 60 30 90 28 "/MCLR" "4" 0x00000001)
+ Pin(400 0 60 30 90 28 "Vss" "5" 0x00000001)
+ Pin(500 0 60 30 90 28 "RB0" "6" 0x00000001)
+ Pin(600 0 60 30 90 28 "RB1" "7" 0x00000001)
+ Pin(700 0 60 30 90 28 "RB2" "8" 0x00000001)
+ Pin(800 0 60 30 90 28 "RB3" "9" 0x00000001)
+ Pin(800 -300 60 30 90 28 "RB4" "10" 0x00000001)
+ Pin(700 -300 60 30 90 28 "RB5" "11" 0x00000001)
+ Pin(600 -300 60 30 90 28 "RB6" "12" 0x00000001)
+ Pin(500 -300 60 30 90 28 "RB7" "13" 0x00000001)
+ Pin(400 -300 60 30 90 28 "Vdd" "14" 0x00000001)
+ Pin(300 -300 60 30 90 28 "OSC2/CLKOUT" "15" 0x00000001)
+ Pin(200 -300 60 30 90 28 "OSC1/CLKIN" "16" 0x00000001)
+ Pin(100 -300 60 30 90 28 "RA0" "17" 0x00000001)
+ Pin(0 -300 60 30 90 28 "RA1" "18" 0x00000001)
+ ElementLine (-50 50 850 50 10)
+ ElementLine (850 50 850 -350 10)
+ ElementLine (850 -350 -50 -350 10)
+ ElementLine (-50 50 -50 -100 10)
+ ElementLine (-50 -200 -50 -350 10)
+ ElementArc (-50 -150 50 50 90 180 10)
+ )
+
+Element(0x00000000 "SMD Cap" "C17" "" 2155 815 -90 -329 0 150 0x00000000)
+(
+ Pin(0 0 80 30 110 35 "1" "1" 0x00000001)
+ Pin(0 -200 80 30 110 35 "2" "2" 0x00000001)
+ ElementLine (-50 50 50 50 10)
+ ElementLine (50 50 50 -250 10)
+ ElementLine (50 -250 -50 -250 10)
+ ElementLine (-50 -250 -50 50 10)
+ )
+
+Element(0x00000000 "SMD 0805" "C13" "" 2525 1510 -30 45 0 150 0x00000000)
+(
+ Pad(0 0 0 0 60 30 90 "1" "1" 0x00000100)
+ Pad(0 -90 0 -90 60 30 90 "2" "2" 0x00000100)
+ ElementLine (-35 -125 -35 35 10)
+ ElementLine (35 -125 -35 -125 10)
+ ElementLine (35 35 35 -125 10)
+ ElementLine (-35 35 35 35 10)
+ )
+
+Element(0x00000010 "SMD 0805" "C16" "" 1080 1355 -15 -115 0 150 0x00000000)
+(
+ Pad(0 0 0 0 60 30 90 "1" "1" 0x00000100)
+ Pad(90 0 90 0 60 30 90 "2" "2" 0x00000100)
+ ElementLine (125 -35 -35 -35 10)
+ ElementLine (125 35 125 -35 10)
+ ElementLine (-35 35 125 35 10)
+ ElementLine (-35 -35 -35 35 10)
+ )
+
+Element(0x00000000 "SMD 0805" "C14" "" 1175 1690 -195 20 0 150 0x00000000)
+(
+ Pad(0 0 0 0 60 30 90 "1" "1" 0x00000100)
+ Pad(0 90 0 90 60 30 90 "2" "2" 0x00000100)
+ ElementLine (35 125 35 -35 10)
+ ElementLine (-35 125 35 125 10)
+ ElementLine (-35 -35 -35 125 10)
+ ElementLine (35 -35 -35 -35 10)
+ )
+
+Element(0x00000000 "SMD Cap" "C15" "" 1280 1785 65 -174 0 150 0x00000000)
+(
+ Pin(0 0 80 30 110 35 "1" "1" 0x02000001)
+ Pin(0 -200 80 30 110 35 "2" "2" 0x00000001)
+ ElementLine (-50 50 50 50 10)
+ ElementLine (50 50 50 -250 10)
+ ElementLine (50 -250 -50 -250 10)
+ ElementLine (-50 -250 -50 50 10)
+ )
+
+Element(0x00000010 "SMD 0805" "C10" "" 2095 1310 -190 -60 0 150 0x00000000)
+(
+ Pad(0 0 0 0 60 30 90 "1" "1" 0x00000100)
+ Pad(90 0 90 0 60 30 90 "2" "2" 0x00000100)
+ ElementLine (125 -35 -35 -35 10)
+ ElementLine (125 35 125 -35 10)
+ ElementLine (-35 35 125 35 10)
+ ElementLine (-35 -35 -35 35 10)
+ )
+
+Element(0x00000000 "SMD Cap" "C12" "" 2345 1320 -35 -129 0 150 0x00000000)
+(
+ Pin(0 0 80 30 110 35 "1" "1" 0x00000001)
+ Pin(200 0 80 30 110 35 "2" "2" 0x02020001)
+ ElementLine (-50 -50 -50 50 10)
+ ElementLine (-50 50 250 50 10)
+ ElementLine (250 50 250 -50 10)
+ ElementLine (250 -50 -50 -50 10)
+ )
+
+Element(0x00000000 "R 0.25W" "R13" "100" 1130 1435 230 65 0 150 0x00000000)
+(
+ Pin(0 0 60 30 90 28 "1" "1" 0x00000101)
+ Pin(400 0 60 30 90 28 "2" "2" 0x10000001)
+ ElementLine (100 -50 300 -50 10)
+ ElementLine (300 -50 300 50 10)
+ ElementLine (300 50 100 50 10)
+ ElementLine (100 50 100 -50 10)
+ ElementLine (40 0 100 0 10)
+ ElementLine (300 0 360 0 10)
+ )
+
+Element(0x00000000 "R 0.25W" "R14" "100" 1105 1075 -265 60 0 150 0x00000000)
+(
+ Pin(0 0 60 30 90 28 "1" "1" 0x00000001)
+ Pin(-400 0 60 30 90 28 "2" "2" 0x00000001)
+ ElementLine (-100 50 -300 50 10)
+ ElementLine (-300 50 -300 -50 10)
+ ElementLine (-300 -50 -100 -50 10)
+ ElementLine (-100 -50 -100 50 10)
+ ElementLine (-40 0 -100 0 10)
+ ElementLine (-300 0 -360 0 10)
+ )
+
+Element(0x00000000 "R 0.5W" "R11" "" 2815 1700 60 -90 0 150 0x00000000)
+(
+ Pin(0 0 85 30 115 48 "1" "1" 0x00000101)
+ Pin(0 -800 85 30 115 48 "2" "2" 0x00000001)
+ ElementLine (0 -60 0 -115 10)
+ ElementLine (-115 -115 115 -115 10)
+ ElementLine (115 -115 115 -685 10)
+ ElementLine (115 -685 -115 -685 10)
+ ElementLine (-115 -685 -115 -115 10)
+ ElementLine (0 -685 0 -750 10)
+ )
+
+Element(0x00000000 "TK11950" "U3" "5.0V" 2235 1510 -139 -2 0 150 0x00000000)
+(
+ Pad(-7 0 8 0 24 30 54 "NOISE BYPASS" "1" 0x00000100)
+ Pad(-7 37 8 37 24 30 54 "CONTROL" "2" 0x00000100)
+ Pad(-7 75 8 75 24 30 54 "RESET OUT" "3" 0x00000100)
+ Pad(119 75 134 75 24 30 54 "VO" "4" 0x00000100)
+ Pad(119 37 134 37 24 30 54 "GND" "5" 0x00000100)
+ Pad(119 0 134 0 24 30 54 "VIN" "6" 0x00000100)
+ ElementLine (0 -22 0 -34 10)
+ ElementLine (0 -34 132 -34 10)
+ ElementLine (132 -34 132 -22 10)
+ ElementLine (0 96 0 108 10)
+ ElementLine (0 108 132 108 10)
+ ElementLine (132 108 132 96 10)
+ ElementLine (13 -24 119 -24 10)
+ )
+
+Element(0x00000000 "TK11950" "U4" "5.0V" 1180 1590 -254 -132 0 150 0x00000000)
+(
+ Pad(7 0 -8 0 24 30 54 "NOISE BYPASS" "1" 0x00000100)
+ Pad(7 -37 -8 -37 24 30 54 "CONTROL" "2" 0x00000100)
+ Pad(7 -75 -8 -75 24 30 54 "RESET OUT" "3" 0x00000100)
+ Pad(-119 -75 -134 -75 24 30 54 "VO" "4" 0x00000100)
+ Pad(-119 -37 -134 -37 24 30 54 "GND" "5" 0x00000100)
+ Pad(-119 0 -134 0 24 30 54 "VIN" "6" 0x00000100)
+ ElementLine (0 22 0 34 10)
+ ElementLine (0 34 -132 34 10)
+ ElementLine (-132 34 -132 22 10)
+ ElementLine (0 -96 0 -108 10)
+ ElementLine (0 -108 -132 -108 10)
+ ElementLine (-132 -108 -132 -96 10)
+ ElementLine (-13 24 -119 24 10)
+ )
+
+Element(0x00000000 "SMD 0805" "C5" "" 1495 1315 -225 -30 0 150 0x00000000)
+(
+ Pad(0 0 0 0 60 30 90 "1" "1" 0x00000100)
+ Pad(-90 0 -90 0 60 30 90 "2" "2" 0x00000100)
+ ElementLine (-125 35 35 35 10)
+ ElementLine (-125 -35 -125 35 10)
+ ElementLine (35 -35 -125 -35 10)
+ ElementLine (35 35 35 -35 10)
+ )
+
+Element(0x00000010 "SMD 0805" "C11" "" 2270 1420 -260 -30 0 150 0x00000000)
+(
+ Pad(0 0 0 0 60 30 90 "1" "1" 0x00000100)
+ Pad(-90 0 -90 0 60 30 90 "2" "2" 0x00000100)
+ ElementLine (-125 35 35 35 10)
+ ElementLine (-125 -35 -125 35 10)
+ ElementLine (35 -35 -125 -35 10)
+ ElementLine (35 35 35 -35 10)
+ )
+
+Element(0x00000000 "SMD Cap" "C9" "" 2030 1185 -145 -40 0 150 0x00000000)
+(
+ Pin(0 0 80 30 110 35 "1" "1" 0x20200001)
+ Pin(200 0 80 30 110 35 "2" "2" 0x02020001)
+ ElementLine (0 45 0 50 10)
+ ElementLine (0 50 200 50 10)
+ ElementLine (200 50 200 45 10)
+ ElementLine (200 -45 200 -50 10)
+ ElementLine (200 -50 0 -50 10)
+ ElementLine (0 -50 0 -45 10)
+ )
+
+Element(0x00000000 "R 0.25W" "R7" "100" 1655 2065 150 -30 0 150 0x00000000)
+(
+ Pin(0 0 60 30 90 28 "1" "1" 0x02000001)
+ Pin(400 0 60 30 90 28 "2" "2" 0x02020001)
+ ElementLine (100 -50 300 -50 10)
+ ElementLine (300 -50 300 50 10)
+ ElementLine (300 50 100 50 10)
+ ElementLine (100 50 100 -50 10)
+ ElementLine (40 0 100 0 10)
+ ElementLine (300 0 360 0 10)
+ )
+
+Element(0x00000000 "SMD Cap" "C8" "" 2030 1075 65 -124 0 150 0x00000000)
+(
+ Pin(0 0 80 30 110 35 "1" "1" 0x20200001)
+ Pin(200 0 80 30 110 35 "2" "2" 0x02020001)
+ ElementLine (-50 -50 -50 50 10)
+ ElementLine (-50 50 250 50 10)
+ ElementLine (250 50 250 -50 10)
+ ElementLine (250 -50 -50 -50 10)
+ )
+
+Element(0x00000000 "SMD Cap" "C7" "" 1530 1075 -370 -144 0 150 0x00000000)
+(
+ Pin(0 0 80 30 110 35 "1" "1" 0x20200001)
+ Pin(-200 0 80 30 110 35 "2" "2" 0x10100001)
+ ElementLine (50 50 50 -50 10)
+ ElementLine (50 -50 -250 -50 10)
+ ElementLine (-250 -50 -250 50 10)
+ ElementLine (-250 50 50 50 10)
+ )
+
+Element(0x00000000 "SMD Cap" "C2" "" 1945 1845 65 -19 0 150 0x00000000)
+(
+ Pin(0 0 80 30 110 35 "1" "1" 0x02000101)
+ Pin(-200 0 80 30 110 35 "2" "2" 0x02000001)
+ ElementLine (50 50 50 -50 10)
+ ElementLine (50 -50 -250 -50 10)
+ ElementLine (-250 -50 -250 50 10)
+ ElementLine (-250 50 50 50 10)
+ )
+
+Element(0x00000000 "SMD Cap" "C6" "" 1530 1185 -335 -30 0 150 0x00000000)
+(
+ Pin(0 0 80 30 110 35 "1" "1" 0x20200001)
+ Pin(-200 0 80 30 110 35 "2" "2" 0x10100001)
+ ElementLine (0 -45 0 -50 10)
+ ElementLine (0 -50 -200 -50 10)
+ ElementLine (-200 -50 -200 -45 10)
+ ElementLine (-200 45 -200 50 10)
+ ElementLine (-200 50 0 50 10)
+ ElementLine (0 50 0 45 10)
+ )
+
+Element(0x00000000 "SMD Cap" "C1" "" 1490 1950 -40 71 0 150 0x00000000)
+(
+ Pin(0 0 80 30 110 35 "1" "1" 0x00000101)
+ Pin(0 -200 80 30 110 35 "2" "2" 0x02000001)
+ ElementLine (-50 50 50 50 10)
+ ElementLine (50 50 50 -250 10)
+ ElementLine (50 -250 -50 -250 10)
+ ElementLine (-50 -250 -50 50 10)
+ )
+
+Element(0x00000000 "R 0.25W" "R6" "100" 2375 1680 65 115 0 150 0x00000000)
+(
+ Pin(0 0 60 30 90 28 "1" "1" 0x02000101)
+ Pin(0 400 60 30 90 28 "2" "2" 0x02000001)
+ ElementLine (50 100 50 300 10)
+ ElementLine (50 300 -50 300 10)
+ ElementLine (-50 300 -50 100 10)
+ ElementLine (-50 100 50 100 10)
+ ElementLine (0 40 0 100 10)
+ ElementLine (0 300 0 360 10)
+ )
+
+Element(0x00000000 "R 0.25W" "R8" "100" 2270 1680 -30 245 1 150 0x00000000)
+(
+ Pin(0 0 60 30 90 28 "1" "1" 0x02000101)
+ Pin(0 400 60 30 90 28 "2" "2" 0x02000001)
+ ElementLine (50 100 50 300 10)
+ ElementLine (50 300 -50 300 10)
+ ElementLine (-50 300 -50 100 10)
+ ElementLine (-50 100 50 100 10)
+ ElementLine (0 40 0 100 10)
+ ElementLine (0 300 0 360 10)
+ )
+
+Element(0x00000000 "R 0.25W" "R5" "100" 1375 1750 -170 175 0 150 0x00000000)
+(
+ Pin(0 0 60 30 90 28 "1" "1" 0x00000101)
+ Pin(0 400 60 30 90 28 "2" "2" 0x00000001)
+ ElementLine (50 100 50 300 10)
+ ElementLine (50 300 -50 300 10)
+ ElementLine (-50 300 -50 100 10)
+ ElementLine (-50 100 50 100 10)
+ ElementLine (0 40 0 100 10)
+ ElementLine (0 300 0 360 10)
+ )
+
+Element(0x00000000 "R 0.25W" "R9" "100" 1655 2170 125 -25 0 150 0x00000000)
+(
+ Pin(0 0 60 30 90 28 "1" "1" 0x02000001)
+ Pin(400 0 60 30 90 28 "2" "2" 0x02020001)
+ ElementLine (100 -50 300 -50 10)
+ ElementLine (300 -50 300 50 10)
+ ElementLine (300 50 100 50 10)
+ ElementLine (100 50 100 -50 10)
+ ElementLine (40 0 100 0 10)
+ ElementLine (300 0 360 0 10)
+ )
+
+Element(0x00000000 "R 0.25W" "R10" "100" 2160 1675 -30 275 1 150 0x00000000)
+(
+ Pin(0 0 60 30 90 28 "1" "1" 0x02000101)
+ Pin(0 400 60 30 90 28 "2" "2" 0x02020001)
+ ElementLine (50 100 50 300 10)
+ ElementLine (50 300 -50 300 10)
+ ElementLine (-50 300 -50 100 10)
+ ElementLine (-50 100 50 100 10)
+ ElementLine (0 40 0 100 10)
+ ElementLine (0 300 0 360 10)
+ )
+
+Element(0x00000000 "ADC12138CIMSA" "U2" "ADC12138" 1630 1690 105 -449 0 150 0x00000000)
+(
+ Pad(0 30 0 -30 12 30 42 "CH0" "1" 0x00000100)
+ Pad(26 30 26 -30 12 30 42 "CH1" "2" 0x00000100)
+ Pad(51 30 51 -30 12 30 42 "CH2" "3" 0x00000100)
+ Pad(77 30 77 -30 12 30 42 "CH3" "4" 0x00000100)
+ Pad(102 30 102 -30 12 30 42 "CH4" "5" 0x00000100)
+ Pad(128 30 128 -30 12 30 42 "CH5" "6" 0x00000100)
+ Pad(154 30 154 -30 12 30 42 "CH6" "7" 0x00000100)
+ Pad(179 30 179 -30 12 30 42 "CH7" "8" 0x00000100)
+ Pad(205 30 205 -30 12 30 42 "COM" "9" 0x00000100)
+ Pad(230 30 230 -30 12 30 42 "MuOut1" "10" 0x00000100)
+ Pad(256 30 256 -30 12 30 42 "A/Din1" "11" 0x00000100)
+ Pad(281 30 281 -30 12 30 42 "MuxOut2" "12" 0x00000100)
+ Pad(307 30 307 -30 12 30 42 "A/Din2" "13" 0x00000100)
+ Pad(333 30 333 -30 12 30 42 "DGND" "14" 0x00000100)
+ Pad(333 -350 333 -290 12 30 42 "VA+" "15" 0x00000100)
+ Pad(307 -350 307 -290 12 30 42 "Vref-" "16" 0x00000100)
+ Pad(281 -350 281 -290 12 30 42 "Vref+" "17" 0x00000100)
+ Pad(256 -350 256 -290 12 30 42 "AGND" "18" 0x00000100)
+ Pad(230 -350 230 -290 12 30 42 "PD" "19" 0x00000100)
+ Pad(205 -350 205 -290 12 30 42 "EOC" "20" 0x00000100)
+ Pad(179 -350 179 -290 12 30 42 "~CONV" "21" 0x00000100)
+ Pad(154 -350 154 -290 12 30 42 "~CS" "22" 0x00000100)
+ Pad(128 -350 128 -290 12 30 42 "DO" "23" 0x00000100)
+ Pad(102 -350 102 -290 12 30 42 "DI" "24" 0x00000100)
+ Pad(77 -350 77 -290 12 30 42 "SCLK" "25" 0x00000100)
+ Pad(51 -350 51 -290 12 30 42 "CCLK" "26" 0x00000100)
+ Pad(26 -350 26 -290 12 30 42 "~DOR" "27" 0x00000100)
+ Pad(0 -350 0 -290 12 30 42 "VD+" "28" 0x00000100)
+ ElementLine (0 -70 0 -70 30)
+ ElementLine (-12 -54 -37 -54 10)
+ ElementLine (-37 -54 -37 -266 10)
+ ElementLine (-37 -266 -12 -266 10)
+ ElementLine (343 -54 370 -54 10)
+ ElementLine (370 -54 370 -266 10)
+ ElementLine (370 -266 343 -266 10)
+ )
+
+Element(0x00000000 "R 0.25W" "R4" "100" 1615 1955 130 -35 0 150 0x00000000)
+(
+ Pin(0 0 60 30 90 28 "1" "1" 0x00000101)
+ Pin(400 0 60 30 90 28 "2" "2" 0x02000001)
+ ElementLine (100 -50 300 -50 10)
+ ElementLine (300 -50 300 50 10)
+ ElementLine (300 50 100 50 10)
+ ElementLine (100 50 100 -50 10)
+ ElementLine (40 0 100 0 10)
+ ElementLine (300 0 360 0 10)
+ )
+
+Element(0x00000010 "SMD 0805" "C4" "" 2070 2390 -25 -180 0 115 0x00000000)
+(
+ Pad(0 0 0 0 60 30 90 "1" "1" 0x00000100)
+ Pad(0 -90 0 -90 60 30 90 "2" "2" 0x00000100)
+ ElementLine (-35 -125 -35 35 10)
+ ElementLine (35 -125 -35 -125 10)
+ ElementLine (35 35 35 -125 10)
+ ElementLine (-35 35 35 35 10)
+ )
+
+Element(0x00000000 "R 0.25W" "R1" "100" 2180 2625 -35 -145 1 150 0x00000000)
+(
+ Pin(0 0 60 30 90 28 "1" "1" 0x00000101)
+ Pin(0 -400 60 30 90 28 "2" "2" 0x02000001)
+ ElementLine (-50 -100 -50 -300 10)
+ ElementLine (-50 -300 50 -300 10)
+ ElementLine (50 -300 50 -100 10)
+ ElementLine (50 -100 -50 -100 10)
+ ElementLine (0 -40 0 -100 10)
+ ElementLine (0 -300 0 -360 10)
+ )
+
+Element(0x00000000 "R 0.25W" "R2" "100" 2400 2625 60 -100 0 150 0x00000000)
+(
+ Pin(0 0 60 30 90 28 "1" "1" 0x00000101)
+ Pin(0 -400 60 30 90 28 "2" "2" 0x02000001)
+ ElementLine (-50 -100 -50 -300 10)
+ ElementLine (-50 -300 50 -300 10)
+ ElementLine (50 -300 50 -100 10)
+ ElementLine (50 -100 -50 -100 10)
+ ElementLine (0 -40 0 -100 10)
+ ElementLine (0 -300 0 -360 10)
+ )
+
+Element(0x00000000 "LM13700" "U1" "LM13700" 1955 2285 -475 -130 0 150 0x00000000)
+(
+ Pin(0 0 60 30 90 28 "Iabc1" "1" 0x02000101)
+ Pin(-100 0 60 30 90 28 "Dbias1" "2" 0x00000001)
+ Pin(-200 0 60 30 90 28 "In+1" "3" 0x00000001)
+ Pin(-300 0 60 30 90 28 "In-1" "4" 0x00000001)
+ Pin(-400 0 60 30 90 28 "Out1" "5" 0x00000001)
+ Pin(-500 0 60 30 90 28 "V-" "6" 0x00000001)
+ Pin(-600 0 60 30 90 28 "BufIn1" "7" 0x00000001)
+ Pin(-700 0 60 30 90 28 "BufOut1" "8" 0x00000001)
+ Pin(-700 300 60 30 90 28 "BufOut2" "9" 0x00000001)
+ Pin(-600 300 60 30 90 28 "BufIn2" "10" 0x00000001)
+ Pin(-500 300 60 30 90 28 "V+" "11" 0x00000001)
+ Pin(-400 300 60 30 90 28 "Out2" "12" 0x00000001)
+ Pin(-300 300 60 30 90 28 "In-2" "13" 0x00000001)
+ Pin(-200 300 60 30 90 28 "In+2" "14" 0x00000001)
+ Pin(-100 300 60 30 90 28 "Dbias2" "15" 0x00000001)
+ Pin(0 300 60 30 90 28 "Iabc2" "16" 0x00000001)
+ ElementLine (50 -50 -750 -50 10)
+ ElementLine (-750 -50 -750 350 10)
+ ElementLine (-750 350 50 350 10)
+ ElementLine (50 -50 50 100 10)
+ ElementLine (50 200 50 350 10)
+ ElementArc (50 150 50 50 270 180 10)
+ )
+
+Element(0x00000000 "R 0.25W" "R3" "100" 2290 2625 -30 -135 1 150 0x00000000)
+(
+ Pin(0 0 60 30 90 28 "1" "1" 0x00000101)
+ Pin(0 -400 60 30 90 28 "2" "2" 0x02000001)
+ ElementLine (-50 -100 -50 -300 10)
+ ElementLine (-50 -300 50 -300 10)
+ ElementLine (50 -300 50 -100 10)
+ ElementLine (50 -100 -50 -100 10)
+ ElementLine (0 -40 0 -100 10)
+ ElementLine (0 -300 0 -360 10)
+ )
+
+Element(0x00000000 "SMD 0805" "C3" "" 2075 2510 -40 140 0 150 0x00000000)
+(
+ Pad(0 0 0 0 60 30 90 "1" "1" 0x00000100)
+ Pad(0 90 0 90 60 30 90 "2" "2" 0x00000100)
+ ElementLine (35 125 35 -35 10)
+ ElementLine (-35 125 35 125 10)
+ ElementLine (-35 -35 -35 125 10)
+ ElementLine (35 -35 -35 -35 10)
+ )
+
+Element(0x00000000 "CTX169" "X1" "20 MHz" 2330 910 425 -215 0 150 0x00000000)
+(
+ Pin(0 -60 60 30 90 28 "NC" "1" 0x00000101)
+ Pin(300 -60 60 30 90 28 "GND" "2" 0x00000001)
+ Pin(300 -360 60 30 90 28 "OUT" "3" 0x00000001)
+ Pin(0 -360 60 30 90 28 "Vdd" "4" 0x00000001)
+ ElementLine (-110 50 -110 -410 10)
+ ElementLine (-60 -460 350 -460 10)
+ ElementLine (400 -410 400 0 10)
+ ElementLine (350 50 -110 50 10)
+ ElementArc (-60 -410 50 50 270 90 10)
+ ElementArc (350 -410 50 50 180 90 10)
+ ElementArc (350 0 50 50 90 90 10)
+ )
+
+Element(0x00000000 "SMD Cap" "C21" "" 2565 1070 -50 61 0 150 0x00000000)
+(
+ Pin(0 0 80 30 110 35 "1" "1" 0x00000001)
+ Pin(-200 0 80 30 110 35 "2" "2" 0x02020001)
+ ElementLine (50 50 50 -50 10)
+ ElementLine (50 -50 -250 -50 10)
+ ElementLine (-250 -50 -250 50 10)
+ ElementLine (-250 50 50 50 10)
+ )
+
+Element(0x00000000 "SMD 0805" "C20" "" 2665 2375 -115 55 0 150 0x00000000)
+(
+ Pad(0 0 0 0 60 30 90 "1" "1" 0x00000100)
+ Pad(-90 0 -90 0 60 30 90 "2" "2" 0x00000100)
+ ElementLine (-125 35 35 35 10)
+ ElementLine (-125 -35 -125 35 10)
+ ElementLine (35 -35 -125 -35 10)
+ ElementLine (35 35 35 -35 10)
+ )
+
+Element(0x00000000 "SMD 0805" "C19" "" 2785 2375 -20 55 0 150 0x00000000)
+(
+ Pad(0 0 0 0 60 30 90 "1" "1" 0x00000100)
+ Pad(90 0 90 0 60 30 90 "2" "2" 0x00000100)
+ ElementLine (125 -35 -35 -35 10)
+ ElementLine (125 35 125 -35 10)
+ ElementLine (-35 35 125 35 10)
+ ElementLine (-35 -35 -35 35 10)
+ )
+
+Element(0x00000000 "SMD 0805" "C18" "" 2665 1800 155 -20 0 150 0x00000000)
+(
+ Pad(0 0 0 0 60 30 90 "1" "1" 0x00000100)
+ Pad(90 0 90 0 60 30 90 "2" "2" 0x00000100)
+ ElementLine (125 -35 -35 -35 10)
+ ElementLine (125 35 125 -35 10)
+ ElementLine (-35 35 125 35 10)
+ ElementLine (-35 -35 -35 35 10)
+ )
+
+Element(0x00000000 "AMP 745781-4" "J3" "A2100-ND" 820 1610 -125 837 0 150 0x00000000)
+(
+ Pin(0 432 80 30 110 42 "1" "1" 0x00000101)
+ Pin(0 324 80 30 110 42 "2" "2" 0x00000001)
+ Pin(0 216 80 30 110 42 "3" "3" 0x00000001)
+ Pin(0 108 80 30 110 42 "4" "4" 0x00000001)
+ Pin(0 0 80 30 110 42 "5" "5" 0x00000001)
+ Pin(-112 378 80 30 110 42 "6" "6" 0x00000001)
+ Pin(-112 270 80 30 110 42 "7" "7" 0x00000001)
+ Pin(-112 162 80 30 110 42 "8" "8" 0x00000001)
+ Pin(-112 54 80 30 110 42 "9" "9" 0x00000001)
+ Pin(-56 -276 120 30 150 120 "MOUNT HOLE" "10" 0x00000009)
+ Pin(-56 708 120 30 150 120 "MOUNT HOLE" "11" 0x00000009)
+ ElementLine (-317 -390 58 -390 10)
+ ElementLine (-317 -138 -317 -390 10)
+ ElementLine (-433 455 -434 -22 10)
+ ElementLine (-317 823 -317 571 10)
+ ElementLine (58 823 -317 823 10)
+ ElementLine (58 -390 58 823 10)
+ ElementArc (-375 -138 58 58 90 90 10)
+ ElementArc (-375 -22 58 58 270 90 10)
+ ElementArc (-375 455 58 58 0 90 10)
+ ElementArc (-375 571 58 58 180 90 10)
+ )
+
+Element(0x00000000 "3 TERM BLOCK" "J1" "DK ED1602-ND" 2285 2925 140 51 0 150 0x00000000)
+(
+ Pin(0 0 110 30 140 48 "1" "1" 0x00000001)
+ Pin(-194 0 110 30 140 48 "2" "2" 0x00000001)
+ Pin(-388 0 110 30 140 48 "3" "3" 0x00000001)
+ ElementLine (-388 160 -388 140 10)
+ ElementLine (-194 160 -194 140 10)
+ ElementLine (0 160 0 140 10)
+ ElementLine (81 -170 101 -170 10)
+ ElementLine (81 -190 81 -170 10)
+ ElementLine (101 -190 81 -190 10)
+ ElementLine (-509 -170 -489 -170 10)
+ ElementLine (-509 -190 -509 -170 10)
+ ElementLine (-489 -190 -509 -190 10)
+ ElementLine (101 -200 101 160 10)
+ ElementLine (-489 -200 101 -200 10)
+ ElementLine (-489 160 -489 -200 10)
+ ElementLine (101 160 -489 160 10)
+ )
+
+Element(0x00000000 "OP-AMP" "U7" "LTC1152" 2575 1925 380 200 0 150 0x00000000)
+(
+ Pin(0 0 60 30 90 28 "SHDN" "1" 0x02000101)
+ Pin(0 100 60 30 90 28 "-IN" "2" 0x02000001)
+ Pin(0 200 60 30 90 28 "+IN" "3" 0x02000001)
+ Pin(0 300 60 30 90 28 "V-" "4" 0x02020001)
+ Pin(300 300 60 30 90 28 "COMP" "5" 0x02000001)
+ Pin(300 200 60 30 90 28 "OUT" "6" 0x02000001)
+ Pin(300 100 60 30 90 28 "V+" "7" 0x02000001)
+ Pin(300 0 60 30 90 28 "CP" "8" 0x02000001)
+ ElementLine (-50 -50 -50 350 10)
+ ElementLine (-50 350 350 350 10)
+ ElementLine (350 350 350 -50 10)
+ ElementLine (-50 -50 100 -50 10)
+ ElementLine (200 -50 350 -50 10)
+ ElementArc (150 -50 50 50 0 180 10)
+ )
+
+Element(0x00000000 "R 0.5W" "R12" "" 1035 1935 -205 700 0 150 0x00000000)
+(
+ Pin(0 0 85 30 115 48 "1" "1" 0x00000101)
+ Pin(0 800 90 30 120 48 "2" "2" 0x00000001)
+ ElementLine (0 60 0 115 10)
+ ElementLine (115 115 -115 115 10)
+ ElementLine (-115 115 -115 685 10)
+ ElementLine (-115 685 115 685 10)
+ ElementLine (115 685 115 115 10)
+ ElementLine (0 685 0 750 10)
+ )
+Rat(1187 1553 0 1061 1553 0 0x00000010)
+Rat(1045 1820 1 1175 1780 0 0x00000010)
+Rat(1330 1185 1 1405 1315 0 0x00000010)
+Rat(2075 1455 1 2180 1420 0 0x00000010)
+Rat(2180 1420 0 2185 1310 0 0x00000010)
+Rat(2228 1547 0 2354 1547 0 0x00000010)
+Layer(1 "solder")
+(
+ Line(1945 1015 1945 1260 15 30 0x00000000)
+ Line(1615 1960 1555 1960 10 30 0x00000000)
+ Line(1185 2230 1185 2655 15 30 0x00000000)
+ Line(705 795 890 980 15 30 0x00000000)
+ Line(1405 955 1485 875 15 30 0x00000000)
+ Line(1005 695 1140 560 15 30 0x00000000)
+ Line(1005 795 1135 665 15 30 0x00000000)
+ Line(705 895 705 1075 15 30 0x00000000)
+ Line(1125 1435 1005 1315 15 30 0x00000000)
+ Line(1005 1235 1065 1175 15 30 0x00000000)
+ Line(1010 980 1105 1075 15 30 0x00000000)
+ Line(1345 955 1405 955 15 30 0x00000000)
+ Line(1065 1175 1125 1175 15 30 0x00000000)
+ Line(1190 665 1295 560 15 30 0x00000000)
+ Line(1375 1750 1375 2040 15 30 0x00000000)
+ Line(1605 2435 1605 2660 10 30 0x00000000)
+ Line(1655 2285 1520 2420 15 30 0x00000000)
+ Line(1375 2040 1185 2230 15 30 0x00000000)
+ Line(1135 665 1190 665 15 30 0x00000000)
+ Line(1105 1075 970 1210 15 30 0x00000000)
+ Line(890 980 1010 980 15 30 0x00000000)
+ Line(2460 965 1995 965 15 30 0x00000000)
+ Line(1855 2285 1855 2585 15 30 0x00000000)
+ Line(970 1210 970 1568 15 30 0x00000000)
+ Line(1520 2420 1520 2495 15 30 0x00000000)
+ Line(1755 2285 1605 2435 10 30 0x00000000)
+ Line(1995 965 1945 1015 15 30 0x00000000)
+ Line(1005 1315 1005 1235 15 30 0x00000000)
+ Line(2565 1070 2460 965 15 30 0x00000000)
+ Line(1945 1260 1985 1300 15 30 0x00000000)
+ Line(1125 1175 1345 955 15 30 0x00000000)
+ Line(2400 2625 2290 2625 10 30 0x00000000)
+ Line(970 1568 820 1718 15 30 0x00000000)
+ Line(1140 560 1195 560 15 30 0x00000000)
+ Line(1555 1960 1555 2285 10 30 0x00000000)
+ Text(525 2805 0 120 "LED (BACK)" 0x00000080)
+)
+Layer(2 "GND-solder")
+(
+ Line(820 2045 920 2145 35 30 0x00000040)
+ Line(930 1820 930 1932 30 30 0x00000000)
+ Line(1280 1585 1045 1820 30 30 0x00000000)
+ Line(1045 1820 930 1820 30 30 0x00000000)
+ Line(930 1932 820 2042 30 30 0x00000000)
+ Line(2155 815 2120 780 40 30 0x00000000)
+ Line(1675 780 1595 860 40 30 0x00000000)
+ Line(2630 850 2535 755 40 30 0x00000000)
+ Line(2120 780 1675 780 40 30 0x00000000)
+ Line(2215 755 2155 815 40 30 0x00000000)
+ Line(2535 755 2215 755 40 30 0x00000000)
+ Polygon(0x00000010)
+ (
+ (1125 2635) (1125 2235) (1330 2030) (1330 1705) (1430 1705)
+ (1430 1635) (1400 1635) (1400 1560) (1240 1720) (1115 1845)
+ (1115 2010) (1030 2010) (895 2145) (895 2635)
+ )
+ Polygon(0x00000010)
+ (
+ (1430 1885) (1570 1885) (1670 1885) (1670 2000) (1590 2000)
+ (1590 2235) (1925 2235) (1925 2525) (2645 2525) (2645 1250)
+ (2405 1250) (2405 1340) (2370 1375) (2320 1375) (2285 1340)
+ (2285 1305) (2300 1290) (2300 1290) (2300 1135) (2430 1135)
+ (2430 1005) (2090 1005) (2090 1280) (2000 1370) (2000 1515)
+ (1370 1515) (1370 1640) (1430 1640)
+ )
+ Polygon(0x00000010)
+ (
+ (2635 1250) (2635 1615) (2895 1615) (2895 1785) (2750 1785)
+ (2750 2520) (2975 2520) (2975 1250)
+ )
+)
+Layer(3 "Vcc-solder")
+(
+ Line(1455 2780 2695 2780 35 30 0x00000000)
+ Line(1035 2735 1445 2735 45 30 0x00000000)
+ Line(2340 1195 2815 1195 30 30 0x00000000)
+ Line(2815 1195 2815 900 30 30 0x00000000)
+ Line(1530 1180 1530 1435 30 30 0x00000000)
+ Line(1070 1265 1525 1265 35 30 0x00000000)
+ Line(1145 765 1395 765 35 30 0x00000000)
+ Line(1010 900 1145 765 35 30 0x00000000)
+ Line(1395 765 1595 565 35 30 0x00000000)
+ Line(2155 615 2110 660 40 30 0x00000000)
+ Line(1695 660 1595 560 40 30 0x00000000)
+ Line(2330 550 2155 615 45 30 0x00000000)
+ Line(2110 660 1695 660 40 30 0x00000000)
+ Line(2340 1315 2340 1195 30 30 0x00000000)
+ Line(2695 1700 2810 1700 30 30 0x00000000)
+ Line(1455 2585 1355 2285 45 30 0x00000000)
+ Line(1455 2590 1455 2780 35 30 0x00000000)
+ Line(2695 2780 2695 1700 30 30 0x00000000)
+)
+Layer(4 "component")
+(
+ Line(685 2450 585 2350 35 30 0x00000000)
+ Line(2975 1480 2565 1070 15 30 0x00000000)
+ Line(2975 2025 2975 1480 15 30 0x00000000)
+ Line(2875 2125 2975 2025 15 30 0x00000000)
+ Line(980 1270 980 1774 15 30 0x00000000)
+ Line(585 1787 708 1664 35 30 0x00000000)
+ Line(2675 2125 2575 2025 15 30 0x00000000)
+ Line(2120 2285 2180 2225 15 30 0x00000000)
+ Line(2055 720 2055 895 10 30 0x00000000)
+ Line(1835 1285 1835 1340 10 30 0x00000000)
+ Line(1860 1261 1835 1285 10 30 0x00000000)
+ Line(1860 1035 1860 1261 10 30 0x00000000)
+ Line(2090 655 2090 910 10 30 0x00000000)
+ Line(1995 560 2090 655 10 30 0x00000000)
+ Line(1809 1263 1809 1340 10 30 0x00000000)
+ Line(1829 1244 1809 1263 10 30 0x00000000)
+ Line(1829 1024 1829 1244 10 30 0x00000000)
+ Line(1991 959 1893 959 10 30 0x00000000)
+ Line(2235 1500 2235 1475 15 30 0x00000000)
+ Line(2055 895 1991 959 10 30 0x00000000)
+ Line(2075 2515 2075 2415 30 30 0x00000000)
+ Line(1490 1950 1505 1950 10 30 0x00000000)
+ Line(2075 2415 1520 2415 30 30 0x00000000)
+ Line(2175 2145 2205 2145 15 30 0x00000000)
+ Line(1655 1800 1656 1720 10 30 0x00000000)
+ Line(1490 1950 1490 2150 15 30 0x00000000)
+ Line(1745 1845 1635 1955 15 30 0x00000000)
+ Line(1775 1780 1707 1780 10 30 0x00000000)
+ Line(1655 2170 1945 2170 15 30 0x00000000)
+ Line(1950 2285 2070 2285 15 30 0x00000000)
+ Line(1655 2170 1635 2150 15 30 0x00000000)
+ Line(1655 2065 1835 1885 15 30 0x00000000)
+ Line(2015 1955 2255 1955 15 30 0x00000000)
+ Line(2180 2625 2290 2625 15 30 0x00000000)
+ Line(2075 2615 1985 2615 15 30 0x00000000)
+ Line(2125 2585 2290 2420 10 30 0x00000000)
+ Line(2205 2145 2270 2080 15 30 0x00000000)
+ Line(1315 2225 1255 2285 15 30 0x00000000)
+ Line(1855 2285 1795 2225 15 30 0x00000000)
+ Line(2125 2615 2125 2585 10 30 0x00000000)
+ Line(2495 2530 2400 2625 15 30 0x00000000)
+ Line(1795 2225 1315 2225 15 30 0x00000000)
+ Line(1520 2415 1455 2285 30 30 0x00000000)
+ Line(2440 2110 2345 2205 15 30 0x00000000)
+ Line(1490 1750 1600 1750 10 30 0x00000000)
+ Line(2075 2615 2125 2615 10 30 0x00000000)
+ Line(2875 1800 2755 1800 15 30 0x00000000)
+ Line(1635 2150 1375 2150 15 30 0x00000000)
+ Line(1835 1840 1775 1780 10 30 0x00000000)
+ Line(2000 2225 2095 2225 15 30 0x00000000)
+ Line(1732 1750 1732 1720 10 30 0x00000000)
+ Line(1911 1720 1937 1720 10 30 0x00000000)
+ Line(1985 1300 1937 1300 10 30 0x00000000)
+ Line(2015 985 1909 985 10 30 0x00000000)
+ Line(1860 1720 1886 1720 10 30 0x00000000)
+ Line(1745 1845 1681 1845 10 30 0x00000000)
+ Line(1950 1840 1835 1840 15 30 0x00000000)
+ Line(1707 1780 1707 1720 10 30 0x00000000)
+ Line(1681 1845 1681 1720 10 30 0x00000000)
+ Line(1122 2585 1122 2740 15 30 0x00000000)
+ Line(2070 2285 2120 2285 15 30 0x00000000)
+ Line(1490 1750 1375 1750 15 30 0x00000000)
+ Line(1950 1840 2015 1955 15 30 0x00000000)
+ Line(1635 1955 1615 1955 10 30 0x00000000)
+ Line(2160 1750 1732 1750 10 30 0x00000000)
+ Line(2160 1675 2440 1955 15 30 0x00000000)
+ Line(2160 1680 2160 1750 10 30 0x00000000)
+ Line(1945 2170 2000 2225 15 30 0x00000000)
+ Line(1505 1950 1655 1800 10 30 0x00000000)
+ Line(1190 1595 1190 1675 15 30 0x00000000)
+ Line(1190 1510 1190 1435 15 30 0x00000000)
+ Line(1190 1435 1130 1435 15 30 0x00000000)
+ Line(1695 860 1695 1276 10 30 0x00000000)
+ Line(1795 860 1732 923 10 30 0x00000000)
+ Line(1797 1015 1797 1225 10 30 0x00000000)
+ Line(1995 860 1927 927 10 30 0x00000000)
+ Line(1495 560 1646 711 10 30 0x00000000)
+ Line(1657 973 1657 1279 10 30 0x00000000)
+ Line(1657 1279 1681 1303 10 30 0x00000000)
+ Line(1681 1303 1681 1340 10 30 0x00000000)
+ Line(1927 927 1885 927 10 30 0x00000000)
+ Line(1895 860 1758 997 10 30 0x00000000)
+ Line(1732 923 1732 1340 10 30 0x00000000)
+ Line(1893 959 1829 1024 10 30 0x00000000)
+ Line(1646 962 1657 973 10 30 0x00000000)
+ Line(1797 1225 1784 1239 10 30 0x00000000)
+ Line(1646 711 1646 962 10 30 0x00000000)
+ Line(1895 560 2055 720 10 30 0x00000000)
+ Line(1885 927 1797 1015 10 30 0x00000000)
+ Line(2090 910 2015 985 10 30 0x00000000)
+ Line(1985 2615 1955 2585 15 30 0x00000000)
+ Line(1758 997 1758 1340 10 30 0x00000000)
+ Line(1707 1288 1707 1340 10 30 0x00000000)
+ Line(2235 1475 2275 1435 15 30 0x00000000)
+ Line(1909 985 1860 1035 10 30 0x00000000)
+ Line(1005 1195 1005 895 35 30 0x00000000)
+ Line(1060 1255 1005 1195 35 30 0x00000000)
+ Line(585 2350 585 1787 35 30 0x00000000)
+ Line(705 595 875 765 15 30 0x00000000)
+ Line(795 785 795 1155 15 30 0x00000000)
+ Line(2555 475 1480 475 15 30 0x00000000)
+ Line(2630 550 2555 475 15 30 0x00000000)
+ Line(1455 2285 1290 2450 35 30 0x00000000)
+ Line(875 765 875 1165 15 30 0x00000000)
+ Line(705 695 795 785 15 30 0x00000000)
+ Line(980 1774 820 1934 15 30 0x00000000)
+ Line(705 1075 635 1145 15 30 0x00000000)
+ Line(2290 2420 2290 2225 10 30 0x00000000)
+ Line(1480 475 1395 560 15 30 0x00000000)
+ Line(635 1425 820 1610 15 30 0x00000000)
+ Line(875 1165 980 1270 15 30 0x00000000)
+ Line(2095 2225 2175 2145 15 30 0x00000000)
+ Line(1290 2450 685 2450 35 30 0x00000000)
+ Line(1600 1750 1630 1720 10 30 0x00000000)
+ Line(1897 2827 1897 2925 15 30 0x00000000)
+ Line(915 1731 820 1826 15 30 0x00000000)
+ Line(915 1275 915 1731 15 30 0x00000000)
+ Line(1755 2585 2091 2925 15 30 0x00000000)
+ Line(1501 2764 1501 2925 15 30 0x00000000)
+ Line(1655 2585 1897 2827 15 30 0x00000000)
+ Line(1182 2525 1122 2585 15 30 0x00000000)
+ Line(1520 2495 1490 2525 15 30 0x00000000)
+ Line(1490 2525 1182 2525 15 30 0x00000000)
+ Line(1605 2660 1501 2764 15 30 0x00000000)
+ Line(1185 2655 1485 2655 15 30 0x00000000)
+ Line(1485 2655 1555 2585 15 30 0x00000000)
+ Line(1122 2740 1307 2925 15 30 0x00000000)
+ Line(2255 1955 2375 2075 15 30 0x00000000)
+ Line(2440 1955 2440 2110 15 30 0x00000000)
+ Line(2345 2865 2285 2925 15 30 0x00000000)
+ Line(2345 2205 2345 2865 15 30 0x00000000)
+ Line(2785 2215 2785 2375 15 30 0x00000000)
+ Line(795 1155 915 1275 15 30 0x00000000)
+ Line(2875 2225 2875 2375 15 30 0x00000000)
+ Line(1784 1239 1784 1340 10 30 0x00000000)
+ Line(2575 2125 2495 2215 15 30 0x00000000)
+ Line(2665 2375 2785 2375 15 30 0x00000000)
+ Line(2575 2225 2575 2375 15 30 0x00000000)
+ Line(2495 2215 2495 2530 15 30 0x00000000)
+ Line(2875 1925 2875 1800 15 30 0x00000000)
+ Line(2875 2125 2785 2215 15 30 0x00000000)
+ Line(1937 1300 1937 1340 10 30 0x00000000)
+ Line(2875 2125 2675 2125 15 30 0x00000000)
+ Line(635 1145 635 1425 15 30 0x00000000)
+ Line(1835 1885 1835 1840 15 30 0x00000000)
+ Line(1695 1276 1707 1288 10 30 0x00000000)
+ Text(2515 2705 0 140 "LED rev 1" 0x00000000)
+)
+Layer(5 "GND-component")
+(
+ Line(1505 950 1595 860 30 30 0x00000000)
+ Line(1440 950 1505 950 30 30 0x00000000)
+ Line(2220 1545 2155 1545 20 30 0x00000000)
+ Line(2515 1350 2515 1415 30 30 0x00000000)
+ Line(1200 1350 1230 1350 35 30 0x00000000)
+ Line(1860 1395 1860 1430 10 30 0x00000000)
+ Line(1965 1495 1965 1635 25 30 0x00000000)
+ Line(1855 1495 1965 1495 25 30 0x00000000)
+ Line(1835 1665 1835 1625 10 30 0x00000000)
+ Line(1885 1395 1885 1460 10 30 0x00000000)
+ Line(1965 1660 1965 1635 10 30 0x00000000)
+ Line(1810 1665 1810 1630 10 30 0x00000000)
+ Line(1785 1660 1785 1625 10 30 0x00000000)
+ Line(1760 1625 1760 1660 10 30 0x00000000)
+ Line(1280 1580 1280 1490 25 30 0x00000000)
+ Line(1195 1555 1280 1555 20 30 0x00000000)
+ Line(2545 1320 2515 1350 30 30 0x00000000)
+ Line(1005 595 1085 595 30 30 0x00000000)
+ Line(1085 595 1085 955 30 30 0x00000000)
+ Line(1085 955 1145 1015 30 30 0x00000000)
+ Line(1145 1015 1245 1015 30 30 0x00000000)
+ Arc(1445 995 45 45 30 30 270 90 0x00000000)
+ Polygon(0x00000010)
+ (
+ (2250 1535) (2270 1535) (2270 1485) (2325 1485) (2325 1535)
+ (2345 1535) (2345 1560) (2325 1560) (2325 1630) (2160 1630)
+ (2160 1610) (2270 1610) (2270 1560) (2250 1560)
+ )
+ Polygon(0x00000010)
+ (
+ (1995 1470) (1880 1470) (1880 1450) (2015 1450) (2015 1365)
+ (2160 1365) (2160 1330) (2195 1330) (2195 1425) (2160 1460)
+ (2160 1630) (2070 1630) (2070 1720) (1995 1720)
+ )
+ Polygon(0x00000010)
+ (
+ (1370 1635) (1930 1635) (1930 1525) (1370 1525)
+ )
+ Polygon(0x00000010)
+ (
+ (1865 1510) (1225 1510) (1225 995) (1415 995) (1415 1255)
+ (1365 1255) (1365 1365) (1605 1365) (1605 1415) (1865 1415)
+ )
+ Polygon(0x00000000)
+ (
+ (1360 1295) (1390 1295) (1390 1335) (1360 1335)
+ )
+ Polygon(0x00000010)
+ (
+ (1070 1565) (1090 1565) (1090 1810) (1150 1810) (1150 1765)
+ (1125 1740) (1125 1640) (1145 1640) (1145 1565) (1165 1565)
+ (1165 1540) (1145 1540) (1145 1485) (1090 1485) (1090 1540)
+ (1070 1540)
+ )
+)
+Layer(6 "Vcc-component")
+(
+ Line(1045 1870 1045 1935 25 30 0x00000000)
+ Line(708 2155 708 1988 40 30 0x00000000)
+ Line(2575 1925 2490 2010 25 30 0x00000000)
+ Line(1630 1340 1630 1250 10 30 0x00000000)
+ Line(1910 1430 1965 1430 10 30 0x00000000)
+ Line(1910 1395 1910 1430 10 30 0x00000000)
+ Line(1200 2355 1000 2155 35 30 0x00000000)
+ Line(2575 1925 2485 1835 25 30 0x00000000)
+ Line(1070 1265 1070 1330 25 30 0x00000000)
+ Line(2360 1500 2360 1315 25 30 0x00000000)
+ Line(2445 1250 2445 1675 30 30 0x00000000)
+ Line(2100 1250 2445 1250 30 30 0x00000000)
+ Line(1910 1340 1910 1250 10 30 0x00000000)
+ Line(1965 1430 1965 1400 10 30 0x00000000)
+ Line(2375 1585 2440 1585 25 30 0x00000000)
+ Line(2665 1835 2575 1925 30 30 0x00000000)
+ Line(1120 1875 1190 1875 20 30 0x00000000)
+ Line(1045 1595 1045 1875 20 30 0x00000000)
+ Line(1045 1875 1120 1875 20 30 0x00000000)
+ Line(2875 2025 2675 2025 25 30 0x00000000)
+ Line(1285 2355 1200 2355 35 30 0x00000000)
+ Line(1355 2285 1285 2355 35 30 0x00000000)
+ Line(2675 2025 2575 1925 25 30 0x00000000)
+ Line(1000 2155 708 2155 40 30 0x00000000)
+ Line(1060 1510 1060 1375 25 30 0x00000000)
+ Line(1190 1875 1280 1785 20 30 0x00000000)
+ Line(2490 2010 2490 2135 25 30 0x00000000)
+ Line(2450 1510 2495 1510 35 30 0x00000000)
+ Line(2485 1835 2485 1680 25 30 0x00000000)
+ Line(2485 1680 2375 1680 25 30 0x00000000)
+ Line(2665 1800 2665 1835 30 30 0x00000000)
+ Line(2375 1680 2270 1680 30 30 0x00000000)
+ Line(2490 2135 2400 2225 25 30 0x00000000)
+ Polygon(0x00000000)
+ (
+ (1500 1255) (1530 1255) (1530 1295) (1500 1295)
+ )
+ Polygon(0x00000010)
+ (
+ (1445 1255) (1635 1255) (1635 995) (1635 995) (1635 995)
+ (1635 995) (1635 995) (1445 995)
+ )
+ Polygon(0x00000010)
+ (
+ (1885 1260) (2120 1260) (2120 1005) (1921 1003) (1885 1039)
+ )
+ Polygon(0x00000000)
+ (
+ (2080 1250) (2110 1250) (2110 1295) (2080 1295)
+ )
+)
+Layer(7 "unused")
+(
+)
+Layer(8 "unused")
+(
+ Line(3135 3225 345 3225 35 30 0x00000000)
+ Line(3135 210 3135 3225 35 30 0x00000000)
+ Line(345 210 3135 210 35 30 0x00000000)
+ Line(345 3225 345 210 35 30 0x00000000)
+)
+Layer(9 "silk")
+(
+)
+Layer(10 "silk")
+(
+ Text(2210 3120 0 115 "ANODE" 0x00000400)
+ Text(1855 3125 0 115 "-Y" 0x00000400)
+ Text(2045 3130 0 115 "+Y" 0x00000400)
+ Text(1255 3125 0 115 "-X" 0x00000400)
+ Text(1455 3125 0 115 "+X" 0x00000400)
+ Text(525 295 0 280 "FLARE GENESIS" 0x00000400)
+ Text(435 2815 0 165 "LED Interface" 0x00000400)
+ Text(1885 285 0 295 "harry eaton" 0x00000400)
+)
diff --git a/tutorial/pcb/LED.NET b/tutorial/pcb/LED.NET
new file mode 100755
index 0000000..eb9f8a2
--- /dev/null
+++ b/tutorial/pcb/LED.NET
@@ -0,0 +1,47 @@
+AGND C8-2 C9-2 C10-2 C11-2 C12-2 C13-2 C20-2 C21-2 R7-2 R9-2 \
+ R10-2 U2-6 U2-7 U2-8 U2-9 U2-18 U3-2 U3-5 U7-4
+DGND C5-2 C6-2 C7-2 C14-2 C15-2 C16-2 C17-1 J3-1 U2-14 U2-19 \
+ U4-2 U4-5 U5-5 U6-4 X1-2
+Minus12V C3-1 C4-1 J3-9 U1-6
+Plus12V J3-6 R11-1 R12-2 U1-7 U1-11
+S00001 C8-1 C9-1 C10-1 C13-1 C18-1 R2-2 R6-1 R8-1 U2-15 U2-17 \
+ U3-4 U7-1 U7-7
+SIG10 Skinny U1-2 U1-8 U1-15
+SIG41 Power C3-2 R3-2 U1-16
+SIG43 C4-2 R1-2 U1-1
+SIG49 C2-1 R4-2 R6-2 R7-1 U2-4
+SIG50 C2-2 R4-1 U1-5 U2-3
+SIG51 C1-1 R5-2 R8-2 R9-1 U2-2
+SIG52 C1-2 R5-1 U1-12 U2-1
+SIG87 U2-10 U2-11
+SIG88 U2-12 U2-13
+SIG91 C19-1 C20-1 C21-1 U2-16 U7-2 U7-6
+SIG100 U2-21 U5-11
+SIG101 U2-20 U5-10
+SIG124 J2-3 U1-4
+SIG125 J2-2 U1-3
+SIG127 J1-2 U1-14
+SIG139 C11-1 U3-1
+SIG146 C12-1 R11-2 U3-6
+SIG150 C15-1 R12-1 U4-6
+SIG155 C14-1 U4-1
+SIG191 U5-16 X1-3
+SIG241 U2-26 U5-15
+SIG252 R13-1 U4-3 U5-4
+SIG258 U5-18 U6-3
+SIG259 U5-17 U6-2
+SIG285 J3-4 R14-1 U6-7
+SIG286 J3-5 R14-2 U6-8
+SIG291 U2-22 U5-9
+SIG292 U2-23 U5-8
+SIG293 U2-24 U5-7
+SIG294 U2-25 U5-6
+SIG296 J3-2 U6-5
+SIG297 J3-3 U6-6
+SIG310 J1-1 R10-1 U2-5
+SIG311 J1-3 U1-13
+SIG321 C5-1 C6-1 C7-1 C16-1 C17-2 R13-2 U2-28 U4-4 U5-14 U6-1 \
+ X1-4
+SIG338 R1-1 R2-1 R3-1 U7-3
+SIG341 C18-2 U7-8
+SIG343 C19-2 U7-5
diff --git a/tutorial/pcb/bridge.pcb b/tutorial/pcb/bridge.pcb
new file mode 100644
index 0000000..dc79211
--- /dev/null
+++ b/tutorial/pcb/bridge.pcb
@@ -0,0 +1,6 @@
+V- T1-2
+V+ T1-1
+int5 T1-3 rectifier1/D4-1 rectifier1/D3-2
+int6 T1-4 rectifier1/D2-1 rectifier1/D1-2
+Vout rectifier1/D3-1 rectifier1/D1-1 C2-1 C1-1
+GND rectifier1/D4-2 rectifier1/D2-2 C2-2 C1-2
diff --git a/tutorial/pcb/flare_objects.gif b/tutorial/pcb/flare_objects.gif
new file mode 100644
index 0000000..d2938ed
--- /dev/null
+++ b/tutorial/pcb/flare_objects.gif
Binary files differ
diff --git a/tutorial/pcb/pic_instance.gif b/tutorial/pcb/pic_instance.gif
new file mode 100644
index 0000000..eb6ae04
--- /dev/null
+++ b/tutorial/pcb/pic_instance.gif
Binary files differ
diff --git a/tutorial/pcb/pic_object.gif b/tutorial/pcb/pic_object.gif
new file mode 100644
index 0000000..5ba2733
--- /dev/null
+++ b/tutorial/pcb/pic_object.gif
Binary files differ
diff --git a/tutorial/pcb/powersup.pcb b/tutorial/pcb/powersup.pcb
new file mode 100644
index 0000000..15da12b
--- /dev/null
+++ b/tutorial/pcb/powersup.pcb
@@ -0,0 +1,10 @@
+NET1 power_supply1/T1-3 power_supply1/rectifier1/D4-1 \
+ power_supply1/rectifier1/D3-2
+NET2 power_supply1/T1-4 power_supply1/rectifier1/D2-1 \
+ power_supply1/rectifier1/D1-2
+In+ power_supply1/T1-1
+In- power_supply1/T1-2
+Out power_supply1/rectifier1/D3-1 power_supply1/rectifier1/D1-1 \
+ power_supply1/C2-1 power_supply1/C1-1 R1-1
+GND power_supply1/rectifier1/D4-2 power_supply1/rectifier1/D2-2 \
+ power_supply1/C2-2 power_supply1/C1-2 R1-2
diff --git a/tutorial/psfiles/analoglib1.lps b/tutorial/psfiles/analoglib1.lps
new file mode 100644
index 0000000..9ac56dd
--- /dev/null
+++ b/tutorial/psfiles/analoglib1.lps
@@ -0,0 +1,238 @@
+%! PostScript set of library objects for XCircuit
+% Version: 2.0
+% Library name is: analoglib
+% Author: Tim Edwards <tim@stravinsky.jhuapl.edu>
+%
+
+% XCircuitLib library objects
+
+/arrowhead {
+% -12 -32 24 36 bbox
+begingate
+8 -28 beginpath
+3 -18 3 -15 0 0 curveto
+-3 -15 -3 -18 -8 -28 curveto
+-2 -26 2 -26
+8 -28 curveto
+249 1.00 endpath
+endgate
+} def
+
+/source {
+% -32 -64 64 128 bbox
+% hidden
+begingate
+1 1.00 0 0 32 0.00 360.00 xcarc
+1 1.00 0 32 0 64 2 polygon
+1 1.00 0 -32 0 -64 2 polygon
+endgate
+} def
+
+/capacitor {
+% -32 -64 177 128 bbox
+(1.0) (p) 2 beginparm
+% fundamental
+1 1.00 0 -64 0 -6 2 polygon
+1 1.00 0 64 0 6 2 polygon
+1 1.00 -32 6 32 6 2 polygon
+1 1.00 -32 -6 32 -6 2 polygon
+1.000 0.000 0.000 scb
+(c.1) {/Times-Roman 1.000 cf} 2 9 0 0 64 pinlabel
+(c.2) {/Times-Roman 1.000 cf} 2 13 0 0 -64 pinlabel
+sce
+(spice:C%i %pc.1 %pc.2 %v"1.0"%v"p") {/Times-Roman 1.000 cf} 2 0 0 -208 -160 infolabel
+(sim:c %pc.1 %pc.2) {/Times-Roman 1.000 cf} 2 0 0 -208 -208 infolabel
+(F) v2 {hS} v1 {/Helvetica 1.000 cf} 5 20 0 48 0 label
+endgate
+} def
+
+/polarized {
+% -32 -64 177 128 bbox
+(1.0) (p) 2 beginparm
+% fundamental
+1 1.00 0 -64 0 -6 2 polygon
+1 1.00 0 64 0 6 2 polygon
+1 1.00 -32 6 32 6 2 polygon
+1 1.00 0 -80 74 66.00 114.00 xcarc
+1.000 0.000 0.000 scb
+(t) {/Times-Roman 1.000 cf} 2 9 0 0 64 pinlabel
+(b) {/Times-Roman 1.000 cf} 2 13 0 0 -64 pinlabel
+sce
+(spice:C%i %pt %pb %v"1.0"%v"p") {/Times-Roman 1.000 cf} 2 0 0 -208 -160 infolabel
+(sim:e %pt %pb %pb) {/Times-Roman 1.000 cf} 2 0 0 -208 -208 infolabel
+(F) v2 {hS} v1 {/Helvetica 1.000 cf} 5 20 0 48 0 label
+endgate
+} def
+
+/resistor {
+% -14 -64 151 128 bbox
+(1.0) (k) 2 beginparm
+% fundamental
+1 1.00 0 64 0 36 2 polygon
+1 1.00 0 -64 0 -36 2 polygon
+1 1.00 0 -36 14 -30 -14 -18 14 -6 -14 6 14 18 -14 30 0 36 8 polygon
+1.000 0.000 0.000 scb
+(r.1) {/Times-Roman 1.000 cf} 2 9 0 0 64 pinlabel
+(r.2) {/Times-Roman 1.000 cf} 2 13 0 0 -64 pinlabel
+sce
+(spice:R%i %pr.1 %pr.2 %v"1.0"%v"k") {/Times-Roman 1.000 cf} 2 0 0 -208 -160 infolabel
+(sim:r %pr.1 %pr.2) {/Times-Roman 1.000 cf} 2 0 0 -208 -208 infolabel
+(W) {/Symbol 1.000 cf} v2 {hS} v1 {/Helvetica 1.000 cf} 6 20 0 32 0 label
+endgate
+} def
+
+/inductor {
+% -14 -64 164 112 bbox
+(1.0) (m) 2 beginparm
+% fundamental
+1 1.00 20 -28 20 -44 0 -48 0 -24 spline
+1 1.00 -20 -20 -20 -32 0 -28 0 -24 spline
+1 1.00
+20 32 20 16 0 12 0 36 spline
+1 1.00 20 12 20 -4 0 -8 0 16 spline
+1 1.00 20 -8 20 -24 0 -28 0 -4 spline
+1 1.00 -20 20 -20
+8 0 12 0 16 spline
+1 1.00 -20 0 -20 -12 0 -8 0 -4 spline
+1 1.00 0 -48 0 -64 2 polygon
+1 1.00 0 36 0 48 2 polygon
+1.000 0.000 0.000 scb
+(l.1) {/Times-Roman 1.000 cf} 2 9 0 0 48 pinlabel
+(l.2) {/Times-Roman 1.000 cf} 2 13 0 0 -64 pinlabel
+sce
+(spice:L%i %pl.1 %pl.2 %v"1.0"%v"m") {/Times-Roman 1.000 cf} 2 0 0 -208 -160 infolabel
+(sim:l %pl.1 %pl.2) {/Times-Roman 1.000 cf} 2 0 0 -208 -208 infolabel
+(H) v2 {hS} v1 {/Helvetica 1.000 cf} 5 20 0 32 0 label
+endgate
+} def
+
+/vsource {
+% -32 -64 139 128 bbox
+(5) 1 beginparm
+% fundamental
+1.00 0 0 0 source
+(+) {/Symbol 1.000 cf} 2 5 0 0 18 label
+(-) {/Symbol 1.000 cf} 2 5 0 0 -18 label
+1.000 0.000 0.000 scb
+(v.p) {/Times-Roman 1.000 cf} 2 9 0 0 64 pinlabel
+(v.m) {/Times-Roman 1.000 cf} 2 13 0 0 -64 pinlabel
+sce
+(spice:V%i %pv.m %pv.p %v"5") {/Helvetica 1.000 cf} 2 20 0 -96 -160 infolabel
+(V) {hS} v1 {/Helvetica 1.000 cf} 4 20 0 48 0 label
+endgate
+} def
+
+/isource {
+% -32 -64 163 128 bbox
+(1) (m) 2 beginparm
+% fundamental
+1.00 0 0 0 source
+1 0.75 0 20 0 -8 2 polygon
+0.80 180 0 -20 arrowhead
+1.000 0.000 0.000 scb
+(i.p) {/Times-Roman 1.000 cf} 2 9 0 0 64 pinlabel
+(i.m) {/Times-Roman 1.000 cf} 2 13 0 0 -64 pinlabel
+sce
+(spice:I%i %pi.m %pi.p %v"1"%v"m") {/Times-Roman 1.000 cf} 2 20 0 -96 -160 infolabel
+(A) v2 {hS} v1 {/Helvetica 1.000 cf} 5 20 0 48 0 label
+endgate
+} def
+
+/acsource {
+% -32 -64 211 128 bbox
+(5) (0) (1) (k) 4 beginparm
+% fundamental
+1.00 0 0 0 source
+1 0.80 0 -48 0 48 -16 0 16 0 spline
+1.000 0.000 0.000 scb
+(s.p) {/Times-Roman 1.000 cf} 2 9 0 0 64 pinlabel
+(s.m) {/Times-Roman 1.000 cf} 2 13 0 0 -64 pinlabel
+sce
+(spice:V%i %ps.m %ps.p SIN\(%v"0" %v"5" %v"1"%v"k"\)) {/Helvetica 1.000 cf} 2 20 0 -336 -160 infolabel
+(offset) {ss} (V) {hS} v2 {/Helvetica 1.000 cf} 6 20 0 48 0 label
+(p-p) {ss} (V) {hS} v1 {/Helvetica 1.000 cf} 6 20 0 48 48 label
+(Hz) v4 {hS} v3 {/Helvetica 1.000 cf} 5 20 0 48 -48 label
+endgate
+} def
+
+/nmos {
+% -64 -64 161 128 bbox
+(3) (2) 2 beginparm
+% fundamental
+1 1.00 0 -64 0 -28 -32 -28 -32 28 0 28 0 64 6 polygon
+1 1.00 -44 -28 -44 28 2 polygon
+1 1.00 -44 0 -64 0 2 polygon
+1.000 0.000 0.000 scb
+(G) {/Helvetica 1.000 cf} 2 7 0 -64 0 pinlabel
+(S) {/Helvetica 1.000 cf} 2 13 0 0 -64 pinlabel
+(D) {/Helvetica 1.000 cf} 2 9 0 0 64 pinlabel
+sce
+(spice:M%i %pD %pG %pS GND nmos W=%v"3" L=%v"2") {/Times-Roman 1.000 cf} 2 4 0 -244 -139 infolabel
+(sim:n %pG %pD %pS) {/Times-Roman 1.000 cf} 2 4 0 -244 -187 infolabel
+v1 (W=) {/Helvetica 1.000 cf} 3 20 0 16 16 label
+v2 (L=) {/Helvetica 1.000 cf} 3 20 0 16 -16 label
+endgate
+} def
+
+/pmos {
+% -64 -64 161 128 bbox
+(3) (2) 2 beginparm
+% fundamental
+1 1.00 -44 -28 -44 28 2 polygon
+1 1.00 -60 0 -64 0 2 polygon
+1 1.00 0 -64 0 -28 -32 -28 -32 28 0 28 0 64 6 polygon
+1 1.00 -52 0 8 0.00 360.00 xcarc
+1.000 0.000 0.000 scb
+(S) {/Helvetica 1.000 cf} 2 9 0 0 64 pinlabel
+(D) {/Helvetica 1.000 cf} 2 13 0 0 -64 pinlabel
+(G) {/Helvetica 1.000 cf} 2 7 0 -64 0 pinlabel
+sce
+(spice:M%i %pD %pG %pS Vdd pmos W=%v"3" L=%v"2") {/Times-Roman 1.000 cf} 2 4 0 -196 -139 infolabel
+(sim:p %pG %pD %pS) {/Times-Roman 1.000 cf} 2 4 0 -196 -187 infolabel
+v1 (W=) {/Helvetica 1.000 cf} 3 20 0 16 16 label
+v2 (L=) {/Helvetica 1.000 cf} 3 20 0 16 -16 label
+endgate
+} def
+
+/npn {
+% -64 -64 73 128 bbox
+begingate
+% fundamental
+1 1.00 -48 0 -64 0 2 polygon
+1 1.00 -48 48 -48 -48 2 polygon
+1 1.00 0 48 -48 22 2 polygon
+1 1.00 0 48 0 64 2 polygon
+1 1.00 0 -48 -48 -22 2 polygon
+1 1.00 0 -48 0 -64 2 polygon
+1.00 240 0 -48 arrowhead
+1.000 0.000 0.000 scb
+(C) {/Times-Roman 1.000 cf} 2 9 0 0 64 pinlabel
+(B) {/Times-Roman 1.000 cf} 2 7 0 -64 0 pinlabel
+(E) {/Times-Roman 1.000 cf} 2 13 0 0 -64 pinlabel
+sce
+(spice:Q%i %pC %pB %pE npn) {/Times-Roman 1.000 cf} 2 4 0 -244 -139 infolabel
+(sim:b %pB %pE %pC) {/Times-Roman 1.000 cf} 2 4 0 -244 -187 infolabel
+endgate
+} def
+
+/pnp {
+% -64 -64 64 128 bbox
+begingate
+% fundamental
+1 1.00 -48 0 -64 0 2 polygon
+1 1.00 -48 48 -48 -48 2 polygon
+1 1.00 0 48 -48 22 2 polygon
+1 1.00 0 48 0 64 2 polygon
+1 1.00 0 -48 -48 -22 2 polygon
+1 1.00 0 -48 0 -64 2 polygon
+1.00 120 -48 22 arrowhead
+1.000 0.000 0.000 scb
+(C) {/Times-Roman 1.000 cf} 2 13 0 0 -64 pinlabel
+(B) {/Times-Roman 1.000 cf} 2 7 0 -64 0 pinlabel
+(E) {/Times-Roman 1.000 cf} 2 9 0 0 64 pinlabel
+sce
+(spice:Q%i %pC %pB %pE pnp) {/Times-Roman 1.000 cf} 2 4 0 -244 -139 infolabel
+endgate
+} def
+
+% EndLib
diff --git a/tutorial/psfiles/analoglib2.lps b/tutorial/psfiles/analoglib2.lps
new file mode 100644
index 0000000..c8050c2
--- /dev/null
+++ b/tutorial/psfiles/analoglib2.lps
@@ -0,0 +1,235 @@
+%! PostScript set of library objects for XCircuit
+% Version: 2.0
+% Library name is: analoglib2
+% Author: R. Timothy Edwards <tim@stravinsky.jhuapl.edu>
+%
+
+% XCircuitLib library objects
+/capacitor {
+% -32 -64 177 128 bbox
+(1.0) (p) 2 beginparm
+% fundamental
+1 1.00 0 -64 0 -6 2 polygon
+1 1.00 0 64 0 6 2 polygon
+1 1.00 -32 6 32 6 2 polygon
+1 1.00 -32 -6 32 -6 2 polygon
+1.000 0.000 0.000 scb
+(c.1) {/Times-Roman 1.000 cf} 2 9 0 0 64 pinlabel
+(c.2) {/Times-Roman 1.000 cf} 2 13 0 0 -64 pinlabel
+sce
+mark v2 v1 (spice:C%i %pc.1 %pc.2 ) {/Times-Roman 1.000 cf} ctmk 4 0 -208 -160 infolabel
+(sim:c %pc.1 %pc.2) {/Times-Roman 1.000 cf} 2 4 0 -208 -208 infolabel
+mark (F) v2 {hS} v1 {/Helvetica 1.000 cf} ctmk 20 0 48 0 label
+endgate
+} def
+
+/polarized {
+% -32 -64 177 128 bbox
+(1.0) (p) 2 beginparm
+% fundamental
+1 1.00 0 -64 0 -6 2 polygon
+1 1.00 0 64 0 6 2 polygon
+1 1.00 -32 6 32 6 2 polygon
+1 1.00 0 -80 74 66.00 114.00 xcarc
+1.000 0.000 0.000 scb
+(t) {/Times-Roman 1.000 cf} 2 9 0 0 64 pinlabel
+(b) {/Times-Roman 1.000 cf} 2 13 0 0 -64 pinlabel
+sce
+mark v2 v1 (spice:C%i %pt %pb ) {/Times-Roman 1.000 cf} ctmk 4 0 -208 -160 infolabel
+(sim:e %pt %pb %pb) {/Times-Roman 1.000 cf} 2 4 0 -208 -208 infolabel
+mark (F) v2 {hS} v1 {/Helvetica 1.000 cf} ctmk 20 0 48 0 label
+endgate
+} def
+
+/resistor {
+% -14 -64 151 128 bbox
+(1.0) (k) 2 beginparm
+% fundamental
+1 1.00 0 64 0 36 2 polygon
+1 1.00 0 -64 0 -36 2 polygon
+1 1.00 0 -36 14 -30 -14 -18 14 -6 -14 6 14 18 -14 30 0 36 8 polygon
+1.000 0.000 0.000 scb
+(r.1) {/Times-Roman 1.000 cf} 2 9 0 0 64 pinlabel
+(r.2) {/Times-Roman 1.000 cf} 2 13 0 0 -64 pinlabel
+sce
+mark v2 v1 (spice:R%i %pr.1 %pr.2 ) {/Times-Roman 1.000 cf} ctmk 4 0 -208 -160 infolabel
+(sim:r %pr.1 %pr.2) {/Times-Roman 1.000 cf} 2 4 0 -208 -208 infolabel
+mark (W) {/Symbol 1.000 cf} v2 {hS} v1 {/Helvetica 1.000 cf} ctmk 20 0 32 0 label
+endgate
+} def
+
+/inductor {
+% -14 -64 164 112 bbox
+(1.0) (m) 2 beginparm
+% fundamental
+1 1.00 20 -28 20 -44 0 -48 0 -24 spline
+1 1.00 -20 -20 -20 -32 0 -28 0 -24 spline
+1 1.00 20 32 20 16 0 12 0 36 spline
+1 1.00 20 12 20 -4 0 -8 0 16 spline
+1 1.00 20 -8 20 -24 0 -28 0 -4 spline
+1 1.00 -20 20 -20 8 0 12 0 16 spline
+1 1.00 -20 0 -20 -12 0 -8 0 -4 spline
+1 1.00 0 -48 0 -64 2 polygon
+1 1.00 0 36 0 48 2 polygon
+1.000 0.000 0.000 scb
+(l.1) {/Times-Roman 1.000 cf} 2 9 0 0 48 pinlabel
+(l.2) {/Times-Roman 1.000 cf} 2 13 0 0 -64 pinlabel
+sce
+mark v2 v1 (spice:L%i %pl.1 %pl.2 ) {/Times-Roman 1.000 cf} ctmk 4 0 -208 -160 infolabel
+(sim:l %pl.1 %pl.2) {/Times-Roman 1.000 cf} 2 4 0 -208 -208 infolabel
+mark (H) v2 {hS} v1 {/Helvetica 1.000 cf} ctmk 20 0 32 0 label
+endgate
+} def
+
+/source {
+% -32 -64 64 128 bbox
+% hidden
+begingate
+1 1.00 0 0 32 0.00 360.00 xcarc
+1 1.00 0 32 0 64 2 polygon
+1 1.00 0 -32 0 -64 2 polygon
+endgate
+} def
+
+/vsource {
+% -32 -64 139 128 bbox
+(5) 1 beginparm
+% fundamental
+1.00 0 0 0 source
+(+) {/Symbol 1.000 cf} 2 5 0 0 18 label
+(-) {/Symbol 1.000 cf} 2 5 0 0 -18 label
+1.000 0.000 0.000 scb
+(v.p) {/Times-Roman 1.000 cf} 2 9 0 0 64 pinlabel
+(v.m) {/Times-Roman 1.000 cf} 2 13 0 0 -64 pinlabel
+sce
+mark v1 (spice:V%i %pv.m %pv.p ) {/Helvetica 1.000 cf} ctmk 20 0 -96 -160 infolabel
+mark (V) {hS} v1 {/Helvetica 1.000 cf} ctmk 20 0 48 0 label
+endgate
+} def
+
+/arrowhead {
+% -12 -32 24 36 bbox
+begingate
+8 -28 beginpath
+3 -18 3 -15 0 0 curveto
+-3 -15 -3 -18 -8 -28 curveto
+-2 -26 2 -26 8 -28 curveto
+249 1.00 endpath
+endgate
+} def
+
+/isource {
+% -32 -64 163 128 bbox
+(1) (m) 2 beginparm
+% fundamental
+1.00 0 0 0 source
+1 0.75 0 20 0 -8 2 polygon
+0.80 180 0 -20 arrowhead
+1.000 0.000 0.000 scb
+(i.p) {/Times-Roman 1.000 cf} 2 9 0 0 64 pinlabel
+(i.m) {/Times-Roman 1.000 cf} 2 13 0 0 -64 pinlabel
+sce
+mark v2 v1 (spice:I%i %pi.m %pi.p ) {/Times-Roman 1.000 cf} ctmk 20 0 -96 -160 infolabel
+mark (A) v2 {hS} v1 {/Helvetica 1.000 cf} ctmk 20 0 48 0 label
+endgate
+} def
+
+/acsource {
+% -32 -64 211 128 bbox
+(5) (0) (1) (k) 4 beginparm
+% fundamental
+1.00 0 0 0 source
+1 0.80 0 -48 0 48 -16 0 16 0 spline
+1.000 0.000 0.000 scb
+(s.p) {/Times-Roman 1.000 cf} 2 9 0 0 64 pinlabel
+(s.m) {/Times-Roman 1.000 cf} 2 13 0 0 -64 pinlabel
+sce
+mark (\)) v4 v3 ( ) v1 ( ) v2 (spice:V%i %ps.m %ps.p SIN\() {/Helvetica 1.000 cf} ctmk 20 0 -336 -160 infolabel
+mark (offset) {ss} (V) {hS} v2 {/Helvetica 1.000 cf} ctmk 20 0 48 0 label
+mark (p-p) {ss} (V) {hS} v1 {/Helvetica 1.000 cf} ctmk 20 0 48 48 label
+mark (Hz) v4 {hS} v3 {/Helvetica 1.000 cf} ctmk 20 0 48 -48 label
+endgate
+} def
+
+/nmos {
+% -64 -64 161 128 bbox
+(3) (2) (nmos) 3 beginparm
+% fundamental
+1 1.00 0 -64 0 -28 -32 -28 -32 28 0 28 0 64 6 polygon
+1 1.00 -44 -28 -44 28 2 polygon
+1 1.00 -44 0 -64 0 2 polygon
+1.000 0.000 0.000 scb
+(G) {/Helvetica 1.000 cf} 2 7 0 -64 0 pinlabel
+(S) {/Helvetica 1.000 cf} 2 13 0 0 -64 pinlabel
+(D) {/Helvetica 1.000 cf} 2 9 0 0 64 pinlabel
+sce
+mark v2 ( L=) v1 ( W=) v3 (spice:M%i %pD %pG %pS GND ) {/Times-Roman 1.000 cf} ctmk 4 0 -244 -139 infolabel
+(sim:n %pG %pD %pS) {/Times-Roman 1.000 cf} 2 4 0 -244 -187 infolabel
+mark v1 (W=) {/Helvetica 1.000 cf} ctmk 20 0 16 16 label
+mark v2 (L=) {/Helvetica 1.000 cf} ctmk 20 0 16 -16 label
+endgate
+} def
+
+/pmos {
+% -64 -64 161 128 bbox
+(3) (2) (pmos) 3 beginparm
+% fundamental
+1 1.00 -44 -28 -44 28 2 polygon
+1 1.00 -60 0 -64 0 2 polygon
+1 1.00 0 -64 0 -28 -32 -28 -32 28 0 28 0 64 6 polygon
+1 1.00 -52 0 8 0.00 360.00 xcarc
+1.000 0.000 0.000 scb
+(S) {/Helvetica 1.000 cf} 2 9 0 0 64 pinlabel
+(D) {/Helvetica 1.000 cf} 2 13 0 0 -64 pinlabel
+(G) {/Helvetica 1.000 cf} 2 7 0 -64 0 pinlabel
+sce
+mark v2 ( L=) v1 ( W=) v3 (spice:M%i %pD %pG %pS Vdd ) {/Times-Roman 1.000 cf} ctmk 4 0 -196 -139 infolabel
+(sim:p %pG %pD %pS) {/Times-Roman 1.000 cf} 2 4 0 -196 -187 infolabel
+mark v1 (W=) {/Helvetica 1.000 cf} ctmk 20 0 16 16 label
+mark v2 (L=) {/Helvetica 1.000 cf} ctmk 20 0 16 -16 label
+endgate
+} def
+
+/npn {
+% -64 -64 72 128 bbox
+(npn) 1 beginparm
+% fundamental
+1 1.00 -48 0 -64 0 2 polygon
+1 1.00 -48 48 -48 -48 2 polygon
+1 1.00 0 48 -48 22 2 polygon
+1 1.00 0 48 0 64 2 polygon
+1 1.00 0 -48 -48 -22 2 polygon
+1 1.00 0 -48 0 -64 2 polygon
+1.00 240 0 -48 arrowhead
+1.000 0.000 0.000 scb
+(C) {/Times-Roman 1.000 cf} 2 9 0 0 64 pinlabel
+(B) {/Times-Roman 1.000 cf} 2 7 0 -64 0 pinlabel
+(E) {/Times-Roman 1.000 cf} 2 13 0 0 -64 pinlabel
+sce
+mark v1 (spice:Q%i %pC %pB %pE ) {/Times-Roman 1.000 cf} ctmk 4 0 -244 -139 infolabel
+(sim:b %pB %pE %pC) {/Times-Roman 1.000 cf} 2 4 0 -244 -187 infolabel
+endgate
+} def
+
+/pnp {
+% -64 -64 72 128 bbox
+(pnp) 1 beginparm
+% fundamental
+1 1.00 -48 0 -64 0 2 polygon
+1 1.00 -48 48 -48 -48 2 polygon
+1 1.00 0 48 -48 22 2 polygon
+1 1.00 0 48 0 64 2 polygon
+1 1.00 0 -48 -48 -22 2 polygon
+1 1.00 0 -48 0 -64 2 polygon
+1.00 120 -48 22 arrowhead
+1.000 0.000 0.000 scb
+(C) {/Times-Roman 1.000 cf} 2 13 0 0 -64 pinlabel
+(B) {/Times-Roman 1.000 cf} 2 7 0 -64 0 pinlabel
+(E) {/Times-Roman 1.000 cf} 2 9 0 0 64 pinlabel
+sce
+mark v1 (spice:Q%i %pC %pB %pE ) {/Times-Roman 1.000 cf} ctmk 4 0 -244 -139 infolabel
+endgate
+} def
+
+
+% EndLib
diff --git a/tutorial/psfiles/bridge.ps b/tutorial/psfiles/bridge.ps
new file mode 100644
index 0000000..392f5ed
--- /dev/null
+++ b/tutorial/psfiles/bridge.ps
@@ -0,0 +1,370 @@
+%!PS-Adobe-3.0
+%%Title: ~/tmp/tutorial/bridge
+%%Creator: Xcircuit v2.3
+%%CreationDate: Wed Jul 18 11:20:21 2001
+%%Pages: 1
+%%BoundingBox: 114 302 498 490
+%%DocumentNeededResources: font Helvetica font Times-Roman font Times-RomanISO
+%%+ font HelveticaISO font Symbol
+%%EndComments
+%%BeginProlog
+%
+% PostScript prolog for output from xcircuit
+% Version: 2.3
+%
+% Electrical circuit (and otherwise general) drawing program
+%
+% Written by Tim Edwards 8/5/93--5/16/01 (tim@bach.ece.jhu.edu)
+% The Johns Hopkins University
+%
+%%BeginResource: procset XCIRCproc 2.3 1
+% supporting definitions --- these are the primary xcircuit types.
+
+/XCIRCsave save def
+/topmat matrix currentmatrix def
+
+/fontslant { /slant exch def [1 0 slant 1 0 0]
+ exch findfont exch makefont dup length dict /ndict exch def
+ { 1 index /FID ne { ndict 3 1 roll put } { pop pop } ifelse } forall
+ ndict definefont pop} def
+/ul { dup type /stringtype eq showflag 1 eq and { gsave
+ currentpoint topmat setmatrix 0 0 moveto 2 index stringwidth pop (_)
+ false charpath flattenpath pathbbox grestore exch pop 1 index
+ sub setlinewidth exch pop currentpoint 3 -1 roll add moveto 0
+ rlineto stroke moveto } if } def
+/ol { dup type /stringtype eq showflag 1 eq and { gsave gsave
+ currentpoint topmat setmatrix 2 index stringwidth pop 3 index
+ true charpath flattenpath pathbbox grestore exch pop
+ exch pop topmat setmatrix (_) true charpath pathbbox grestore
+ exch pop 1 index sub setlinewidth exch pop currentpoint
+ exch 4 1 roll exch sub add moveto pop 0 rlineto stroke
+ moveto } if } def
+/stW { gsave currentpoint newpath moveto true charpath flattenpath
+ pathbbox pop exch pop sub grestore } def
+/Ts {mark Tabs aload pop counttomark 1 add array astore /Tabs exch def Tabs
+ 0 currentpoint pop put} def
+/Tbn {mark Tabs aload pop counttomark dup 2 add 1 roll cleartomark 1 sub} def
+/Tb { 0 1 Tbn {Tabs exch get dup currentpoint pop lt
+ {currentpoint exch pop moveto exit} {pop} ifelse } for } def
+/Tf { Tbn -1 0 {Tabs exch get dup currentpoint pop gt
+ {currentpoint exch pop moveto exit} {pop} ifelse } for } def
+/qS { (aa) stW (a a) stW sub 4 div 0 Kn } def
+/hS { qS qS } def
+/pspc 0 def
+/cf0 { scalefont setfont } bind def
+/Kn { dup kY add /kY exch def rmoveto } bind def
+/ss { /fscale fscale 0.67 mul def currentfont 0.67 cf0 0 fscale0 fscale mul
+ 0.33 mul neg Kn} def
+/Ss { /fscale fscale 0.67 mul def currentfont 0.67 cf0 0 fscale0 fscale mul
+ 0.67 mul Kn } def
+/ns { 0 kY neg Kn /kY 0 def /fscale 1.0 def xfont0 1.0 cf0 } def
+/CR { ns 0 /Bline Bline fscale0 neg add def Bline moveto } def
+/cf { dup type /realtype ne {1.0} if exch findfont exch kY 0 eq
+ { 40 mul dup /fscale0 exch def cf0 /xfont0 currentfont def}
+ {fscale0 mul fscale mul cf0} ifelse } def
+/ctmk { counttomark dup 2 add -1 roll pop } bind def
+/label { gsave translate 0 0 moveto dup scale /rotval exch def /just exch def
+ just 16 and 0 gt {0 1 dtransform gsave pagemat setmatrix idtransform
+ exch grestore 1 0 dtransform gsave pagemat setmatrix idtransform
+ exch grestore dup 0 eq {pop mul 0 gt} {3 1 roll pop pop 0 lt} ifelse
+ {-1 /just just dup 3 and 1 ne {3 xor} if def} {1} ifelse exch 0 lt
+ {-1 /just just dup 12 and 4 ne {12 xor} if def} {1} ifelse scale }
+ if /showflag 0 def /fspc pspc def /Bline 0 def /Tabs 0 array def
+ /fscale 1.0 def /kY 0 def
+ gsave dup 1 add copy 0 exch {exch dup type /stringtype eq {true
+ charpath flattenpath} {exec} ifelse } repeat pop pathbbox grestore
+ 3 -1 roll pop 3 1 roll just 1 and 0 gt {just 2 and 0 gt {exch pop
+ neg fspc sub} {exch sub 0.5 mul neg} ifelse} {pop neg fspc add}
+ ifelse exch Bline exch just 4 and 0 gt {just 8 and 0 gt {exch pop
+ neg fspc sub} {add 0.5 mul neg} ifelse} {pop neg fspc add} ifelse
+ /showflag 1 def rotval rotate Kn currentpoint translate
+ /Bline 0 def /Tabs 0 array def /fscale 1.0 def /kY 0 def
+ {dup type /stringtype eq {show}{exec} ifelse} repeat grestore } def
+/pinlabel { hlevel 0 eq { /pspc 20 def label /pspc 0 def }
+ { pop pop pop pop pop {pop} repeat } ifelse } def
+/pinglobal { pinlabel } def
+/infolabel { pinlabel } def
+
+/scb { setrgbcolor } bind def /sce { defColor aload pop scb } bind def
+/cRedef {/defColor currentcolor 3 array astore def} def
+/begingate { /hlevel hlevel 1 add def /defColor currentcolor sce 3 array
+ astore def gsave sce translate 0 0 moveto dup 0 lt
+ {neg 1 sub -1 1 scale} if rotate dup scale } bind def
+/makeparm {3 string cvs dup length 1 add string /tstr exch def tstr exch
+ 1 exch putinterval tstr 0 (v) putinterval tstr cvn} bind def
+/beginparm { -1 1 {makeparm exch def} for
+ dup type /arraytype eq { aload length -1 1 {makeparm exch def}
+ for } if begingate } bind def
+/endgate { /hlevel hlevel 1 sub def grestore defColor aload pop cRedef
+ scb} bind def
+
+/hlevel 0 def
+/tmpa [1 0 0 1 0 0] def
+/gar {8 8 true tmpa {<c0 c0 00 00 0c 0c 00 00>} imagemask} bind
+{8 8 true tmpa {<30 70 60 02 03 07 06 20>} imagemask} bind
+{8 8 true tmpa {<0c 1e 1e 0c c0 e1 e1 c0>} imagemask} bind
+{8 8 true tmpa {<0f 0f 0f 0f f0 f0 f0 f0>} imagemask} bind
+{8 8 true tmpa {<3f f3 e1 e1 f3 3f 1e 1e>} imagemask} bind
+{8 8 true tmpa {<df cf 8f 9f fd fc f8 f9>} imagemask} bind
+{8 8 true tmpa {<ff 3f 3f ff ff f3 f3 ff>} imagemask} bind 7 array astore def
+/ppaint { gsave clip tmpa dup setmatrix pathbbox neg exch neg 4 2 roll
+ neg 4 -1 roll 2 copy gt {exch} if 8 div ceiling 8 mul 4 2 roll neg 2 copy
+ gt {exch} if 8 div ceiling 8 mul 3 -1 roll -8 5 -1 roll
+ { 3 index exch 5 exch put dup -8 3 index { 3 index
+ exch 4 exch put 3 index exec } for } for pop pop pop pop grestore } bind def
+/setstyles {
+ currentlinewidth mul setlinewidth /style exch def
+ style 1 and 0 gt not {closepath} if
+ style 2 and 0 gt {currentlinewidth 4 mul dup 2 array astore 0 setdash} if
+ style 4 and 0 gt {0.5 currentlinewidth 4 mul 2 array astore 0 setdash} if
+ style dup 256 ge exch 480 lt and { gsave 1 setgray eofill grestore } if
+ style 16 and 0 gt { gsave style 224 and -5 bitshift dup 7 lt
+ {gar exch get ppaint} { pop eofill } ifelse grestore } if
+ style 8 and 0 gt style 512 eq or { newpath } { stroke } ifelse grestore } def
+
+/polygon { gsave /num exch def moveto num 1 sub {lineto} repeat setstyles } def
+/xcarc { gsave newpath arc setstyles } def
+/elb { matrix currentmatrix 7 -1 roll 7 -1 roll translate 5 1 roll 4 -1 roll
+ 3 index div 1 scale } def
+/ele { 0 4 1 roll 0 4 1 roll } bind def
+/ellipse { gsave elb newpath ele arc setmatrix setstyles } def
+/pellip { elb ele arc setmatrix } def
+/nellip { elb ele arcn setmatrix } def
+/spline { gsave moveto curveto setstyles } def
+/polyc { {lineto} repeat } bind def
+/beginpath { gsave moveto } bind def
+/endpath { setstyles } bind def
+/bop { 1 setlinecap 0 setlinejoin 6 setmiterlimit 0 0 0 scb cRedef } def
+/insertion {/PSobj save def /showpage {} def bop translate} def
+/end_insert {PSobj restore} def
+/setpagemat {/pagemat matrix currentmatrix def} def
+/inchscale {setpagemat 0.375 mul dup scale} def
+/cmscale {setpagemat 0.35433071 mul dup scale} def
+
+%%EndResource
+%%EndProlog
+
+/Times-Roman findfont dup length dict begin
+{1 index /FID ne {def} {pop pop} ifelse} forall
+/Encoding ISOLatin1Encoding def currentdict end
+/Times-RomanISO exch definefont pop
+
+/Helvetica findfont dup length dict begin
+{1 index /FID ne {def} {pop pop} ifelse} forall
+/Encoding ISOLatin1Encoding def currentdict end
+/HelveticaISO exch definefont pop
+
+% XCircuit output starts here.
+
+/inductor {
+% -14 -64 29 112 bbox
+begingate
+1 1.00 20 -28 20 -44 0 -48 0 -24 spline
+1 1.00 -20 -20 -20 -32 0 -28 0 -24 spline
+1 1.00 20 32 20 16 0 12 0 36 spline
+1 1.00 20 12 20 -4 0 -8 0 16 spline
+1 1.00 20 -8 20 -24 0 -28 0 -4 spline
+1 1.00 -20 20 -20 8 0 12 0 16 spline
+1 1.00 -20 0 -20 -12 0 -8 0 -4 spline
+1 1.00 0 -48 0 -64 2 polygon
+1 1.00 0 36 0 48 2 polygon
+1.000 0.000 0.000 scb
+(l.1) {/Times-Roman cf} 2 9 0 1.00 0 48 pinlabel
+(l.2) {/Times-Roman cf} 2 13 0 1.00 0 -64 pinlabel
+sce
+(spice:L%i %pl.1 %pl.2 1.0U) {/Times-Roman cf} 2 0 0 1.00 -208 -160 infolabel
+sce
+(sim:l %pl.1 %pl.2) {/Times-Roman cf} 2 0 0 1.00 -208 -208 infolabel
+endgate
+} def
+
+/Transformer {
+% -62 -64 108 112 bbox
+(?) 1 beginparm
+1.00 0 -48 0 inductor
+1 1.00 -16 48 -16 -64 2 polygon
+1 1.00 0 48 0 -64 2 polygon
+1.00 180 32 -16 inductor
+1.000 0.000 0.000 scb
+(1) {/Helvetica cf} 2 25 0 1.00 -48 48 pinlabel
+(2) {/Helvetica cf} 2 29 0 1.00 -48 -64 pinlabel
+(3) {/Helvetica cf} 2 25 0 1.00 32 48 pinlabel
+(4) {/Helvetica cf} 2 29 0 1.00 32 -64 pinlabel
+sce
+mark v1 (pcb:T) {/Times-Roman cf} ctmk 20 0 1.00 -96 -160 infolabel
+endgate
+} def
+
+/circle {
+% -6 -12 28 24 bbox
+% trivial
+begingate
+1 1.00 16 0 6 0.00 360.00 xcarc
+1 1.00 0 0 10 0 2 polygon
+1.000 0.000 0.000 scb
+(out) {/Times-Roman cf} 2 4 0 1.00 16 0 pinlabel
+(out) {/Times-Roman cf} 2 7 0 1.00 0 0 pinlabel
+endgate
+} def
+
+/Diode {
+% -18 -48 36 96 bbox
+(?) 1 beginparm
+248 1.00 -18 -16 0 16 18 -16 3 polygon
+1 1.00 0 -48 0 -16 2 polygon
+1 1.00 0 48 0 16 2 polygon
+1 1.00 -18 16 18 16 2 polygon
+1.000 0.000 0.000 scb
+(1) {/Times-Roman cf} 2 9 0 1.00 0 48 pinlabel
+(2) {/Times-Roman cf} 2 13 0 1.00 0 -48 pinlabel
+sce
+mark v1 (pcb:D) {/Helvetica cf} ctmk 20 0 1.00 -64 -144 infolabel
+mark ( %p1 %p2 diode) v1 (spice:D) {/Times-Roman cf} ctmk 4 0 1.00 -64 -192
+endgate
+} def
+
+/rectifier {
+% -112 -48 192 192 bbox
+begingate
+1.00 315 -64 96 Diode
+1.00 225 32 96 Diode
+1.00 225 -64 0 Diode
+1.00 315 32 0 Diode
+1 1.00 -30 130 -16 144 -2 130 3 polygon
+1 1.00 66 62 80 48 66 34 3 polygon
+1 1.00 -2 -34 -16 -48 -30 -34 3 polygon
+1 1.00 -98 34 -112 48 -98 62 3 polygon
+endgate
+} def
+
+/dot {
+% -10 -10 20 20 bbox
+% trivial
+begingate
+248 1.00 0 0 6 0.00 360.00 xcarc
+1.000 0.000 0.000 scb
+(x) {/Times-Roman cf} 2 29 0 1.00 0 0 pinlabel
+endgate
+} def
+
+/jumper {
+% -4 -14 18 28 bbox
+% trivial
+begingate
+1 1.00 0 0 10 -90.00 90.00 xcarc
+1 1.00 0 10 0 16 2 polygon
+1 1.00 0 -10 0 -16 2 polygon
+1.000 0.000 0.000 scb
+(a) {/Times-Roman cf} 2 1 0 1.00 0 16 pinlabel
+(a) {/Times-Roman cf} 2 13 0 1.00 0 -16 pinlabel
+endgate
+} def
+
+/gnd {
+% -32 -60 64 68 bbox
+% trivial
+begingate
+1 1.00 0 0 0 -32 2 polygon
+1 1.00 -32 -32 32 -32 2 polygon
+1 1.00 -18 -46 18 -46 2 polygon
+1 1.00 -4 -60 4 -60 2 polygon
+1.000 0.000 0.000 scb
+(GND) {/Times-Roman cf} 2 1 0 1.00 0 0 pinglobal
+endgate
+} def
+
+/Capacitor {
+% -32 -64 186 128 bbox
+(1.0) (p) (?) 3 beginparm
+1 1.00 0 -64 0 -6 2 polygon
+1 1.00 0 64 0 6 2 polygon
+1 1.00 -32 6 32 6 2 polygon
+1 1.00 -32 -6 32 -6 2 polygon
+1.000 0.000 0.000 scb
+(1) {/Times-Roman cf} 2 9 0 1.00 0 64 pinlabel
+(2) {/Times-Roman cf} 2 13 0 1.00 0 -64 pinlabel
+sce
+mark v2 v1 ( %p1 %p2 ) v3 (spice:C) {/Times-RomanISO cf} ctmk 4 0 1.00 -208
+-160 infolabel
+sce
+(sim:c %p1 %p2) {/Times-Roman cf} 2 4 0 1.00 -208 -208 infolabel
+mark (F) v2 {hS} v1 {/Times-RomanISO cf} ctmk 20 0 1.00 48 0 label
+sce
+mark v3 (pcb:C) {/Times-Roman cf} ctmk 20 0 1.00 -208 -256 infolabel
+endgate
+} def
+
+/Polarized {
+% -32 -64 176 128 bbox
+(1.0) (p) (?) 3 beginparm
+1 1.00 0 -64 0 -6 2 polygon
+1 1.00 0 64 0 6 2 polygon
+1 1.00 -32 6 32 6 2 polygon
+1 1.00 0 -80 74 66.00 114.00 xcarc
+1.000 0.000 0.000 scb
+(1) {/Times-Roman cf} 2 9 0 1.00 0 64 pinlabel
+(2) {/Times-Roman cf} 2 13 0 1.00 0 -64 pinlabel
+sce
+mark v2 v1 ( %p1 %p2 ) v3 (spice:C) {/Times-RomanISO cf} ctmk 4 0 1.00 -208
+-160 infolabel
+sce
+(sim:e %p1 %p2) {/Times-Roman cf} 2 4 0 1.00 -208 -208 infolabel
+mark (F) v2 {hS} v1 {/Times-RomanISO cf} ctmk 20 0 1.00 48 0 label
+sce
+mark v3 (pcb:C) {/Times-Roman cf} ctmk 20 0 1.00 -208 -256 infolabel
+endgate
+} def
+
+%%Page: 1 1
+%%PageOrientation: Portrait
+/pgsave save def bop
+% 529 953 offsets
+1.0000 inchscale
+2.6000 setlinewidth
+
+1.00 0 497 1065 Transformer
+1 1.00 449 1113 449 1193 401 1193 3 polygon
+1 1.00 449 1001 449 937 401 937 3 polygon
+1.00 -1 401 1193 circle
+1.00 -1 401 937 circle
+1.000 0.000 0.000 scb
+(+) {/Symbol cf} (V) {/Helvetica cf} 4 23 0 1.00 385 1193 pinlabel
+(-) {/Symbol cf} (V) {/Helvetica cf} 4 23 0 1.00 385 937 pinlabel
+sce
+1.00 0 785 1017 rectifier
+1 1.00 529 1113 529 1193 769 1193 769 1161 4 polygon
+1 1.00 529 1001 529 937 769 937 769 969 4 polygon
+1.00 0 769 969 dot
+1.00 0 769 1161 dot
+1 1.00 673 1065 641 1065 641 953 3 polygon
+1 1.00 641 921 641 873 1201 873 3 polygon
+1 1.00 865 1065 1201 1065 2 polygon
+1 1.00 961 1065 961 1033 2 polygon
+1 1.00 1041 1065 1041 1033 2 polygon
+1 1.00 961 905 961 873 2 polygon
+1 1.00 1041 905 1041 873 2 polygon
+1.00 0 1041 873 dot
+1.00 0 961 873 dot
+1.00 0 961 1065 dot
+1.00 0 1041 1065 dot
+1.00 0 865 1065 dot
+1.00 0 673 1065 dot
+1.00 -1 641 937 jumper
+1.00 0 641 873 gnd
+1.00 0 641 873 dot
+1.00 0 1201 873 circle
+1.00 0 1201 1065 circle
+1.000 0.000 0.000 scb
+(Vout) {0 -80 Kn} {/Helvetica cf} 3 28 0 1.00 1217 1065 pinlabel
+sce
+(+) {/Symbol cf} 2 20 0 1.00 1249 1065 label
+(-) {/Symbol cf} 2 20 0 1.00 1249 873 label
+(Bridge Rectifier) {/Helvetica cf} 2 24 0 1.00 369 1273 label
+1.00 -1 961 969 [(1.0) (\265) ] Capacitor
+1.00 0 1041 969 [(10) (\265) ] Polarized
+(1N914) {hS} (\327) {hS} (4) {/HelveticaISO cf} 6 24 0 1.00 849 1145 label
+pgsave restore showpage
+
+%%Trailer
+XCIRCsave restore
+%%EOF
diff --git a/tutorial/psfiles/buses.ps b/tutorial/psfiles/buses.ps
new file mode 100644
index 0000000..76b21a7
--- /dev/null
+++ b/tutorial/psfiles/buses.ps
@@ -0,0 +1,245 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Title: buses
+%%Creator: Xcircuit v2.3
+%%CreationDate: Mon Nov 5 11:36:02 2001
+%%Pages: 1
+%%BoundingBox: 68 68 712 496
+%%DocumentNeededResources: font Helvetica font Helvetica-Oblique
+%%EndComments
+%%BeginProlog
+%
+% PostScript prolog for output from xcircuit
+% Version: 2.3
+%
+% Electrical circuit (and otherwise general) drawing program
+%
+% Written by Tim Edwards 8/5/93--5/16/01 (tim@bach.ece.jhu.edu)
+% The Johns Hopkins University
+%
+%%BeginResource: procset XCIRCproc 2.3 2
+% supporting definitions --- these are the primary xcircuit types.
+
+/XCIRCsave save def
+/topmat matrix currentmatrix def
+
+/fontslant { /slant exch def [1 0 slant 1 0 0]
+ exch findfont exch makefont dup length dict /ndict exch def
+ { 1 index /FID ne { ndict 3 1 roll put } { pop pop } ifelse } forall
+ ndict definefont pop} def
+/ul { dup type /stringtype eq showflag 1 eq and { gsave
+ currentpoint topmat setmatrix 0 0 moveto 2 index stringwidth pop (_)
+ false charpath flattenpath pathbbox grestore exch pop 1 index
+ sub setlinewidth exch pop currentpoint 3 -1 roll add moveto 0
+ rlineto stroke moveto } if } def
+/ol { dup type /stringtype eq showflag 1 eq and { gsave gsave
+ currentpoint topmat setmatrix 2 index stringwidth pop 3 index
+ true charpath flattenpath pathbbox grestore exch pop
+ exch pop topmat setmatrix (_) true charpath pathbbox grestore
+ exch pop 1 index sub setlinewidth exch pop currentpoint
+ exch 4 1 roll exch sub add moveto pop 0 rlineto stroke
+ moveto } if } def
+/stW { gsave currentpoint newpath moveto true charpath flattenpath
+ pathbbox pop exch pop sub grestore } def
+/Ts {mark Tabs aload pop counttomark 1 add array astore /Tabs exch def Tabs
+ 0 currentpoint pop put} def
+/Tbn {mark Tabs aload pop counttomark dup 2 add 1 roll cleartomark 1 sub} def
+/Tb { 0 1 Tbn {Tabs exch get dup currentpoint pop lt
+ {currentpoint exch pop moveto exit} {pop} ifelse } for } def
+/Tf { Tbn -1 0 {Tabs exch get dup currentpoint pop gt
+ {currentpoint exch pop moveto exit} {pop} ifelse } for } def
+/qS { (aa) stW (a a) stW sub 4 div 0 Kn } def
+/hS { qS qS } def
+/pspc 0 def
+/cf0 { scalefont setfont } bind def
+/Kn { dup kY add /kY exch def rmoveto } bind def
+/ss { /fscale fscale 0.67 mul def currentfont 0.67 cf0 0 fscale0 fscale mul
+ 0.33 mul neg Kn} def
+/Ss { /fscale fscale 0.67 mul def currentfont 0.67 cf0 0 fscale0 fscale mul
+ 0.67 mul Kn } def
+/ns { 0 kY neg Kn /kY 0 def /fscale 1.0 def xfont0 1.0 cf0 } def
+/CR { ns 0 /Bline Bline fscale0 neg add def Bline moveto } def
+/cf { dup type /realtype ne {1.0} if exch findfont exch kY 0 eq
+ { 40 mul dup /fscale0 exch def cf0 /xfont0 currentfont def}
+ {fscale0 mul fscale mul cf0} ifelse } def
+/ctmk { counttomark dup 2 add -1 roll pop } bind def
+/label { gsave translate 0 0 moveto dup scale /rotval exch def /just exch def
+ just 16 and 0 gt {0 1 dtransform gsave pagemat setmatrix idtransform
+ exch grestore 1 0 dtransform gsave pagemat setmatrix idtransform
+ exch grestore dup 0 eq {pop mul 0 gt} {3 1 roll pop pop 0 lt} ifelse
+ {-1 /just just dup 3 and 1 ne {3 xor} if def} {1} ifelse exch 0 lt
+ {-1 /just just dup 12 and 4 ne {12 xor} if def} {1} ifelse scale }
+ if /showflag 0 def /fspc pspc def /Bline 0 def /Tabs 0 array def
+ /fscale 1.0 def /kY 0 def
+ gsave dup 1 add copy 0 exch {exch dup type /stringtype eq {true
+ charpath flattenpath} {exec} ifelse } repeat pop pathbbox grestore
+ 3 -1 roll pop 3 1 roll just 1 and 0 gt {just 2 and 0 gt {exch pop
+ neg fspc sub} {exch sub 0.5 mul neg} ifelse} {pop neg fspc add}
+ ifelse exch Bline exch just 4 and 0 gt {just 8 and 0 gt {exch pop
+ neg fspc sub} {add 0.5 mul neg} ifelse} {pop neg fspc add} ifelse
+ /showflag 1 def rotval rotate Kn currentpoint translate
+ /Bline 0 def /Tabs 0 array def /fscale 1.0 def /kY 0 def
+ {dup type /stringtype eq {show}{exec} ifelse} repeat grestore } def
+/pinlabel { 4 index 32 and 0 ne hlevel 0 eq or { /pspc 20 def label
+ /pspc 0 def } { pop pop pop pop pop {pop} repeat } ifelse } def
+/pinglobal { pinlabel } def
+/infolabel { pinlabel } def
+
+/scb { setrgbcolor } bind def /sce { defColor aload pop scb } bind def
+/cRedef {/defColor currentcolor 3 array astore def} def
+/begingate { /hlevel hlevel 1 add def /defColor currentcolor sce 3 array
+ astore def gsave sce translate 0 0 moveto dup 0 lt
+ {neg 1 sub -1 1 scale} if rotate dup scale } bind def
+/makeparm {3 string cvs dup length 1 add string /tstr exch def tstr exch
+ 1 exch putinterval tstr 0 (v) putinterval tstr cvn} bind def
+/beginparm { -1 1 {makeparm exch def} for
+ dup type /arraytype eq { aload length -1 1 {makeparm exch def}
+ for } if begingate } bind def
+/endgate { /hlevel hlevel 1 sub def grestore defColor aload pop cRedef
+ scb} bind def
+
+/hlevel 0 def
+/tmpa [1 0 0 1 0 0] def
+/gar {8 8 true tmpa {<c0 c0 00 00 0c 0c 00 00>} imagemask} bind
+{8 8 true tmpa {<30 70 60 02 03 07 06 20>} imagemask} bind
+{8 8 true tmpa {<0c 1e 1e 0c c0 e1 e1 c0>} imagemask} bind
+{8 8 true tmpa {<0f 0f 0f 0f f0 f0 f0 f0>} imagemask} bind
+{8 8 true tmpa {<3f f3 e1 e1 f3 3f 1e 1e>} imagemask} bind
+{8 8 true tmpa {<df cf 8f 9f fd fc f8 f9>} imagemask} bind
+{8 8 true tmpa {<ff 3f 3f ff ff f3 f3 ff>} imagemask} bind 7 array astore def
+/ppaint { gsave clip tmpa dup setmatrix pathbbox neg exch neg 4 2 roll
+ neg 4 -1 roll 2 copy gt {exch} if 8 div ceiling 8 mul 4 2 roll neg 2 copy
+ gt {exch} if 8 div ceiling 8 mul 3 -1 roll -8 5 -1 roll
+ { 3 index exch 5 exch put dup -8 3 index { 3 index
+ exch 4 exch put 3 index exec } for } for pop pop pop pop grestore } bind def
+/setstyles {
+ currentlinewidth mul setlinewidth /style exch def
+ style 1 and 0 gt not {closepath} if
+ style 2 and 0 gt {currentlinewidth 4 mul dup 2 array astore 0 setdash} if
+ style 4 and 0 gt {0.5 currentlinewidth 4 mul 2 array astore 0 setdash} if
+ style dup 256 ge exch 480 lt and { gsave 1 setgray eofill grestore } if
+ style 16 and 0 gt { gsave style 224 and -5 bitshift dup 7 lt
+ {gar exch get ppaint} { pop eofill } ifelse grestore } if
+ style 8 and 0 gt style 512 eq or { newpath } { stroke } ifelse grestore } def
+
+/polygon { gsave /num exch def moveto num 1 sub {lineto} repeat setstyles } def
+/xcarc { gsave newpath arc setstyles } def
+/elb { matrix currentmatrix 7 -1 roll 7 -1 roll translate 5 1 roll 4 -1 roll
+ 3 index div 1 scale } def
+/ele { 0 4 1 roll 0 4 1 roll } bind def
+/ellipse { gsave elb newpath ele arc setmatrix setstyles } def
+/pellip { elb ele arc setmatrix } def
+/nellip { elb ele arcn setmatrix } def
+/spline { gsave moveto curveto setstyles } def
+/polyc { {lineto} repeat } bind def
+/beginpath { gsave moveto } bind def
+/endpath { setstyles } bind def
+/bop { 1 setlinecap 0 setlinejoin 6 setmiterlimit 0 0 0 scb cRedef } def
+/insertion {/PSobj save def /showpage {} def bop translate} def
+/end_insert {PSobj restore} def
+/setpagemat {/pagemat matrix currentmatrix def} def
+/inchscale {setpagemat 0.375 mul dup scale} def
+/cmscale {setpagemat 0.35433071 mul dup scale} def
+
+%%EndResource
+%%EndProlog
+
+% XCircuit output starts here.
+
+/dbus1 {
+% -608 0 1216 42 bbox
+begingate
+1.000 0.000 0.000 scb
+(d[3]) {/Helvetica cf} 2 23 0 1.00 -608 -64 pinlabel
+(d[2]) {/Helvetica cf} 2 23 0 1.00 -608 -32 pinlabel
+(d[1]) {/Helvetica cf} 2 23 0 1.00 -608 0 pinlabel
+(d[0]) {/Helvetica cf} 2 23 0 1.00 -608 32 pinlabel
+(d[3]) {/Helvetica cf} 2 20 0 1.00 608 -64 pinlabel
+(d[2]) {/Helvetica cf} 2 20 0 1.00 608 -32 pinlabel
+(d[1]) {/Helvetica cf} 2 20 0 1.00 608 0 pinlabel
+(d[0]) {/Helvetica cf} 2 20 0 1.00 608 32 pinlabel
+sce
+(data bus) {/Helvetica cf} 2 17 0 1.00 -64 16 label
+1 1.00 -608 0 608 0 2 polygon
+endgate
+} def
+
+/chip1 {
+% -96 -96 192 192 bbox
+(?) 1 beginparm
+0 1.00 -96 -96 -96 96 96 96 96 -96 4 polygon
+( data ) {/Helvetica cf} 2 23 0 1.00 96 0 label
+1.000 0.000 0.000 scb
+(p0) {/Helvetica cf} 2 20 0 1.00 96 48 pinlabel
+(p1) {/Helvetica cf} 2 20 0 1.00 96 16 pinlabel
+(p2) {/Helvetica cf} 2 20 0 1.00 96 -16 pinlabel
+(p3) {/Helvetica cf} 2 20 0 1.00 96 -48 pinlabel
+sce
+mark v1 (Chip ) {/Helvetica cf} ctmk 21 0 1.00 0 64 label
+endgate
+} def
+
+/arrowhead {
+% -12 -32 24 36 bbox
+% trivial
+begingate
+8 -28 beginpath
+3 -18 3 -15 0 0 curveto
+-3 -15 -3 -18 -8 -28 curveto
+-2 -26 2 -26 8 -28 curveto
+249 1.00 endpath
+endgate
+} def
+
+/arrow {
+% -12 -40 24 80 bbox
+% trivial
+begingate
+1 0.80 0 -40 0 20 2 polygon
+1.00 0 0 40 arrowhead
+endgate
+} def
+
+%%Page: 1 1
+%%PageOrientation: Portrait
+/pgsave save def bop
+% 1152 692 offsets
+1.0000 inchscale
+2.6000 setlinewidth
+
+1 1.00 288 756 288 884 672 884 672 756 4 polygon
+1 1.00 352 1012 352 884 608 884 608 1012 4 polygon
+1 1.00 432 1012 432 884 752 884 752 756 4 polygon
+1 1.00 224 1012 224 884 864 884 864 756 4 polygon
+1 2.00 224 884 864 884 2 polygon
+1 1.00 1312 1108 1312 980 1728 980 1728 596 1888 596 5 polygon
+1 1.00 1408 1108 1408 980 1728 980 1728 692 1888 692 5 polygon
+1 1.00 1584 964 1600 996 2 polygon
+(2) {/Helvetica cf} 2 17 0 1.00 1584 996 label
+1.000 0.000 0.000 scb
+(b\(1\)) {/Helvetica cf} 2 17 0 1.00 1312 1108 pinlabel
+(b\(2\)) {/Helvetica cf} 2 17 0 1.00 1408 1108 pinlabel
+(a[0]) {/Helvetica cf} 2 17 0 1.00 224 1012 pinlabel
+(a[1]) {/Helvetica cf} 2 17 0 1.00 352 1012 pinlabel
+(a[2]) {/Helvetica cf} 2 17 0 1.00 432 1012 pinlabel
+(a[3]) {/Helvetica cf} 2 29 0 1.00 288 756 pinlabel
+sce
+1.00 0 1024 340 dbus1
+1.00 0 320 324 [(1) ] chip1
+1.00 -1 1728 324 [(2) ] chip1
+(Three styles of buses in xcircuit) {ul} {/Helvetica cf} 3 21 0 1.00 992 1300
+label
+(1\) \252standard\272 method) {/Helvetica cf} 2 16 0 1.00 192 1172 label
+(" to see actual pins.) {/Helvetica cf} (Options->Show Pin Positions)
+{/Helvetica-Oblique cf} (2\) \252sneaky\272 method. Use ") {/Helvetica cf} 6
+16 0 1.00 224 500 label
+1.00 120 448 388 arrow
+(real pin position \(normally not seen\)) {/Helvetica cf} 2 16 0 0.80 496 420
+label
+1.00 60 992 308 arrow
+(named the same.) {CR} (Pins on either end are) {CR} (The bus is a subcircuit.)
+{/Helvetica cf} 6 28 0 0.80 1040 276 label
+pgsave restore showpage
+
+%%Trailer
+XCIRCsave restore
+%%EOF
diff --git a/tutorial/psfiles/dff.ps b/tutorial/psfiles/dff.ps
new file mode 100644
index 0000000..a15ffed
--- /dev/null
+++ b/tutorial/psfiles/dff.ps
@@ -0,0 +1,228 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Title: dff
+%%Creator: Xcircuit v2.5
+%%CreationDate: Tue Dec 18 16:50:59 2001
+%%Pages: 1
+%%BoundingBox: 68 68 371 229
+%%DocumentNeededResources: font Helvetica font Times-Roman
+%%EndComments
+%%BeginProlog
+%
+% PostScript prolog for output from xcircuit
+% Version: 2.4
+%
+% Electrical circuit (and otherwise general) drawing program
+%
+% Written by Tim Edwards 8/5/93--5/16/01 (tim@bach.ece.jhu.edu)
+% The Johns Hopkins University
+%
+%%BeginResource: procset XCIRCproc 2.4 1
+% supporting definitions --- these are the primary xcircuit types.
+
+/XCIRCsave save def
+/topmat matrix currentmatrix def
+
+/fontslant { /slant exch def [1 0 slant 1 0 0]
+ exch findfont exch makefont dup length dict /ndict exch def
+ { 1 index /FID ne { ndict 3 1 roll put } { pop pop } ifelse } forall
+ ndict definefont pop} def
+/ul { dup type /stringtype eq showflag 1 eq and { gsave
+ currentpoint topmat setmatrix 0 0 moveto 2 index stringwidth pop (_)
+ false charpath flattenpath pathbbox grestore exch pop 1 index
+ sub setlinewidth exch pop currentpoint 3 -1 roll add moveto 0
+ rlineto stroke moveto } if } def
+/ol { dup type /stringtype eq showflag 1 eq and { gsave gsave
+ currentpoint topmat setmatrix 2 index stringwidth pop 3 index
+ true charpath flattenpath pathbbox grestore exch pop
+ exch pop topmat setmatrix (_) true charpath pathbbox grestore
+ exch pop 1 index sub setlinewidth exch pop currentpoint
+ exch 4 1 roll exch sub add moveto pop 0 rlineto stroke
+ moveto } if } def
+/stW { gsave currentpoint newpath moveto true charpath flattenpath
+ pathbbox pop exch pop sub grestore } def
+/Ts {mark Tabs aload pop counttomark 1 add array astore /Tabs exch def Tabs
+ 0 currentpoint pop put} def
+/Tbn {mark Tabs aload pop counttomark dup 2 add 1 roll cleartomark 1 sub} def
+/Tb { 0 1 Tbn {Tabs exch get dup currentpoint pop lt
+ {currentpoint exch pop moveto exit} {pop} ifelse } for } def
+/Tf { Tbn -1 0 {Tabs exch get dup currentpoint pop gt
+ {currentpoint exch pop moveto exit} {pop} ifelse } for } def
+/qS { (aa) stW (a a) stW sub 4 div 0 Kn } def
+/hS { qS qS } def
+/pspc 0 def
+/cf0 { scalefont setfont } bind def
+/Kn { dup kY add /kY exch def rmoveto } bind def
+/ss { /fscale fscale 0.67 mul def currentfont 0.67 cf0 0 fscale0 fscale mul
+ 0.33 mul neg Kn} def
+/Ss { /fscale fscale 0.67 mul def currentfont 0.67 cf0 0 fscale0 fscale mul
+ 0.67 mul Kn } def
+/ns { 0 kY neg Kn /kY 0 def /fscale 1.0 def xfont0 1.0 cf0 } def
+/CR { ns 0 /Bline Bline fscale0 neg add def Bline moveto } def
+/cf { dup type /realtype ne {1.0} if exch findfont exch kY 0 eq
+ { 40 mul dup /fscale0 exch def cf0 /xfont0 currentfont def}
+ {fscale0 mul fscale mul cf0} ifelse } def
+/ctmk { counttomark dup 2 add -1 roll pop } bind def
+/label { gsave translate 0 0 moveto dup scale neg /rotval exch def
+ /just exch def just 16 and 0 gt {gsave rotval rotate 0 1 dtransform
+ gsave pagemat setmatrix idtransform exch grestore 1 0 dtransform
+ gsave pagemat setmatrix idtransform exch grestore dup abs 1e-9 lt
+ {pop mul 0 gt} {3 1 roll pop pop 0 lt} ifelse grestore {-1 /rotval
+ rotval neg def /just just dup 3 and 1 ne {3 xor} if def} {1} ifelse
+ exch -1e-9 lt {-1 /rotval rotval neg def /just just dup 12 and
+ 4 ne {12 xor} if def} {1} ifelse scale } if /showflag 0 def
+ /fspc pspc def /Bline 0 def /Tabs 0 array def /fscale 1.0 def
+ /kY 0 def gsave dup 1 add copy 0 exch 1 0 dtransform exch atan rotate
+ {exch dup type /stringtype eq {true charpath flattenpath} {exec}
+ ifelse } repeat pop pathbbox grestore 3 -1 roll pop 3 1 roll just
+ 1 and 0 gt {just 2 and 0 gt {exch pop neg fspc sub} {exch sub 0.5
+ mul neg} ifelse} {pop neg fspc add} ifelse exch Bline exch just 4
+ and 0 gt {just 8 and 0 gt {exch pop neg fspc sub} {add 0.5 mul neg}
+ ifelse} {pop neg fspc add} ifelse rotval rotate Kn currentpoint
+ translate /showflag 1 def /Bline 0 def /Tabs 0 array def /fscale
+ 1.0 def /kY 0 def {dup type /stringtype eq {show}{exec} ifelse}
+ repeat grestore } def
+/pinlabel { 4 index 32 and 0 ne hlevel 0 eq or { /pspc 20 def label
+ /pspc 0 def } { pop pop pop pop pop {pop} repeat } ifelse } def
+/pinglobal { pinlabel } def
+/infolabel { pinlabel } def
+
+/scb { setrgbcolor } bind def /sce { defColor aload pop scb } bind def
+/cRedef {/defColor currentcolor 3 array astore def} def
+/begingate { /hlevel hlevel 1 add def /defColor currentcolor sce 3 array
+ astore def gsave sce translate 0 0 moveto neg rotate dup abs scale
+ } bind def
+/makeparm {3 string cvs dup length 1 add string /tstr exch def tstr exch
+ 1 exch putinterval tstr 0 (v) putinterval tstr cvn} bind def
+/beginparm { -1 1 {makeparm exch def} for
+ dup type /arraytype eq { aload length -1 1 {makeparm exch def}
+ for } if begingate } bind def
+/endgate { /hlevel hlevel 1 sub def grestore defColor aload pop cRedef
+ scb} bind def
+
+/hlevel 0 def
+/tmpa [1 0 0 1 0 0] def
+/gar {8 8 true tmpa {<c0 c0 00 00 0c 0c 00 00>} imagemask} bind
+{8 8 true tmpa {<30 70 60 02 03 07 06 20>} imagemask} bind
+{8 8 true tmpa {<0c 1e 1e 0c c0 e1 e1 c0>} imagemask} bind
+{8 8 true tmpa {<0f 0f 0f 0f f0 f0 f0 f0>} imagemask} bind
+{8 8 true tmpa {<3f f3 e1 e1 f3 3f 1e 1e>} imagemask} bind
+{8 8 true tmpa {<df cf 8f 9f fd fc f8 f9>} imagemask} bind
+{8 8 true tmpa {<ff 3f 3f ff ff f3 f3 ff>} imagemask} bind 7 array astore def
+/ppaint { gsave clip tmpa dup setmatrix pathbbox neg exch neg 4 2 roll
+ neg 4 -1 roll 2 copy gt {exch} if 8 div ceiling 8 mul 4 2 roll neg 2 copy
+ gt {exch} if 8 div ceiling 8 mul 3 -1 roll -8 5 -1 roll
+ { 3 index exch 5 exch put dup -8 3 index { 3 index
+ exch 4 exch put 3 index exec } for } for pop pop pop pop grestore } bind def
+/setstyles {
+ currentlinewidth mul setlinewidth /style exch def
+ style 1 and 0 gt not {closepath} if
+ style 2 and 0 gt {currentlinewidth 4 mul dup 2 array astore 0 setdash} if
+ style 4 and 0 gt {0.5 currentlinewidth 4 mul 2 array astore 0 setdash} if
+ style dup 256 ge exch 480 lt and { gsave 1 setgray eofill grestore } if
+ style 16 and 0 gt { gsave style 224 and -5 bitshift dup 7 lt
+ {gar exch get ppaint} { pop eofill } ifelse grestore } if
+ style 8 and 0 gt style 512 eq or { newpath } { stroke } ifelse grestore } def
+
+/polygon { gsave /num exch def moveto num 1 sub {lineto} repeat setstyles } def
+/xcarc { gsave newpath arc setstyles } def
+/elb { matrix currentmatrix 7 -1 roll 7 -1 roll translate 5 1 roll 4 -1 roll
+ 3 index div 1 scale } def
+/ele { 0 4 1 roll 0 4 1 roll } bind def
+/ellipse { gsave elb newpath ele arc setmatrix setstyles } def
+/pellip { elb ele arc setmatrix } def
+/nellip { elb ele arcn setmatrix } def
+/spline { gsave moveto curveto setstyles } def
+/polyc { {lineto} repeat } bind def
+/beginpath { gsave moveto } bind def
+/endpath { setstyles } bind def
+/bop { 1 setlinecap 0 setlinejoin 6 setmiterlimit 0 0 0 scb cRedef } def
+/insertion {/PSobj save def /showpage {} def bop translate} def
+/end_insert {PSobj restore} def
+/setpagemat {/pagemat matrix currentmatrix def} def
+/inchscale {setpagemat 0.375 mul dup scale} def
+/cmscale {setpagemat 0.35433071 mul dup scale} def
+
+%%EndResource
+%%EndProlog
+
+% XCircuit output starts here.
+
+/quadnand {
+% -64 -48 128 96 bbox
+(?) (1) (1) (2) (3) 5 beginparm
+1 1.00 0 -48 -64 -48 -64 48 0 48 4 polygon
+1 1.00 56 0 8 0.00 360.00 xcarc
+1 1.00 0 0 48 -90.00 90.00 xcarc
+1.000 0.000 0.000 scb
+mark v5 {/Times-Roman cf} ctmk 4 0 1.00 64 0 pinlabel
+mark v3 {/Times-Roman cf} ctmk 7 0 1.00 -64 32 pinlabel
+mark v4 {/Times-Roman cf} ctmk 7 0 1.00 -64 -32 pinlabel
+sce
+mark v2 (-) v1 (pcb:U) {/Helvetica cf} ctmk 20 0 1.00 -80 -96 infolabel
+mark v2 (7400-) {/Helvetica cf} ctmk 21 0 0.50 -8 0 label
+endgate
+} def
+
+/dot {
+% -10 -10 20 20 bbox
+% trivial
+begingate
+248 1.00 0 0 6 0.00 360.00 xcarc
+1.000 0.000 0.000 scb
+(x) {/Times-Roman cf} 2 29 0 1.00 0 0 pinlabel
+endgate
+} def
+
+/circle {
+% -6 -12 28 24 bbox
+% trivial
+begingate
+1 1.00 16 0 6 0.00 360.00 xcarc
+1 1.00 0 0 10 0 2 polygon
+1.000 0.000 0.000 scb
+(out) {/Times-Roman cf} 2 4 0 1.00 16 0 pinlabel
+(out) {/Times-Roman cf} 2 7 0 1.00 0 0 pinlabel
+endgate
+} def
+
+%%Page: 1 1
+%%PageOrientation: Portrait
+/pgsave save def bop
+% 978 336 offsets
+1.0000 inchscale
+2.6000 setlinewidth
+
+1.00 0 450 240 [(?) (4) (12) (13) (11) ] quadnand
+1.00 0 450 432 [(?) (3) (9) (10) (8) ] quadnand
+1.00 0 770 432 [(?) (2) (4) (5) (6) ] quadnand
+1.00 0 770 240 [(?) (1) (1) (2) (3) ] quadnand
+1 1.00 834 240 882 240 882 288 674 352 674 400 706 400 6 polygon
+1 1.00 834 432 882 432 882 384 674 320 674 272 706 272 6 polygon
+1 1.00 386 464 306 464 2 polygon
+1 1.00 386 208 306 208 2 polygon
+1.00 0 882 432 dot
+1.00 0 882 240 dot
+1.00 0 914 432 circle
+1.00 0 914 240 circle
+-1.00 0 306 464 circle
+-1.00 0 306 208 circle
+1 1.00 882 432 914 432 2 polygon
+1 1.00 882 240 914 240 2 polygon
+1 1.00 706 464 594 464 562 432 514 432 4 polygon
+1 1.00 706 208 594 208 562 240 514 240 4 polygon
+1 1.00 546 432 546 336 354 336 354 272 386 272 5 polygon
+1 1.00 386 400 322 400 322 208 3 polygon
+1.00 0 322 208 dot
+1.00 0 546 432 dot
+1.000 0.000 0.000 scb
+(Q) {/Helvetica cf} 2 20 0 1.00 930 432 pinlabel
+(Q) {ol} {/Helvetica cf} 3 20 0 1.00 930 240 pinlabel
+(D) {/Helvetica cf} 2 23 0 1.00 290 464 pinlabel
+(CLK) {/Helvetica cf} 2 23 0 1.00 290 208 pinlabel
+sce
+(D-FF implementation in 7400 IC) {/Helvetica cf} 2 17 0 1.00 594 576 label
+pgsave restore showpage
+
+%%Trailer
+XCIRCsave restore
+%%EOF
diff --git a/tutorial/psfiles/filter.ps b/tutorial/psfiles/filter.ps
new file mode 100644
index 0000000..deb06e5
--- /dev/null
+++ b/tutorial/psfiles/filter.ps
@@ -0,0 +1,260 @@
+%%BeginProlog
+%
+% PostScript prolog for output from xcircuit
+% Version: 2.0
+%
+% Electrical circuit (and otherwise general) drawing program
+%
+% Written by Tim Edwards 8/5/93--2/25/99 (tim@bach.ece.jhu.edu)
+% The Johns Hopkins University
+%
+%%BeginResource: procset XCIRCproc 2.0 2
+% supporting definitions --- these are the primary xcircuit types.
+
+/XCIRCsave save def
+/topmat matrix currentmatrix def
+
+/fontslant { /slant exch def [1 0 slant 1 0 0]
+ exch findfont exch makefont dup length dict /ndict exch def
+ { 1 index /FID ne { ndict 3 1 roll put } { pop pop } ifelse } forall
+ ndict definefont pop} def
+/cf { dup type /realtype eq {40 mul /fscale exch def} if dup /xfont exch def
+ findfont fscale scalefont setfont } def
+/Ss { gsave 0.67 dup scale gsave mty neg rmoveto
+ glevel 1 add /glevel exch def } def
+/ss { gsave 0.67 dup scale gsave mty 0.5 mul rmoveto
+ glevel 1 add /glevel exch def } def
+/ns { currentpoint transform % preserve x position!
+ glevel {grestore} repeat /glevel 0 def
+ itransform pop currentpoint pop sub 0 rmoveto } def
+/ul { showflag 1 eq { gsave
+ currentpoint topmat setmatrix 0 0 moveto 2 index stringwidth pop (_)
+ false charpath flattenpath pathbbox grestore exch pop 1 index
+ sub setlinewidth exch pop currentpoint 3 -1 roll add moveto 0
+ rlineto stroke moveto } if } def
+/ol { showflag 1 eq { gsave gsave
+ currentpoint topmat setmatrix 2 index stringwidth pop 3 index
+ true charpath flattenpath pathbbox grestore exch pop
+ exch pop topmat setmatrix (_) true charpath pathbbox grestore
+ exch pop 1 index sub setlinewidth exch pop currentpoint
+ exch 4 1 roll exch sub add moveto pop 0 rlineto stroke
+ moveto } if } def
+/stW { gsave true charpath flattenpath pathbbox pop exch pop sub
+ grestore } def
+/bs { stW 0 rmoveto } def
+/pspc 0 def
+/qS { (aa) stW (a a) stW sub 4 div 0 rmoveto } def
+/hS { qS qS } def
+/textx { dup 1 add copy 0 exch { exch dup type /stringtype eq
+ {stringwidth pop add}{exec} ifelse } repeat neg ns } def
+/mty { 0 topmat setmatrix (A) true charpath flattenpath pathbbox exch
+ pop exch sub exch pop neg grestore } def
+/texty { gsave 2 copy pop exec mty } def
+/tcenter { textx grestore 0.5 mul 0 rmoveto } def
+/tright { textx grestore fspc sub 0 rmoveto } def
+/tmiddle { texty 0.5 mul rmoveto } def
+/ttop { texty fspc sub rmoveto } def
+/tshow {{ dup type /stringtype eq {show}{exec} ifelse} repeat ns } def
+
+/label { gsave translate 0 0 moveto rotate /just exch def just 16 and 0 gt
+ {0 1 dtransform gsave pagemat setmatrix idtransform exch grestore
+ 1 0 dtransform gsave pagemat setmatrix idtransform exch grestore
+ dup 0 eq {pop mul 0 gt} {3 1 roll pop pop 0 lt} ifelse
+ {-1 /just just dup 3 and 1 ne {3 xor} if def} {1} ifelse exch 0 lt
+ {-1 /just just dup 12 and 4 ne {12 xor} if def} {1} ifelse scale } if
+ /glevel 0 def /showflag 0 def /fspc pspc def
+ just 1 and 0 gt {gsave just 2 and 0 gt {tright}{tcenter} ifelse}
+ {fspc 0 rmoveto} ifelse
+ just 4 and 0 gt {just 8 and 0 gt {ttop}{tmiddle} ifelse}
+ {0 fspc rmoveto} ifelse
+ /showflag 1 def tshow grestore } def
+/pinlabel { hlevel 0 eq { /pspc 20 def label /pspc 0 def }
+ { pop pop pop pop {pop} repeat } ifelse } def
+/pinglobal { pinlabel } def
+/infolabel { pinlabel } def
+
+/begingate { /hlevel hlevel 1 add def gsave translate 0 0 moveto dup 0 lt
+ {neg 1 sub -1 1 scale} if rotate dup scale } bind def
+/makeparm {3 string cvs dup length 1 add string /tstr exch def tstr exch
+ 1 exch putinterval tstr 0 (v) putinterval tstr cvn} bind def
+/beginparm { -1 1 {makeparm exch def} for
+ dup type /arraytype eq { aload length -1 1 {makeparm exch def}
+ for } if begingate } bind def
+/endgate { /hlevel hlevel 1 sub def grestore } bind def
+
+/hlevel 0 def
+/tmpa [1 0 0 1 0 0] def
+/gar {8 8 true tmpa {<c0 c0 00 00 0c 0c 00 00>} imagemask} bind
+{8 8 true tmpa {<30 70 60 02 03 07 06 20>} imagemask} bind
+{8 8 true tmpa {<0c 1e 1e 0c c0 e1 e1 c0>} imagemask} bind
+{8 8 true tmpa {<0f 0f 0f 0f f0 f0 f0 f0>} imagemask} bind
+{8 8 true tmpa {<3f f3 e1 e1 f3 3f 1e 1e>} imagemask} bind
+{8 8 true tmpa {<df cf 8f 9f fd fc f8 f9>} imagemask} bind
+{8 8 true tmpa {<ff 3f 3f ff ff f3 f3 ff>} imagemask} bind 7 array astore def
+/ppaint { gsave clip tmpa dup setmatrix pathbbox neg exch neg 4 2 roll
+ neg 4 -1 roll 2 copy gt {exch} if 8 div ceiling 8 mul 4 2 roll neg 2 copy
+ gt {exch} if 8 div ceiling 8 mul 3 -1 roll -8 5 -1 roll
+ { 3 index exch 5 exch put dup -8 3 index { 3 index
+ exch 4 exch put 3 index exec } for } for pop pop pop pop grestore } bind def
+/setstyles {
+ currentlinewidth mul setlinewidth /style exch def
+ style 1 and 0 gt not {closepath} if
+ style 2 and 0 gt {currentlinewidth 4 mul dup 2 array astore 0 setdash} if
+ style 4 and 0 gt {0.5 currentlinewidth 4 mul 2 array astore 0 setdash} if
+ style dup 256 ge exch 480 lt and { gsave 1 setgray eofill grestore } if
+ style 16 and 0 gt { gsave style 224 and -5 bitshift dup 7 lt
+ {gar exch get ppaint} { pop eofill } ifelse grestore } if
+ style 8 and 0 gt { newpath } { stroke } ifelse grestore } def
+/scb { gsave setrgbcolor } bind def /sce { grestore } bind def
+
+/polygon { gsave /num exch def moveto num 1 sub {lineto} repeat setstyles } def
+/xcarc { gsave newpath arc setstyles } def
+/elb { matrix currentmatrix 7 -1 roll 7 -1 roll translate 5 1 roll 4 -1 roll
+ 3 index div 1 scale } def
+/ele { 0 4 1 roll 0 4 1 roll } bind def
+/ellipse { gsave elb newpath ele arc setmatrix setstyles } def
+/pellip { elb ele arc setmatrix } def
+/nellip { elb ele arcn setmatrix } def
+/spline { gsave moveto curveto setstyles } def
+/polyc { {lineto} repeat } bind def
+/beginpath { gsave moveto } bind def
+/endpath { setstyles } bind def
+/bop { 1 setlinecap 0 setlinejoin 6 setmiterlimit 0 setgray } def
+/setpagemat {/pagemat matrix currentmatrix def} def
+/inchscale {setpagemat 0.375 mul dup scale} def
+/cmscale {setpagemat 0.35433071 mul dup scale} def
+
+%%EndResource
+%%EndProlog
+
+% XCircuit output starts here.
+
+/dot {
+% -10 -10 20 20 bbox
+begingate
+248 1.00 0 0 6 0.00 360.00 xcarc
+endgate
+} def
+
+/circle {
+% -6 -12 28 24 bbox
+begingate
+1 1.00 16 0 6 0.00 360.00 xcarc
+1 1.00 0 0 10 0 2 polygon
+1.000 0.000 0.000 scb
+(out) {/Times-Roman 1.000 cf} 2 4 0 16 0 pinlabel
+(out) {/Times-Roman 1.000 cf} 2 7 0 0 0 pinlabel
+sce
+endgate
+} def
+
+/gnd {
+% -32 -60 64 68 bbox
+begingate
+1 1.00 0 0 0 -32 2 polygon
+1 1.00 -32 -32 32 -32 2 polygon
+1 1.00 -18 -46 18 -46 2 polygon
+1 1.00 -4 -60 4 -60 2 polygon
+1.000 0.000 0.000 scb
+(GND) {/Times-Roman 1.000 cf} 2 1 0 0 0 pinglobal
+sce
+endgate
+} def
+
+/resistor {
+% -14 -64 151 128 bbox
+(1.0) (k) 2 beginparm
+% fundamental
+1 1.00 0 64 0 36 2 polygon
+1 1.00 0 -64 0 -36 2 polygon
+1 1.00 0 -36 14 -30 -14 -18 14 -6 -14 6 14 18 -14 30 0 36 8 polygon
+1.000 0.000 0.000 scb
+(r.1) {/Times-Roman 1.000 cf} 2 9 0 0 64 pinlabel
+(r.2) {/Times-Roman 1.000 cf} 2 13 0 0 -64 pinlabel
+sce
+(spice:R%i %pr.1 %pr.2 %v"1.0"%v"k") {/Times-Roman 1.000 cf} 2 0 0 -208 -160 infolabel
+(sim:r %pr.1 %pr.2) {/Times-Roman 1.000 cf} 2 0 0 -208 -208 infolabel
+(W) {/Symbol 1.000 cf} v2 {hS} v1 {/Helvetica 1.000 cf} 6 20 0 32 0 label
+endgate
+} def
+
+/polarized {
+% -32 -64 177 128 bbox
+(1.0) (p) 2 beginparm
+% fundamental
+1 1.00 0 -64 0 -6 2 polygon
+1 1.00 0 64 0 6 2 polygon
+1 1.00 -32 6 32 6 2 polygon
+1 1.00 0 -80 74 66.00 114.00 xcarc
+1.000 0.000 0.000 scb
+(t) {/Times-Roman 1.000 cf} 2 9 0 0 64 pinlabel
+(b) {/Times-Roman 1.000 cf} 2 13 0 0 -64 pinlabel
+sce
+(spice:C%i %pt %pb %v"1.0"%v"p") {/Times-Roman 1.000 cf} 2 0 0 -208 -160 infolabel
+(sim:e %pt %pb %pb) {/Times-Roman 1.000 cf} 2 0 0 -208 -208 infolabel
+(F) v2 {hS} v1 {/Helvetica 1.000 cf} 5 20 0 48 0 label
+endgate
+} def
+
+/source {
+% -32 -64 64 128 bbox
+% hidden
+begingate
+1 1.00 0 0 32 0.00 360.00 xcarc
+1 1.00 0 32 0 64 2 polygon
+1 1.00 0 -32 0 -64 2 polygon
+endgate
+} def
+
+/acsource {
+% -32 -64 211 128 bbox
+(5) (0) (1) (k) 4 beginparm
+% fundamental
+1.00 0 0 0 source
+1 0.80 0 -48 0 48 -16 0 16 0 spline
+1.000 0.000 0.000 scb
+(s.p) {/Times-Roman 1.000 cf} 2 9 0 0 64 pinlabel
+(s.m) {/Times-Roman 1.000 cf} 2 13 0 0 -64 pinlabel
+sce
+(spice:V%i %ps.m %ps.p SIN\(%v"0" %v"5" %v"1"%v"k"\)) {/Helvetica 1.000 cf} 2 20 0 -336 -160 infolabel
+(offset) {ss} (V) {hS} v2 {/Helvetica 1.000 cf} 6 20 0 48 0 label
+(p-p) {ss} (V) {hS} v1 {/Helvetica 1.000 cf} 6 20 0 48 48 label
+(Hz) v4 {hS} v3 {/Helvetica 1.000 cf} 5 20 0 48 -48 label
+endgate
+} def
+
+%%Page: 1 1
+%%PageOrientation: Portrait
+/pgsave save def bop
+% 912 464 offsets
+1.0000 inchscale
+2.6000 setlinewidth
+
+1 1.00 528 528 528 592 784 592 3 polygon
+1 1.00 528 400 528 336 784 336 3 polygon
+1 1.00 784 464 976 464 2 polygon
+1 1.00 784 336 976 336 2 polygon
+1.00 0 784 336 dot
+1.00 0 784 464 dot
+1.00 0 976 464 circle
+1.00 0 976 336 circle
+1.00 -1 464 336 circle
+1 1.00 464 336 528 336 2 polygon
+1 1.00 528 592 464 592 2 polygon
+1.00 -1 464 592 circle
+1.00 0 640 336 gnd
+1.00 0 640 336 dot
+1.00 0 528 336 dot
+1.00 0 528 592 dot
+1.000 0.000 0.000 scb
+(Vin) {/Helvetica 1.000 cf} 2 23 0 448 592 pinlabel
+(Vout) {/Helvetica 1.000 cf} 2 20 0 992 464 pinlabel
+sce
+1.00 0 784 528 [(10) (k) ] resistor
+1.00 0 784 400 [(1.0) (u) ] polarized
+1.00 0 528 464 [(5) (0) (5) (k) ] acsource
+pgsave restore showpage
+
+%%Trailer
+XCIRCsave restore
+%%EOF
diff --git a/tutorial/psfiles/integrator.ps b/tutorial/psfiles/integrator.ps
new file mode 100644
index 0000000..c290875
--- /dev/null
+++ b/tutorial/psfiles/integrator.ps
@@ -0,0 +1,327 @@
+%%BeginProlog
+%
+% PostScript prolog for output from xcircuit
+% Version: 2.0
+%
+% Electrical circuit (and otherwise general) drawing program
+%
+% Written by Tim Edwards 8/5/93--2/25/99 (tim@bach.ece.jhu.edu)
+% The Johns Hopkins University
+%
+%%BeginResource: procset XCIRCproc 2.0 2
+% supporting definitions --- these are the primary xcircuit types.
+
+/XCIRCsave save def
+/topmat matrix currentmatrix def
+
+/fontslant { /slant exch def [1 0 slant 1 0 0]
+ exch findfont exch makefont dup length dict /ndict exch def
+ { 1 index /FID ne { ndict 3 1 roll put } { pop pop } ifelse } forall
+ ndict definefont pop} def
+/cf { dup type /realtype eq {40 mul /fscale exch def} if dup /xfont exch def
+ findfont fscale scalefont setfont } def
+/Ss { gsave 0.67 dup scale gsave mty neg rmoveto
+ glevel 1 add /glevel exch def } def
+/ss { gsave 0.67 dup scale gsave mty 0.5 mul rmoveto
+ glevel 1 add /glevel exch def } def
+/ns { currentpoint transform % preserve x position!
+ glevel {grestore} repeat /glevel 0 def
+ itransform pop currentpoint pop sub 0 rmoveto } def
+/ul { showflag 1 eq { gsave
+ currentpoint topmat setmatrix 0 0 moveto 2 index stringwidth pop (_)
+ false charpath flattenpath pathbbox grestore exch pop 1 index
+ sub setlinewidth exch pop currentpoint 3 -1 roll add moveto 0
+ rlineto stroke moveto } if } def
+/ol { showflag 1 eq { gsave gsave
+ currentpoint topmat setmatrix 2 index stringwidth pop 3 index
+ true charpath flattenpath pathbbox grestore exch pop
+ exch pop topmat setmatrix (_) true charpath pathbbox grestore
+ exch pop 1 index sub setlinewidth exch pop currentpoint
+ exch 4 1 roll exch sub add moveto pop 0 rlineto stroke
+ moveto } if } def
+/stW { gsave true charpath flattenpath pathbbox pop exch pop sub
+ grestore } def
+/bs { stW 0 rmoveto } def
+/pspc 0 def
+/qS { (aa) stW (a a) stW sub 4 div 0 rmoveto } def
+/hS { qS qS } def
+/textx { dup 1 add copy 0 exch { exch dup type /stringtype eq
+ {stringwidth pop add}{exec} ifelse } repeat neg ns } def
+/mty { 0 topmat setmatrix (A) true charpath flattenpath pathbbox exch
+ pop exch sub exch pop neg grestore } def
+/texty { gsave 2 copy pop exec mty } def
+/tcenter { textx grestore 0.5 mul 0 rmoveto } def
+/tright { textx grestore fspc sub 0 rmoveto } def
+/tmiddle { texty 0.5 mul rmoveto } def
+/ttop { texty fspc sub rmoveto } def
+/tshow {{ dup type /stringtype eq {show}{exec} ifelse} repeat ns } def
+
+/label { gsave translate 0 0 moveto rotate /just exch def just 16 and 0 gt
+ {0 1 dtransform gsave pagemat setmatrix idtransform exch grestore
+ 1 0 dtransform gsave pagemat setmatrix idtransform exch grestore
+ dup 0 eq {pop mul 0 gt} {3 1 roll pop pop 0 lt} ifelse
+ {-1 /just just dup 3 and 1 ne {3 xor} if def} {1} ifelse exch 0 lt
+ {-1 /just just dup 12 and 4 ne {12 xor} if def} {1} ifelse scale } if
+ /glevel 0 def /showflag 0 def /fspc pspc def
+ just 1 and 0 gt {gsave just 2 and 0 gt {tright}{tcenter} ifelse}
+ {fspc 0 rmoveto} ifelse
+ just 4 and 0 gt {just 8 and 0 gt {ttop}{tmiddle} ifelse}
+ {0 fspc rmoveto} ifelse
+ /showflag 1 def tshow grestore } def
+/pinlabel { hlevel 0 eq { /pspc 20 def label /pspc 0 def }
+ { pop pop pop pop {pop} repeat } ifelse } def
+/pinglobal { pinlabel } def
+/infolabel { pinlabel } def
+
+/begingate { /hlevel hlevel 1 add def gsave translate 0 0 moveto dup 0 lt
+ {neg 1 sub -1 1 scale} if rotate dup scale } bind def
+/makeparm {3 string cvs dup length 1 add string /tstr exch def tstr exch
+ 1 exch putinterval tstr 0 (v) putinterval tstr cvn} bind def
+/beginparm { -1 1 {makeparm exch def} for
+ dup type /arraytype eq { aload length -1 1 {makeparm exch def}
+ for } if begingate } bind def
+/endgate { /hlevel hlevel 1 sub def grestore } bind def
+
+/hlevel 0 def
+/tmpa [1 0 0 1 0 0] def
+/gar {8 8 true tmpa {<c0 c0 00 00 0c 0c 00 00>} imagemask} bind
+{8 8 true tmpa {<30 70 60 02 03 07 06 20>} imagemask} bind
+{8 8 true tmpa {<0c 1e 1e 0c c0 e1 e1 c0>} imagemask} bind
+{8 8 true tmpa {<0f 0f 0f 0f f0 f0 f0 f0>} imagemask} bind
+{8 8 true tmpa {<3f f3 e1 e1 f3 3f 1e 1e>} imagemask} bind
+{8 8 true tmpa {<df cf 8f 9f fd fc f8 f9>} imagemask} bind
+{8 8 true tmpa {<ff 3f 3f ff ff f3 f3 ff>} imagemask} bind 7 array astore def
+/ppaint { gsave clip tmpa dup setmatrix pathbbox neg exch neg 4 2 roll
+ neg 4 -1 roll 2 copy gt {exch} if 8 div ceiling 8 mul 4 2 roll neg 2 copy
+ gt {exch} if 8 div ceiling 8 mul 3 -1 roll -8 5 -1 roll
+ { 3 index exch 5 exch put dup -8 3 index { 3 index
+ exch 4 exch put 3 index exec } for } for pop pop pop pop grestore } bind def
+/setstyles {
+ currentlinewidth mul setlinewidth /style exch def
+ style 1 and 0 gt not {closepath} if
+ style 2 and 0 gt {currentlinewidth 4 mul dup 2 array astore 0 setdash} if
+ style 4 and 0 gt {0.5 currentlinewidth 4 mul 2 array astore 0 setdash} if
+ style dup 256 ge exch 480 lt and { gsave 1 setgray eofill grestore } if
+ style 16 and 0 gt { gsave style 224 and -5 bitshift dup 7 lt
+ {gar exch get ppaint} { pop eofill } ifelse grestore } if
+ style 8 and 0 gt { newpath } { stroke } ifelse grestore } def
+/scb { gsave setrgbcolor } bind def /sce { grestore } bind def
+
+/polygon { gsave /num exch def moveto num 1 sub {lineto} repeat setstyles } def
+/xcarc { gsave newpath arc setstyles } def
+/elb { matrix currentmatrix 7 -1 roll 7 -1 roll translate 5 1 roll 4 -1 roll
+ 3 index div 1 scale } def
+/ele { 0 4 1 roll 0 4 1 roll } bind def
+/ellipse { gsave elb newpath ele arc setmatrix setstyles } def
+/pellip { elb ele arc setmatrix } def
+/nellip { elb ele arcn setmatrix } def
+/spline { gsave moveto curveto setstyles } def
+/polyc { {lineto} repeat } bind def
+/beginpath { gsave moveto } bind def
+/endpath { setstyles } bind def
+/bop { 1 setlinecap 0 setlinejoin 6 setmiterlimit 0 setgray } def
+/setpagemat {/pagemat matrix currentmatrix def} def
+/inchscale {setpagemat 0.375 mul dup scale} def
+/cmscale {setpagemat 0.35433071 mul dup scale} def
+
+%%EndResource
+%%EndProlog
+
+% XCircuit output starts here.
+
+/nmos {
+% -64 -64 64 128 bbox
+begingate
+% fundamental
+1 1.00 0 -64 0 -28 -32 -28 -32 28 0 28 0 64 6 polygon
+1 1.00 -44 -28 -44 28 2 polygon
+1 1.00 -44 0 -64 0 2 polygon
+1.000 0.000 0.000 scb
+(G) {/Helvetica 1.000 cf} 2 7 0 -64 0 pinlabel
+(S) {/Helvetica 1.000 cf} 2 13 0 0 -64 pinlabel
+(D) {/Helvetica 1.000 cf} 2 9 0 0 64 pinlabel
+(spice:M%i %pD %pG %pS GND nmos) {/Times-Roman 1.000 cf} 2 4 0 -244 -139 infolabel
+(sim:n %pG %pD %pS) {/Times-Roman 1.000 cf} 2 4 0 -244 -187 infolabel
+sce
+endgate
+} def
+
+/gnd {
+% -32 -60 64 68 bbox
+begingate
+1 1.00 0 0 0 -32 2 polygon
+1 1.00 -32 -32 32 -32 2 polygon
+1 1.00 -18 -46 18 -46 2 polygon
+1 1.00 -4 -60 4 -60 2 polygon
+1.000 0.000 0.000 scb
+(GND) {/Times-Roman 1.000 cf} 2 1 0 0 0 pinglobal
+sce
+endgate
+} def
+
+/pmos {
+% -64 -64 64 128 bbox
+begingate
+% fundamental
+1 1.00 -44 -28 -44 28 2 polygon
+1 1.00 -60 0 -64 0 2 polygon
+1 1.00 0 -64 0 -28 -32 -28 -32 28 0 28 0 64 6 polygon
+1 1.00 -52 0 8 0.00 360.00 xcarc
+1.000 0.000 0.000 scb
+(S) {/Helvetica 1.000 cf} 2 9 0 0 64 pinlabel
+(D) {/Helvetica 1.000 cf} 2 13 0 0 -64 pinlabel
+(G) {/Helvetica 1.000 cf} 2 7 0 -64 0 pinlabel
+(spice:M%i %pD %pG %pS Vdd pmos) {/Times-Roman 1.000 cf} 2 4 0 -196 -139 infolabel
+(sim:p %pG %pD %pS) {/Times-Roman 1.000 cf} 2 4 0 -196 -187 infolabel
+sce
+endgate
+} def
+
+/vdd {
+% -32 0 64 66 bbox
+begingate
+1 1.00 0 0 0 32 2 polygon
+1 1.00 -32 32 32 32 2 polygon
+(Vdd) {/Times-Roman 0.900 cf} 2 17 0 0 38 label
+1.000 0.000 0.000 scb
+(Vdd) {/Times-Roman 1.000 cf} 2 13 0 0 0 pinglobal
+sce
+endgate
+} def
+
+/dot {
+% -10 -10 20 20 bbox
+begingate
+248 1.00 0 0 6 0.00 360.00 xcarc
+endgate
+} def
+
+/circle {
+% -6 -12 28 24 bbox
+begingate
+1 1.00 16 0 6 0.00 360.00 xcarc
+1 1.00 0 0 10 0 2 polygon
+1.000 0.000 0.000 scb
+(out) {/Times-Roman 1.000 cf} 2 4 0 16 0 pinlabel
+(out) {/Times-Roman 1.000 cf} 2 7 0 0 0 pinlabel
+sce
+endgate
+} def
+
+%%Page: wramp 1
+%%PageOrientation: Portrait
+/pgsave save def bop
+% 454 416 offsets
+1.0000 inchscale
+2.6000 setlinewidth
+
+1.00 0 406 480 nmos
+1.00 -1 502 480 nmos
+1 1.00 406 416 502 416 2 polygon
+1.00 0 454 352 nmos
+1.00 0 454 288 gnd
+1.00 0 406 608 pmos
+1.00 -1 502 608 pmos
+1.00 0 406 672 vdd
+1.00 0 502 672 vdd
+1.00 0 742 608 pmos
+1.00 -1 166 608 pmos
+1 1.00 230 608 342 608 2 polygon
+1 1.00 566 608 678 608 2 polygon
+1 1.00 614 608 614 544 502 544 3 polygon
+1 1.00 406 544 294 544 294 608 3 polygon
+1.00 0 166 672 vdd
+1.00 0 742 672 vdd
+1.00 0 742 192 nmos
+1.00 -1 166 192 nmos
+1 1.00 166 256 166 544 2 polygon
+1 1.00 742 544 742 256 2 polygon
+1 1.00 742 448 806 448 2 polygon
+1.00 0 166 128 gnd
+1.00 0 742 128 gnd
+1 1.00 678 192 230 192 2 polygon
+1 1.00 166 256 294 256 294 192 3 polygon
+1.00 0 294 192 dot
+1.00 0 166 256 dot
+1.00 0 454 416 dot
+1.00 0 294 608 dot
+1.00 0 406 544 dot
+1.00 0 502 544 dot
+1.00 0 614 608 dot
+1.00 0 742 448 dot
+1.00 0 566 480 circle
+1.00 -1 342 480 circle
+1.00 -1 390 352 circle
+1.00 0 806 448 circle
+1.000 0.000 0.000 scb
+(in.p) {/Helvetica 1.000 cf} 2 20 0 582 480 pinlabel
+(in.m) {/Helvetica 1.000 cf} 2 23 0 326 480 pinlabel
+(bias) {/Helvetica 1.000 cf} 2 23 0 374 352 pinlabel
+(out) {/Helvetica 1.000 cf} 2 20 0 822 448 pinlabel
+sce
+pgsave restore showpage
+
+/wramp {
+% -80 -80 160 160 bbox
+begingate
+0 1.00 -80 -80 -80 80 48 24 48 -24 4 polygon
+1 1.00 0 -80 0 -45 2 polygon
+1 1.00 48 0 80 0 2 polygon
+(-) {/Symbol 1.000 cf} 2 5 0 -61 50 label
+(+) {/Symbol 1.000 cf} 2 5 0 -61 -46 label
+1.000 0.000 0.000 scb
+(in.m) {/Times-Roman 1.000 cf} 2 7 0 -80 48 pinlabel
+(in.p) {/Times-Roman 1.000 cf} 2 7 0 -80 -48 pinlabel
+(out) {/Times-Roman 1.000 cf} 2 4 0 80 0 pinlabel
+(bias) {/Times-Roman 1.000 cf} 2 13 0 0 -80 pinlabel
+sce
+endgate
+} def
+
+/capacitor {
+% -32 -64 64 128 bbox
+begingate
+% fundamental
+1 1.00 0 -64 0 -6 2 polygon
+1 1.00 0 64 0 6 2 polygon
+1 1.00 -32 6 32 6 2 polygon
+1 1.00 -32 -6 32 -6 2 polygon
+1.000 0.000 0.000 scb
+(c.1) {/Times-Roman 1.000 cf} 2 9 0 0 64 pinlabel
+(c.2) {/Times-Roman 1.000 cf} 2 13 0 0 -64 pinlabel
+(spice:C%i %pc.1 %pc.2 1.0P) {/Times-Roman 1.000 cf} 2 0 0 -208 -160 infolabel
+(sim:c %pc.1 %pc.2) {/Times-Roman 1.000 cf} 2 0 0 -208 -208 infolabel
+sce
+endgate
+} def
+
+%%Page: 2 2
+%%PageOrientation: Portrait
+/pgsave save def bop
+% 294 390 offsets
+1.0000 inchscale
+2.6000 setlinewidth
+
+1.00 0 310 390 wramp
+1 1.00 230 438 198 438 198 518 422 518 422 390 5 polygon
+1 1.00 390 390 454 390 2 polygon
+1.00 0 422 390 dot
+1.00 0 454 390 circle
+1.00 -1 166 342 circle
+1.00 -271 310 310 circle
+1.000 0.000 0.000 scb
+(Bias) {/Helvetica 1.000 cf} 2 29 0 310 294 pinlabel
+sce
+1 1.00 166 342 230 342 2 polygon
+1.000 0.000 0.000 scb
+(Input) {/Helvetica 1.000 cf} 2 23 0 150 342 pinlabel
+(Output) {/Helvetica 1.000 cf} 2 20 0 470 390 pinlabel
+sce
+(Integrator) {/Helvetica 1.000 cf} 2 25 0 294 582 label
+1.00 0 422 326 capacitor
+1.00 0 422 262 gnd
+pgsave restore showpage
+
+%%Trailer
+XCIRCsave restore
+%%EOF
diff --git a/tutorial/psfiles/powersup.ps b/tutorial/psfiles/powersup.ps
new file mode 100644
index 0000000..d568156
--- /dev/null
+++ b/tutorial/psfiles/powersup.ps
@@ -0,0 +1,429 @@
+%!PS-Adobe-3.0
+%%Title: powersup
+%%Creator: Xcircuit v2.3
+%%CreationDate: Wed Jul 18 14:38:19 2001
+%%Pages: 2
+%%BoundingBox: 118 314 494 478
+%%DocumentNeededResources: font Helvetica font Times-Roman font Times-RomanISO
+%%+ font HelveticaISO font Symbol
+%%EndComments
+%%BeginProlog
+%
+% PostScript prolog for output from xcircuit
+% Version: 2.3
+%
+% Electrical circuit (and otherwise general) drawing program
+%
+% Written by Tim Edwards 8/5/93--5/16/01 (tim@bach.ece.jhu.edu)
+% The Johns Hopkins University
+%
+%%BeginResource: procset XCIRCproc 2.3 1
+% supporting definitions --- these are the primary xcircuit types.
+
+/XCIRCsave save def
+/topmat matrix currentmatrix def
+
+/fontslant { /slant exch def [1 0 slant 1 0 0]
+ exch findfont exch makefont dup length dict /ndict exch def
+ { 1 index /FID ne { ndict 3 1 roll put } { pop pop } ifelse } forall
+ ndict definefont pop} def
+/ul { dup type /stringtype eq showflag 1 eq and { gsave
+ currentpoint topmat setmatrix 0 0 moveto 2 index stringwidth pop (_)
+ false charpath flattenpath pathbbox grestore exch pop 1 index
+ sub setlinewidth exch pop currentpoint 3 -1 roll add moveto 0
+ rlineto stroke moveto } if } def
+/ol { dup type /stringtype eq showflag 1 eq and { gsave gsave
+ currentpoint topmat setmatrix 2 index stringwidth pop 3 index
+ true charpath flattenpath pathbbox grestore exch pop
+ exch pop topmat setmatrix (_) true charpath pathbbox grestore
+ exch pop 1 index sub setlinewidth exch pop currentpoint
+ exch 4 1 roll exch sub add moveto pop 0 rlineto stroke
+ moveto } if } def
+/stW { gsave currentpoint newpath moveto true charpath flattenpath
+ pathbbox pop exch pop sub grestore } def
+/Ts {mark Tabs aload pop counttomark 1 add array astore /Tabs exch def Tabs
+ 0 currentpoint pop put} def
+/Tbn {mark Tabs aload pop counttomark dup 2 add 1 roll cleartomark 1 sub} def
+/Tb { 0 1 Tbn {Tabs exch get dup currentpoint pop lt
+ {currentpoint exch pop moveto exit} {pop} ifelse } for } def
+/Tf { Tbn -1 0 {Tabs exch get dup currentpoint pop gt
+ {currentpoint exch pop moveto exit} {pop} ifelse } for } def
+/qS { (aa) stW (a a) stW sub 4 div 0 Kn } def
+/hS { qS qS } def
+/pspc 0 def
+/cf0 { scalefont setfont } bind def
+/Kn { dup kY add /kY exch def rmoveto } bind def
+/ss { /fscale fscale 0.67 mul def currentfont 0.67 cf0 0 fscale0 fscale mul
+ 0.33 mul neg Kn} def
+/Ss { /fscale fscale 0.67 mul def currentfont 0.67 cf0 0 fscale0 fscale mul
+ 0.67 mul Kn } def
+/ns { 0 kY neg Kn /kY 0 def /fscale 1.0 def xfont0 1.0 cf0 } def
+/CR { ns 0 /Bline Bline fscale0 neg add def Bline moveto } def
+/cf { dup type /realtype ne {1.0} if exch findfont exch kY 0 eq
+ { 40 mul dup /fscale0 exch def cf0 /xfont0 currentfont def}
+ {fscale0 mul fscale mul cf0} ifelse } def
+/ctmk { counttomark dup 2 add -1 roll pop } bind def
+/label { gsave translate 0 0 moveto dup scale /rotval exch def /just exch def
+ just 16 and 0 gt {0 1 dtransform gsave pagemat setmatrix idtransform
+ exch grestore 1 0 dtransform gsave pagemat setmatrix idtransform
+ exch grestore dup 0 eq {pop mul 0 gt} {3 1 roll pop pop 0 lt} ifelse
+ {-1 /just just dup 3 and 1 ne {3 xor} if def} {1} ifelse exch 0 lt
+ {-1 /just just dup 12 and 4 ne {12 xor} if def} {1} ifelse scale }
+ if /showflag 0 def /fspc pspc def /Bline 0 def /Tabs 0 array def
+ /fscale 1.0 def /kY 0 def
+ gsave dup 1 add copy 0 exch {exch dup type /stringtype eq {true
+ charpath flattenpath} {exec} ifelse } repeat pop pathbbox grestore
+ 3 -1 roll pop 3 1 roll just 1 and 0 gt {just 2 and 0 gt {exch pop
+ neg fspc sub} {exch sub 0.5 mul neg} ifelse} {pop neg fspc add}
+ ifelse exch Bline exch just 4 and 0 gt {just 8 and 0 gt {exch pop
+ neg fspc sub} {add 0.5 mul neg} ifelse} {pop neg fspc add} ifelse
+ /showflag 1 def rotval rotate Kn currentpoint translate
+ /Bline 0 def /Tabs 0 array def /fscale 1.0 def /kY 0 def
+ {dup type /stringtype eq {show}{exec} ifelse} repeat grestore } def
+/pinlabel { hlevel 0 eq { /pspc 20 def label /pspc 0 def }
+ { pop pop pop pop pop {pop} repeat } ifelse } def
+/pinglobal { pinlabel } def
+/infolabel { pinlabel } def
+
+/scb { setrgbcolor } bind def /sce { defColor aload pop scb } bind def
+/cRedef {/defColor currentcolor 3 array astore def} def
+/begingate { /hlevel hlevel 1 add def /defColor currentcolor sce 3 array
+ astore def gsave sce translate 0 0 moveto dup 0 lt
+ {neg 1 sub -1 1 scale} if rotate dup scale } bind def
+/makeparm {3 string cvs dup length 1 add string /tstr exch def tstr exch
+ 1 exch putinterval tstr 0 (v) putinterval tstr cvn} bind def
+/beginparm { -1 1 {makeparm exch def} for
+ dup type /arraytype eq { aload length -1 1 {makeparm exch def}
+ for } if begingate } bind def
+/endgate { /hlevel hlevel 1 sub def grestore defColor aload pop cRedef
+ scb} bind def
+
+/hlevel 0 def
+/tmpa [1 0 0 1 0 0] def
+/gar {8 8 true tmpa {<c0 c0 00 00 0c 0c 00 00>} imagemask} bind
+{8 8 true tmpa {<30 70 60 02 03 07 06 20>} imagemask} bind
+{8 8 true tmpa {<0c 1e 1e 0c c0 e1 e1 c0>} imagemask} bind
+{8 8 true tmpa {<0f 0f 0f 0f f0 f0 f0 f0>} imagemask} bind
+{8 8 true tmpa {<3f f3 e1 e1 f3 3f 1e 1e>} imagemask} bind
+{8 8 true tmpa {<df cf 8f 9f fd fc f8 f9>} imagemask} bind
+{8 8 true tmpa {<ff 3f 3f ff ff f3 f3 ff>} imagemask} bind 7 array astore def
+/ppaint { gsave clip tmpa dup setmatrix pathbbox neg exch neg 4 2 roll
+ neg 4 -1 roll 2 copy gt {exch} if 8 div ceiling 8 mul 4 2 roll neg 2 copy
+ gt {exch} if 8 div ceiling 8 mul 3 -1 roll -8 5 -1 roll
+ { 3 index exch 5 exch put dup -8 3 index { 3 index
+ exch 4 exch put 3 index exec } for } for pop pop pop pop grestore } bind def
+/setstyles {
+ currentlinewidth mul setlinewidth /style exch def
+ style 1 and 0 gt not {closepath} if
+ style 2 and 0 gt {currentlinewidth 4 mul dup 2 array astore 0 setdash} if
+ style 4 and 0 gt {0.5 currentlinewidth 4 mul 2 array astore 0 setdash} if
+ style dup 256 ge exch 480 lt and { gsave 1 setgray eofill grestore } if
+ style 16 and 0 gt { gsave style 224 and -5 bitshift dup 7 lt
+ {gar exch get ppaint} { pop eofill } ifelse grestore } if
+ style 8 and 0 gt style 512 eq or { newpath } { stroke } ifelse grestore } def
+
+/polygon { gsave /num exch def moveto num 1 sub {lineto} repeat setstyles } def
+/xcarc { gsave newpath arc setstyles } def
+/elb { matrix currentmatrix 7 -1 roll 7 -1 roll translate 5 1 roll 4 -1 roll
+ 3 index div 1 scale } def
+/ele { 0 4 1 roll 0 4 1 roll } bind def
+/ellipse { gsave elb newpath ele arc setmatrix setstyles } def
+/pellip { elb ele arc setmatrix } def
+/nellip { elb ele arcn setmatrix } def
+/spline { gsave moveto curveto setstyles } def
+/polyc { {lineto} repeat } bind def
+/beginpath { gsave moveto } bind def
+/endpath { setstyles } bind def
+/bop { 1 setlinecap 0 setlinejoin 6 setmiterlimit 0 0 0 scb cRedef } def
+/insertion {/PSobj save def /showpage {} def bop translate} def
+/end_insert {PSobj restore} def
+/setpagemat {/pagemat matrix currentmatrix def} def
+/inchscale {setpagemat 0.375 mul dup scale} def
+/cmscale {setpagemat 0.35433071 mul dup scale} def
+
+%%EndResource
+%%EndProlog
+
+/Times-Roman findfont dup length dict begin
+{1 index /FID ne {def} {pop pop} ifelse} forall
+/Encoding ISOLatin1Encoding def currentdict end
+/Times-RomanISO exch definefont pop
+
+/Helvetica findfont dup length dict begin
+{1 index /FID ne {def} {pop pop} ifelse} forall
+/Encoding ISOLatin1Encoding def currentdict end
+/HelveticaISO exch definefont pop
+
+% XCircuit output starts here.
+
+/inductor {
+% -14 -64 29 112 bbox
+begingate
+1 1.00 20 -28 20 -44 0 -48 0 -24 spline
+1 1.00 -20 -20 -20 -32 0 -28 0 -24 spline
+1 1.00 20 32 20 16 0 12 0 36 spline
+1 1.00 20 12 20 -4 0 -8 0 16 spline
+1 1.00 20 -8 20 -24 0 -28 0 -4 spline
+1 1.00 -20 20 -20 8 0 12 0 16 spline
+1 1.00 -20 0 -20 -12 0 -8 0 -4 spline
+1 1.00 0 -48 0 -64 2 polygon
+1 1.00 0 36 0 48 2 polygon
+1.000 0.000 0.000 scb
+(l.1) {/Times-Roman cf} 2 9 0 1.00 0 48 pinlabel
+(l.2) {/Times-Roman cf} 2 13 0 1.00 0 -64 pinlabel
+sce
+(spice:L%i %pl.1 %pl.2 1.0U) {/Times-Roman cf} 2 0 0 1.00 -208 -160 infolabel
+sce
+(sim:l %pl.1 %pl.2) {/Times-Roman cf} 2 0 0 1.00 -208 -208 infolabel
+endgate
+} def
+
+/Transformer {
+% -62 -64 108 112 bbox
+(?) 1 beginparm
+1.00 0 -48 0 inductor
+1 1.00 -16 48 -16 -64 2 polygon
+1 1.00 0 48 0 -64 2 polygon
+1.00 180 32 -16 inductor
+1.000 0.000 0.000 scb
+(1) {/Helvetica cf} 2 25 0 1.00 -48 48 pinlabel
+(2) {/Helvetica cf} 2 29 0 1.00 -48 -64 pinlabel
+(3) {/Helvetica cf} 2 25 0 1.00 32 48 pinlabel
+(4) {/Helvetica cf} 2 29 0 1.00 32 -64 pinlabel
+sce
+mark v1 (pcb:T) {/Times-Roman cf} ctmk 20 0 1.00 -96 -160 infolabel
+endgate
+} def
+
+/circle {
+% -6 -12 28 24 bbox
+% trivial
+begingate
+1 1.00 16 0 6 0.00 360.00 xcarc
+1 1.00 0 0 10 0 2 polygon
+1.000 0.000 0.000 scb
+(out) {/Times-Roman cf} 2 4 0 1.00 16 0 pinlabel
+(out) {/Times-Roman cf} 2 7 0 1.00 0 0 pinlabel
+endgate
+} def
+
+/diode {
+% -18 -48 36 96 bbox
+(?) 1 beginparm
+248 1.00 -18 -16 0 16 18 -16 3 polygon
+1 1.00 0 -48 0 -16 2 polygon
+1 1.00 0 48 0 16 2 polygon
+1 1.00 -18 16 18 16 2 polygon
+1.000 0.000 0.000 scb
+(1) {/Times-Roman cf} 2 9 0 1.00 0 48 pinlabel
+(2) {/Times-Roman cf} 2 13 0 1.00 0 -48 pinlabel
+sce
+mark v1 (pcb:D) {/Helvetica cf} ctmk 20 0 1.00 -64 -144 infolabel
+endgate
+} def
+
+/rectifier {
+% -112 -48 192 192 bbox
+begingate
+1.00 315 -64 96 diode
+1.00 225 32 96 diode
+1.00 225 -64 0 diode
+1.00 315 32 0 diode
+1 1.00 -30 130 -16 144 -2 130 3 polygon
+1 1.00 66 62 80 48 66 34 3 polygon
+1 1.00 -2 -34 -16 -48 -30 -34 3 polygon
+1 1.00 -98 34 -112 48 -98 62 3 polygon
+endgate
+} def
+
+/dot {
+% -10 -10 20 20 bbox
+% trivial
+begingate
+248 1.00 0 0 6 0.00 360.00 xcarc
+1.000 0.000 0.000 scb
+(x) {/Times-Roman cf} 2 29 0 1.00 0 0 pinlabel
+endgate
+} def
+
+/jumper {
+% -4 -14 18 28 bbox
+% trivial
+begingate
+1 1.00 0 0 10 -90.00 90.00 xcarc
+1 1.00 0 10 0 16 2 polygon
+1 1.00 0 -10 0 -16 2 polygon
+1.000 0.000 0.000 scb
+(a) {/Times-Roman cf} 2 1 0 1.00 0 16 pinlabel
+(a) {/Times-Roman cf} 2 13 0 1.00 0 -16 pinlabel
+endgate
+} def
+
+/gnd {
+% -32 -60 64 68 bbox
+% trivial
+begingate
+1 1.00 0 0 0 -32 2 polygon
+1 1.00 -32 -32 32 -32 2 polygon
+1 1.00 -18 -46 18 -46 2 polygon
+1 1.00 -4 -60 4 -60 2 polygon
+1.000 0.000 0.000 scb
+(GND) {/Times-Roman cf} 2 1 0 1.00 0 0 pinglobal
+endgate
+} def
+
+/Capacitor {
+% -32 -64 186 128 bbox
+(1.0) (p) (?) 3 beginparm
+1 1.00 0 -64 0 -6 2 polygon
+1 1.00 0 64 0 6 2 polygon
+1 1.00 -32 6 32 6 2 polygon
+1 1.00 -32 -6 32 -6 2 polygon
+1.000 0.000 0.000 scb
+(1) {/Times-Roman cf} 2 9 0 1.00 0 64 pinlabel
+(2) {/Times-Roman cf} 2 13 0 1.00 0 -64 pinlabel
+sce
+mark v2 v1 ( %p1 %p2 ) v3 (spice:C) {/Times-RomanISO cf} ctmk 4 0 1.00 -208
+-160 infolabel
+sce
+(sim:c %p1 %p2) {/Times-Roman cf} 2 4 0 1.00 -208 -208 infolabel
+mark (F) v2 {hS} v1 {/Times-RomanISO cf} ctmk 20 0 1.00 48 0 label
+sce
+mark v3 (pcb:C) {/Times-Roman cf} ctmk 20 0 1.00 -208 -256 infolabel
+endgate
+} def
+
+/Polarized {
+% -32 -64 176 128 bbox
+(1.0) (p) (?) 3 beginparm
+1 1.00 0 -64 0 -6 2 polygon
+1 1.00 0 64 0 6 2 polygon
+1 1.00 -32 6 32 6 2 polygon
+1 1.00 0 -80 74 66.00 114.00 xcarc
+1.000 0.000 0.000 scb
+(1) {/Times-Roman cf} 2 9 0 1.00 0 64 pinlabel
+(2) {/Times-Roman cf} 2 13 0 1.00 0 -64 pinlabel
+sce
+mark v2 v1 ( %p1 %p2 ) v3 (spice:C) {/Times-RomanISO cf} ctmk 4 0 1.00 -208
+-160 infolabel
+sce
+(sim:e %p1 %p2) {/Times-Roman cf} 2 4 0 1.00 -208 -208 infolabel
+mark (F) v2 {hS} v1 {/Times-RomanISO cf} ctmk 20 0 1.00 48 0 label
+sce
+mark v3 (pcb:C) {/Times-Roman cf} ctmk 20 0 1.00 -208 -256 infolabel
+endgate
+} def
+
+%%Page: power_supply 1
+%%PageOrientation: Portrait
+/pgsave save def bop
+% power_supply is_symbol
+% 529 953 offsets
+1.0000 inchscale
+2.6000 setlinewidth
+
+1.00 0 497 1065 Transformer
+1 1.00 449 1113 449 1193 401 1193 3 polygon
+1 1.00 449 1001 449 937 401 937 3 polygon
+1.00 -1 401 1193 circle
+1.00 -1 401 937 circle
+1.000 0.000 0.000 scb
+(+) {/Symbol cf} (V) {/Helvetica cf} 4 23 0 1.00 385 1193 pinlabel
+(-) {/Symbol cf} (V) {/Helvetica cf} 4 23 0 1.00 385 937 pinlabel
+sce
+1.00 0 785 1017 rectifier
+1 1.00 529 1113 529 1193 769 1193 769 1161 4 polygon
+1 1.00 529 1001 529 937 769 937 769 969 4 polygon
+1.00 0 769 969 dot
+1.00 0 769 1161 dot
+1 1.00 673 1065 641 1065 641 953 3 polygon
+1 1.00 641 921 641 873 1201 873 3 polygon
+1 1.00 865 1065 1201 1065 2 polygon
+1 1.00 961 1065 961 1033 2 polygon
+1 1.00 1041 1065 1041 1033 2 polygon
+1 1.00 961 905 961 873 2 polygon
+1 1.00 1041 905 1041 873 2 polygon
+1.00 0 1041 873 dot
+1.00 0 961 873 dot
+1.00 0 961 1065 dot
+1.00 0 1041 1065 dot
+1.00 0 865 1065 dot
+1.00 0 673 1065 dot
+1.00 -1 641 937 jumper
+1.00 0 641 873 gnd
+1.00 0 641 873 dot
+1.00 0 1201 873 circle
+1.00 0 1201 1065 circle
+1.000 0.000 0.000 scb
+(Vout) {0 -80 Kn} {/Helvetica cf} 3 28 0 1.00 1217 1065 pinlabel
+sce
+(+) {/Symbol cf} 2 20 0 1.00 1249 1065 label
+(-) {/Symbol cf} 2 20 0 1.00 1249 873 label
+(Bridge Rectifier) {/Helvetica cf} 2 24 0 1.00 369 1273 label
+1.00 -1 961 969 [(1.0) (\265) ] Capacitor
+1.00 0 1041 969 [(10) (\265) ] Polarized
+(1N914) {hS} (\327) {hS} (4) {/HelveticaISO cf} 6 24 0 1.00 849 1145 label
+pgsave restore showpage
+
+/power_supply {
+% -224 -208 416 416 bbox
+% power_supply is_schematic
+begingate
+0 1.00 -224 -208 -224 208 192 208 192 -208 4 polygon
+(+) {/Symbol cf} (V) {/Helvetica cf} 4 20 0 1.00 -192 112 label
+(-) {/Symbol cf} (V) {/Helvetica cf} 4 20 0 1.00 -192 -112 label
+1.000 0.000 0.000 scb
+(+) {/Symbol cf} (V) {/Helvetica cf} 4 23 0 1.00 -224 112 pinlabel
+(-) {/Symbol cf} (V) {/Helvetica cf} 4 23 0 1.00 -224 -112 pinlabel
+sce
+(power supply) {CR} (unregulated) {/Helvetica cf} 4 21 0 1.00 -16 16 label
+1.000 0.000 0.000 scb
+(Vout) {/Helvetica cf} 2 20 0 1.00 192 112 pinlabel
+sce
+(Vout) {/Helvetica cf} 2 23 0 1.00 160 112 label
+endgate
+} def
+
+/Resistor {
+% -14 -64 157 128 bbox
+(1.0) (k) (?) 3 beginparm
+1 1.00 0 64 0 36 2 polygon
+1 1.00 0 -64 0 -36 2 polygon
+1 1.00 0 -36 14 -30 -14 -18 14 -6 -14 6 14 18 -14 30 0 36 8 polygon
+1.000 0.000 0.000 scb
+(1) {/Times-Roman cf} 2 9 0 1.00 0 64 pinlabel
+(2) {/Times-Roman cf} 2 13 0 1.00 0 -64 pinlabel
+sce
+mark v2 v1 ( %p1 %p2 ) v3 (spice:R) {/Times-Roman cf} ctmk 4 0 1.00 -208 -160
+infolabel
+sce
+(sim:R %p1 %p2) {/Times-Roman cf} 2 4 0 1.00 -208 -208 infolabel
+mark (W) {/Symbol cf} v2 {hS} v1 {/Times-Roman cf} ctmk 20 0 1.00 32 0 label
+sce
+mark v3 (pcb:R) {/Times-Roman cf} ctmk 20 0 1.00 -208 -256 infolabel
+endgate
+} def
+
+%%Page: 2 2
+%%PageOrientation: Portrait
+/pgsave save def bop
+% 1166 848 offsets
+1.0000 inchscale
+2.6000 setlinewidth
+
+1.00 0 782 1056 power_supply
+1 1.00 558 1168 414 1168 2 polygon
+1 1.00 558 944 414 944 2 polygon
+1.00 0 1166 1040 Resistor
+1 1.00 974 1168 1166 1168 1166 1104 3 polygon
+1.00 0 1166 976 gnd
+(AC input) {/Helvetica cf} 2 21 0 1.00 398 1056 label
+(+) {/Symbol cf} 2 21 0 1.00 398 1136 label
+(-) {/Symbol cf} 2 21 0 1.00 398 976 label
+1.00 -1 414 1168 circle
+1.00 -1 414 944 circle
+pgsave restore showpage
+
+%%Trailer
+XCIRCsave restore
+%%EOF
diff --git a/tutorial/psfiles/test1.ps b/tutorial/psfiles/test1.ps
new file mode 100644
index 0000000..5cc16f5
--- /dev/null
+++ b/tutorial/psfiles/test1.ps
@@ -0,0 +1,154 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Title: test1
+%%Creator: Xcircuit v2.0
+%%CreationDate: Mon May 24 11:14:54 1999
+%%Pages: 1
+%%BoundingBox: 68 68 214 118
+%%DocumentNeededResources: font Times-Italic font Times-Roman
+%%EndComments
+%%BeginProlog
+%
+% PostScript prolog for output from xcircuit
+% Version: 2.0
+%
+% Electrical circuit (and otherwise general) drawing program
+%
+% Written by Tim Edwards 8/5/93--8/8/97 (tim@bach.ece.jhu.edu)
+% The Johns Hopkins University
+%
+%%BeginResource: procset XCIRCproc 2.0 2
+% supporting definitions --- these are the primary xcircuit types.
+
+/XCIRCsave save def
+/topmat matrix currentmatrix def
+
+/fontslant { /slant exch def [1 0 slant 1 0 0]
+ exch findfont exch makefont dup length dict /ndict exch def
+ { 1 index /FID ne { ndict 3 1 roll put } { pop pop } ifelse } forall
+ ndict definefont pop} def
+/cf { dup type /realtype eq {40 mul /fscale exch def} if dup /xfont exch def
+ findfont fscale scalefont setfont } def
+/Ss { gsave 0.67 dup scale gsave mty neg rmoveto
+ glevel 1 add /glevel exch def } def
+/ss { gsave 0.67 dup scale gsave mty 0.5 mul rmoveto
+ glevel 1 add /glevel exch def } def
+/ns { currentpoint transform % preserve x position!
+ glevel {grestore} repeat /glevel 0 def
+ itransform pop currentpoint pop sub 0 rmoveto } def
+/ul { showflag 1 eq { gsave
+ currentpoint topmat setmatrix 0 0 moveto 2 index stringwidth pop (_)
+ false charpath flattenpath pathbbox grestore exch pop 1 index
+ sub setlinewidth exch pop currentpoint 3 -1 roll add moveto 0
+ rlineto stroke moveto } if } def
+/ol { showflag 1 eq { gsave gsave
+ currentpoint topmat setmatrix 2 index stringwidth pop 3 index
+ true charpath flattenpath pathbbox grestore exch pop
+ exch pop topmat setmatrix (_) true charpath pathbbox grestore
+ exch pop 1 index sub setlinewidth exch pop currentpoint
+ exch 4 1 roll exch sub add moveto pop 0 rlineto stroke
+ moveto } if } def
+/stW { gsave true charpath flattenpath pathbbox pop exch pop sub
+ grestore } def
+/bs { stW 0 rmoveto } def
+/pspc 0 def
+/qS { (aa) stW (a a) stW sub 4 div 0 rmoveto } def
+/hS { qS qS } def
+/textx { dup 2 mul 1 add copy 0 exch
+ { exch exec exch stringwidth pop add } repeat neg ns } def
+/mty { 0 topmat setmatrix (A) true charpath flattenpath pathbbox exch
+ pop exch sub exch pop neg grestore } def
+/texty { gsave 2 copy pop exec mty } def
+/tcenter { textx grestore 0.5 mul 0 rmoveto } def
+/tright { textx grestore fspc sub 0 rmoveto } def
+/tmiddle { texty 0.5 mul rmoveto } def
+/ttop { texty fspc sub rmoveto } def
+/tshow { { exec show } repeat ns } def
+
+/label { gsave translate 0 0 moveto rotate /just exch def just 16 and 0 gt
+ {0 1 dtransform gsave pagemat setmatrix idtransform exch grestore
+ 1 0 dtransform gsave pagemat setmatrix idtransform exch grestore
+ dup 0 eq {pop mul 0 gt} {3 1 roll pop pop 0 lt} ifelse
+ {-1 /just just dup 3 and 1 ne {3 xor} if def} {1} ifelse exch 0 lt
+ {-1 /just just dup 12 and 4 ne {12 xor} if def} {1} ifelse scale } if
+ /glevel 0 def /showflag 0 def /fspc pspc def
+ just 1 and 0 gt {gsave just 2 and 0 gt {tright}{tcenter} ifelse}
+ {fspc 0 rmoveto} ifelse
+ just 4 and 0 gt {just 8 and 0 gt {ttop}{tmiddle} ifelse}
+ {0 fspc rmoveto} ifelse
+/showflag 1 def tshow grestore } def
+/pinlabel { /pspc 20 def label /pspc 0 def } def
+/pinglobal { pinlabel } def
+
+/begingate { gsave translate 0 0 moveto dup 0 lt {neg 1 sub -1 1 scale} if
+ rotate dup scale /pinlabel { pop pop pop pop 2 mul {pop} repeat}
+ def } bind def
+/beginparm { -1 1 {1 add -1 roll def} for begingate } bind def
+/endgate { grestore /pinlabel { /pspc 20 def
+ label /pspc 0 def } def } bind def
+
+/tmpa [1 0 0 1 0 0] def
+/gar {8 8 true tmpa {<c0 c0 00 00 0c 0c 00 00>} imagemask} bind
+{8 8 true tmpa {<30 70 60 02 03 07 06 20>} imagemask} bind
+{8 8 true tmpa {<0c 1e 1e 0c c0 e1 e1 c0>} imagemask} bind
+{8 8 true tmpa {<0f 0f 0f 0f f0 f0 f0 f0>} imagemask} bind
+{8 8 true tmpa {<3f f3 e1 e1 f3 3f 1e 1e>} imagemask} bind
+{8 8 true tmpa {<df cf 8f 9f fd fc f8 f9>} imagemask} bind
+{8 8 true tmpa {<ff 3f 3f ff ff f3 f3 ff>} imagemask} bind 7 array astore def
+/ppaint { gsave clip tmpa dup setmatrix pathbbox neg exch neg 4 2 roll
+ neg 4 -1 roll 2 copy gt {exch} if 8 div ceiling 8 mul 4 2 roll neg 2 copy
+ gt {exch} if 8 div ceiling 8 mul 3 -1 roll -8 5 -1 roll
+ { 3 index exch 5 exch put dup -8 3 index { 3 index
+ exch 4 exch put 3 index exec } for } for pop pop pop pop grestore } bind def
+/setstyles {
+ currentlinewidth mul setlinewidth /style exch def
+ style 1 and 0 gt not {closepath} if
+ style 2 and 0 gt {currentlinewidth 4 mul dup 2 array astore 0 setdash} if
+ style 4 and 0 gt {0.5 currentlinewidth 4 mul 2 array astore 0 setdash} if
+ style dup 256 ge exch 480 lt and { gsave 1 setgray eofill grestore } if
+ style 16 and 0 gt { gsave style 224 and -5 bitshift dup 7 lt
+ {gar exch get ppaint} { pop eofill } ifelse grestore } if
+ style 8 and 0 gt { newpath } { stroke } ifelse grestore } def
+/scb { gsave setrgbcolor } bind def /sce { grestore } bind def
+
+/polygon { gsave /num exch def moveto num 1 sub {lineto} repeat setstyles } def
+/xcarc { gsave newpath arc setstyles } def
+/elb { matrix currentmatrix 7 -1 roll 7 -1 roll translate 5 1 roll 4 -1 roll
+ 3 index div 1 scale } def
+/ele { 0 4 1 roll 0 4 1 roll } bind def
+/ellipse { gsave elb newpath ele arc setmatrix setstyles } def
+/pellip { elb ele arc setmatrix } def
+/nellip { elb ele arcn setmatrix } def
+/spline { gsave moveto curveto setstyles } def
+/polyc { {lineto} repeat } bind def
+/beginpath { gsave moveto } bind def
+/endpath { setstyles } bind def
+/bop { 1 setlinecap 0 setlinejoin 6 setmiterlimit 0 setgray } def
+/setpagemat {/pagemat matrix currentmatrix def} def
+/inchscale {setpagemat 0.375 mul dup scale} def
+/cmscale {setpagemat 0.35433071 mul dup scale} def
+
+%%EndResource
+%%EndProlog
+
+/Symbol-Oblique /Symbol .167 fontslant
+
+% XCircuit output starts here.
+
+%%Page: 1 1
+%%PageOrientation: Portrait
+/pgsave save def bop
+% 448 96 offsets
+1.0000 inchscale
+2.6000 setlinewidth
+
+(\)) {qS} () {/Times-Roman 1.000 cf} (t) {/Times-Italic 1.000 cf} () {ns} (c)
+{ss} () {/Times-Italic 1.000 cf} (pw) {/Symbol-Oblique 1.000 cf} (\) = sin\(2)
+{/Times-Roman 1.000 cf} (x) {/Times-Italic 1.000 cf} (\()
+{/Times-Roman 1.000 cf} () {qS} (f) {/Times-Italic 1.000 cf}
+12 4 0 224 256 label
+0 1.00 192 192 192 304 560 304 560 192 4 polygon
+pgsave restore showpage
+
+%%Trailer
+XCIRCsave restore
+%%EOF
diff --git a/tutorial/tutorial.html b/tutorial/tutorial.html
new file mode 100644
index 0000000..421047b
--- /dev/null
+++ b/tutorial/tutorial.html
@@ -0,0 +1,803 @@
+<HTML>
+<HEAD>
+ <STYLE type="text/css">
+ H1 {color: maroon}
+ H2 {color: #007090}
+ H3 {color: #0050b0}
+ A.head {color: #0060a0}
+ </STYLE>
+</HEAD>
+<TITLE>XCircuit Tutorial Page</TITLE>
+<BODY BACKGROUND=../giffiles/blpaper.gif>
+<CENTER>
+<A HREF=../xctitle.ps><IMG ALIGN=middle SRC=../xctitle.gif
+ALT="The XCircuit Tutorial"></A>
+<H1>The XCircuit Tutorial</H1>
+</CENTER>
+<HR>
+<H2>Table of Contents</H2>
+<UL>
+ <LI> <A HREF="#Download">Download</A> Download the tutorial
+ <LI> <A HREF="#Start">Getting Started</A> Introduction
+ <LI> <A HREF="#Task1">Task 1</A> Running XCircuit
+ <LI> <A HREF="#Task2">Task 2</A> Change an option from the menu
+ <LI> <A HREF="#Task3">Task 3</A> Draw a line
+ <LI> <A HREF="#Task4">Task 4</A> Move an object
+ <LI> <A HREF="#Task5">Task 5</A> Change the properties of a polygon
+ <LI> <A HREF="#Task6">Task 6</A> Change the page
+ <LI> <A HREF="#Task7">Task 7</A> Select an object from the user library
+ <LI> <A HREF="#Task8">Task 8</A> Use a keyboard macro to create an arc
+ <LI> <A HREF="#Task9">Task 9</A> Zooming and panning
+ <LI> <A HREF="#Task10">Task 10</A> Selection of multiple objects
+ <LI> <A HREF="#Task11">Task 11</A> Saving a file
+ <LI> <A HREF="#Task12">Task 12</A> Loading a file
+ <LI> <A HREF="#Task13">Task 13</A> Entering Text
+ <LI> <A HREF="#Task14">Task 14</A> Making curves and paths
+ <LI> <A HREF="#Task15">Task 15</A> Dealing with over/under arrangement of elements
+ <LI> <A HREF="#Task16">Task 16</A> Making user-defined objects
+ <LI> <A HREF="#Task17">Task 17</A> Editing objects and elements
+ <LI> <A HREF="#Task18">Task 18</A> Generating complex geometric shapes
+ <LI> <A HREF="#Task19">Task 19</A> Investigating other <B>xcircuit</B> commands
+ <LI> <A HREF=tutorial2.html>Schematic Capture Tutorial</A>
+ <LI> <A HREF=../features.html><B>xcircuit</B> list of features</A>
+ <LI> <A HREF=../trouble.html>Troubleshooting <B>xcircuit</B></A>
+</UL>
+
+<H2><A NAME="Download">Download</A></H2>
+
+This download is the tar'd image of everything in the tutorial subdirectory,
+including both the standard tutorial and the schematic capture tutorial.
+Note that when untar'd, this will expand into a directory tree with top-level
+directory named "tutorial". <P>
+
+<BLOCKQUOTE>
+ <BLOCKQUOTE>
+ <TABLE border="1" frame="box" rules="none" width="90%" cellspacing="0"
+ cellpadding="5" bgcolor="#ffffcc">
+ <TBODY>
+ <TR>
+ <TD> File </TD> <TD> Revision </TD> <TD> Size </TD> <TD> Date </TD>
+ </TR>
+ <TR>
+ <TD> <A HREF=../tutorial.tar.gz>tutorial.tar.gz</A> </TD>
+ <TD> 1 </TD>
+ <TD> (432KB) </TD>
+ <TD> January 28, 2003 </TD>
+ </TR>
+ </TBODY>
+ </TABLE>
+ </BLOCKQUOTE>
+</BLOCKQUOTE>
+
+<H2><A NAME="Start">Getting started</A></H2>
+Welcome to xcircuit, the circuit drawing program by Tim Edwards. In order to
+get the most out of this page, you should have already downloaded, compiled,
+and installed the xcircuit program and its libraries. <P>
+
+<H3><A NAME="Task1">Task 1: Run the program</A></H3>
+First, start xcircuit without any parameters: <TT>xcircuit</TT> <P>
+
+<IMG SRC=giffiles/tut1.gif><P>
+The features of the xcircuit window are as follows:
+<OL>
+ <LI> Along the top of the screen are buttons for pull-down menus called "File",
+ "Edit", "Text", "Options", and "Window".
+ <LI> At the top, beside the menu buttons, is a welcome message in the message
+ window telling you the version number of the program (Version 2.0).
+ <LI> On the bottom left is a message window telling you that you are currently
+ editing "Page 1".
+ <LI> On the rest of the bottom is a message window telling you that xcircuit
+ has just loaded the library "/usr/local/lib/xcircuit/builtins.lps" (this
+ may be in a different directory if xcircuit has not been installed in the
+ default directories). This message will disappear after about 10 seconds.
+ <LI> At the left and along the bottom are two <B>scrollbars</B> which report the
+ position of the drawing relative to the main window, and can be used
+ to reposition the drawing by clicking on the bar with any mouse button.
+ <I>Note:</I> Due to the length of time necessary to refresh the drawing
+ window, the scrollbars cannot be "dragged".
+ <LI> In the center is a white <B>drawing area</B> with lightly-colored grid and
+ axis lines.
+</OL>
+There are two types of mouse button-pushing used in xcircuit. When a button
+is pushed and released quickly, I will call it <B>"tapping"</B>. When a button
+is pushed and held down, I will call it a <B>"pressing"</B>. Since pressing
+a button is usually performed in order to move objects around on the screen,
+I will sometimes refer to it as <B>"dragging"</B> the object. <P>
+<I>Note:</I> Xcircuit does <B>not</B> use double-clicking.
+
+<H3><A NAME="Task2">Task 2: Change an option from the menu</A></H3>
+Acquaint yourself with the arrangement of menu buttons and pulldown menus.
+<OL>
+ <LI> Press the button labeled "Options" with <B>mouse button 1</B> and hold down
+ the button while you drag the cursor around with the mouse.
+ <LI> Keeping the mouse button pressed down, move down to the "Elements" button.
+ Each button will highlight as you pass through it.
+ <LI> Put the cursor on top of the arrow icon at the right side of the "Elements"
+ button. You should see a secondary menu titled "Elements" pop up. The
+ title is the topmost entry of the menu. It has no function and does not
+ highlight when the cursor is overtop it.
+ <LI> Keep moving down to the "Color" button and again move the cursor over
+ the arrow icon. The third and final menu of colors will pop up. Note
+ that one item, "Inherit Color" has a check mark on it. The check mark
+ denotes that this entry is the <I>current default color</I>.
+ <LI> Move down to the purple color button and release the mouse button there.
+ The menus will disappear. You have just changed the default drawing
+ color to purple.
+ <LI> Repeat the procedure up to step 4. When you enter the "color" menu you
+ will see that the purple color button is now checked, showing that
+ purple is the default drawing color.
+</OL>
+Throughout the tutorial I will refer to the menu items using the pulldown
+hierarchy, with an arrow ("->") wherever you need to go to a submenu. So
+the "Inherit Color" menu item would be referred to as
+"Options->Elements->Color->Inherit Color".
+
+<H3><A NAME="Task3">Task 3: Draw a line</A></H3>
+Now that you understand the function of the menu buttons, it's time to learn
+how to draw something. The simplest and most common thing to draw in xcircuit
+is a polygon.
+<OL>
+ <LI> Tap <B>mouse button 1</B> anywhere in the drawing area and release it
+ immediately. If you wait too long to release the button, xcircuit will
+ interpret it as trying to "grab" an element on the screen, and nothing
+ will happen (because there aren't any elements yet to grab).
+ <LI> Move the cursor around the screen. A purple line (because you chose
+ purple to be the default color in Task 2) will appear between the
+ origin point and will track with the cursor.
+ <LI> Tap <B>mouse button 1</B> again to finish a line segment. A new line
+ will begin at the point the first one left off. Do this several times
+ to form a polygon. Finish the polygon by tapping <B>mouse button 2</B>.
+ <LI> Repeat steps 1 through 3 but finish by tapping <B>mouse button 3</B>.
+ The line you have just created will disappear. You have just
+ <B>cancelled</B> the operation.
+</OL>
+
+<IMG SRC=giffiles/poly1.gif ALIGN=CENTER> A purple polygon <P>
+
+For most operations in xcircuit, tapping <B>mouse button 1</B> will begin or
+continue an operation, tapping <B>mouse button 2</B> will finish it, and
+tapping <B>mouse button 3</B> will cancel it. The behavior can be slightly
+different depending on the circumstance, and the behavior for <B>pressing</B>
+buttons 1 and 2 is very different, as demonstrated in Tasks 4 and 5.
+
+<H3><A NAME="Task4">Task 4: Move an object</A></H3>
+<B>mouse button 1</B> does have one very different function than that described
+in the last task. It can be used to "grab" hold of an object for moving.
+<OL>
+ <LI> Press <B>mouse button 1</B> close to a line of the polygon you just
+ drew. Hold down the button. The line should turn gold colored,
+ indicating that it has been "selected". If instead nothing happens,
+ then the cursor is too far away from the line. Releasing the button
+ releases the object.
+ <LI> Try grabbing and releasing the polygon from different distances to get
+ a feel for how close you must be to the object in order to grab it.
+ <LI> Now grab the polygon, and with the mouse button held down, move the
+ cursor across the screen. The polygon will follow the cursor. This
+ is how you move an object in xcircuit.
+</OL>
+
+<H3><A NAME="Task5">Task 5: Change the properties of a polygon</A></H3>
+<B>mouse button 2</B> also has a selection funtion; in fact, it has two of
+them. In the normal drawing mode, it can be used to select objects for editing
+or changing properties. In this task you will use <B>mouse button 2</B> to
+select the polygon you just created in order to make it a dashed line.
+<OL>
+ <LI> Select the object by tapping <B>mouse button 2</B> with the cursor near
+ to the object. The object will turn gold, indicating that it has been
+ selected.
+ <LI> Tap <B>mouse button 3</B>, and the selection will be canceled.
+ <LI> Investigate the other form of selection by pressing <B>mouse button 2</B>
+ starting below and to the left of the polygon, and dragging the cursor
+ to the top and right of the polygon. A green box will follow the
+ movement of the cursor.
+ <LI> When the box completely surrounds <I>at least one</I> of the endpoints
+ of any line segment of the polygon, release the button. The polygon
+ should be selected.
+ <LI> Click <B>mouse button 3</B> to deselect the object.
+ <LI> Repeat steps 3 through 5, noting that if no endpoint of the polygon
+ is contained within the <B>select box</B>, then the polygon will not
+ be selected.
+ <LI> Select the polygon but do not deselect it.
+ <LI> Go to the "Options->Elements->Border" submenu and select option
+ "Dashed". When you release the button, the polygon will be drawn
+ in dashed lines, and it will no longer be selected.
+ <LI> Experiment with the different Colors, Fill-styles, and Border-styles
+ available in the menus. Some of the many varieties are shown below.
+</OL>
+
+<IMG SRC=giffiles/poly2.gif ALIGN=TOP> More purple polygons. <BR> Top left: original.
+ Top right: dashed. <BR> Center left: closed. Center right: stippled
+ (50% stipple). <BR> Bottom left: opaque stippled. Bottom right:
+ filled solid. <P>
+
+<H3><A NAME="Task6">Task 6: Change the page</A></H3>
+Xcircuit has multiple pages. There are two ways to change the current
+drawing page, from a keyboard macro convenience function, or from the
+menu.
+<OL>
+ <LI> Select the menu item "Window->Goto Page->Page 2". The polygon
+ you just drew on Page 1 will disappear, and you will be on a
+ clean page, with the bottom left-hand window saying that you
+ are editing "Page 2".
+ <LI> Go back to Page 1 using the keyboard macro: With the cursor
+ in the drawing area, press the "1" key. You will be back on
+ page one.
+ <LI> Keys "1" through "9" and "0" will get you instantly to pages
+ 1 through 10, respectively.
+ <LI> End this task on Page 2, which is currently empty.
+</OL>
+
+<H3><A NAME="Task7">Task 7: Select an object from the user library</A></H3>
+Another common task in xcircuit is to grab an object from the object
+library and place it on the drawing.
+<OL>
+ <LI> Select the "Window->Show Library" button from the menu, or press the
+ "l" (that's "ell" as in "library") key in the drawing window. Note
+ that the menu button has
+ "(l)" written after "Show Library", indicating that the <B>keyboard
+ macro</B> "l" has the same function as the menu button. Generally,
+ keyboard macros, once memorized, are more convenient to use than
+ their menu button counterparts. Almost always, the letter or symbol
+ used for the macro is meaningful and easy to remember (like "a" for
+ "arc", "s" for "spline", "p" for "pan", "c" for "copy", etc.).
+ <LI> A page will appear, showing a number of circuit objects in the
+ built-in object library.
+ <LI> Grab one object by moving the cursor over top it and pressing and
+ holding <B>mouse button 1</B>. As soon as the button is pressed,
+ the object library will disappear, and you will be dragging the
+ object around Page 2, from which you called up the library. When
+ you release the button, the object will be deselected. Place it
+ away from the polygon you drew in the previous tasks.
+ <LI> Select the object by tapping on it with <B>mouse button 2</B>.
+ Try changing the border style to dashed. You will see that
+ nothing happens. This is because object instances from the
+ library are <I>made up of</I> basic elements like polygons,
+ arcs, and splines, but they are <B>composite</B> objects which
+ do not have properties like "Fill-style" and "Border-style".
+ However, object instances do have the property of color, and
+ also the property "size" which simple elements like the polygon
+ do not have.
+ <LI> Select the object again (if you have not already done so), and
+ then select the menu item "Options->Elements->Object Size".
+ <LI> A window will pop up asking you for an object size. Place the
+ cursor somewhere inside the popup window and change the default
+ size of "1.00" to "1.5".
+ <LI> Press the "Okay" button. The popup window will disappear and
+ the object will now be 1.5 times its original size (that is
+ to say, its length and width will each be 1.5 times their
+ previous value).
+</OL>
+
+<CENTER>
+<IMG SRC=giffiles/lib1.gif> <BR>Part of the default circuits built-in library. <P>
+</CENTER>
+
+<H3><A NAME="Task8">Task 8: Use a keyboard macro to create an arc</A></H3>
+As mentioned above, keyboard macros are generally easier to use than
+their menu-button counterparts. You will create an arc in both fashions
+to show the difference.
+<OL>
+ <LI> Select the menu item "Edit->Make Arc".
+ <LI> The information window at the bottom will say "Click button 1
+ and drag to create arc".
+ <LI> Place the cursor where you want the arc center to be and press it.
+ While holding it down, drag the cursor around the screen. An arc
+ will follow the cursor.
+ <LI> Release the mouse button. You will now be editing the angle of the
+ first endpoint. If you just want a circle, tap <B>mouse button 2</B>
+ to end. If you keep pressing <B>mouse button 1</B>, you will be
+ able to edit, in turn, all the properties of the arc such as
+ endpoint positions and ellipse axis.
+ <LI> Now, create an arc by tapping the "a" key while the cursor is in the
+ drawing area. The main difference is that <B>mouse button 1</B> is
+ not held down while you form the radius of the arc. Otherwise,
+ the arc can be edited as before.
+</OL>
+
+<IMG SRC=giffiles/arcs1.gif ALIGN=TOP> Some differenct arcs.
+ <BR> Top left: linewidth of 1.5, first endpoint at 90 degrees.
+ Top right: closed arc.
+ <BR> Bottom left: red circle.
+ Bottom right: blue ellipse. <P>
+
+<H3><A NAME="Task9">Task 9: Zooming and panning</A></H3>
+<OL>
+ <LI> Pan the screen to be centered on the arc by placing the cursor close to
+ the center of the arc and tapping the "p" key.
+ <LI> Pan the screen by selecting menu item "Window->Center Pan" and then
+ tapping <B>mouse button 1</B> on the point of the drawing area that
+ you want to be the new center of the screen.
+ <LI> Tap the "Z" and "z" keys to zoom in and out, or select the menu items
+ "Window->Zoom In" and "Window->Zoom Out". Note how the scrollbars
+ on the side and bottom of the screen change with the scale of the
+ drawing.
+ <LI> Pan the screen by tapping any mouse button on either of the scrollbars.
+ Note how this function is similar to the "Pan" function.
+ <LI> Zoom to a selected area of the screen by making a green selection box
+ like you did in Task 5, step 3. However, instead of releasing the
+ button in order to make the selection, type the "Z" key while the
+ mouse button is still pressed down. The screen area will zoom to
+ the area of the green box.
+ <LI> Alternately, choose "Window->Zoom Box" from the menu. Then press
+ any mouse button and drag to generate the green selection box. When
+ the button is released, the screen area will zoom to the area of the
+ green box.
+</OL>
+
+<H3><A NAME="Task10">Task 10: Selection of multiple objects</A></H3>
+<OL>
+ <LI> Clear the current page by choosing the menu item "File->Clear Page".
+ There is no keyboard macro for this command, to prevent accidental
+ erasure of the screen (which cannot be undeleted).
+ <LI> Grab several objects from the library (see Task 7) and place them
+ on top of each other in the middle of the page.
+ <LI> Decide on one object which you will move, leaving the others where
+ they are.
+ <LI> Now press <B>mouse button 1</B> as if you were going to select the
+ object you want to move. Because the command is ambiguous---the
+ program doesn't know which one or ones of the objects you really
+ want to select---the program will query you one by one for which
+ objects you want to select.
+ <LI> One object will turn blue, the cursor will become a question mark,
+ and the information bar at the bottom will read, for example,
+ "Click to accetp/reject: 1 of 3" if the program found three
+ objects under the cursor. Release the mouse button at this
+ point.
+ <LI> If the object that you want to select and move is colored blue,
+ click <B>mouse button 2</B>. If an object that you <I>don't</I>
+ want to select and move is colored blue, click <B>mouse button
+ 3</B>.
+ <LI> When you have chosen or rejected each of the objects, the cursor
+ will become a circle. You may now press and hold <B>mouse button
+ 1</B> and continue with the intended move.
+ <LI> Try this several times to get used to it.
+</OL>
+
+<CENTER>
+<IMG SRC=giffiles/select1.gif> <BR> Three objects simultaneously selected. <BR> </CENTER>
+ The gold-colored gate has already been selected; the program is now prompting
+ the user for confirmation to add the blue-colored object to the selection. <P>
+<CENTER>
+<IMG SRC=giffiles/select2.gif> <BR> Message window when selecting multiple objects.
+</CENTER><P>
+
+<H3><A NAME="Task11">Task 11: Saving a file</A></H3>
+Since the main purpose of xcircuit is to create publishable-quality picutures,
+it is necessary to understand a little bit about the PostScript output which
+it writes. First I will show you how to save and load a file.
+
+<OL>
+ <LI> Choose a page which you have been drawing on, or create a drawing to
+ save.
+ <LI> Select the menu item "File->Write Xcircuit PS". You will get a popup
+ window that looks like the figure below. <BR>
+ <IMG SRC=giffiles/save1.gif ALIGN=CENTER><BR>The file properties popup window.
+ <LI> If you tap the button labeled "Write". You will get a message in the
+ bottom message window saying "Warning: Enter a new name". Nothing
+ has been written at this point.
+ <LI> Change the filename. Move the cursor over the window containing the
+ filename. Delete the current file name and type in a new one.
+ When you are done, either hit the <TT>RETURN</TT> key or tap the
+ button labeled "Okay" (both actions have the same effect).
+ <LI> <I>Important note:</I> If the name has <B>no</B> extension, an
+ extension "<TT>.ps</TT>" will automatically be added when the file
+ is written. If an extension, for instance "<TT>.eps</TT>", is written
+ in the filename, then it will be used.
+ <LI> When you change the filename, the page label will be changed to
+ match the filename, and the bottom left-hand message window will
+ now say "Editing: " followed by the page label name, followed by
+ the page number in parentheses. <BR>
+ <IMG SRC=giffiles/save2.gif ALIGN=CENTER><BR>Changes to scale and filename.
+ <LI> If the filename you chose already exists on the disk, the button
+ which previously was labeled "Write File" will now say "Overwrite
+ File", the computer will beep, and the bottom message window will
+ say "Warning: File exists".
+ <LI> Tap the button labeled "Close". The window disappears; because
+ you did not tap the "Write File" button, nothing was written,
+ although the filename change has been registered.
+ <LI> Select "File->Write Xcircuit PS" again to bring the window back.
+ This time, tap the "Write File" button. The file will be written
+ to the disk current directory, and the button which previously
+ said "Close" will now say "Done".
+ <LI> The file which has just been saved is already in a PostScript format.
+ You may view it with any PostScript previewer (ghostview is recommended).
+</OL>
+
+<H3><A NAME="Task12">Task 12: Loading a file</A></H3>
+
+<OL>
+ <LI> Go to a new, unused page.
+ <LI> Select menu item "File->Read Xcircuit PS". You will get a screen that
+ looks something like the following: <BR>
+ <IMG SRC=giffiles/load1.gif ALIGN=CENTER> The load-file popup window.
+ <LI> If the file list is larger than the window, you may scroll up and down
+ the list by clicking <B>mouse button 1</B> or <B>2</B> on the
+ <B>scrollbar</B> at the right side of the window and dragging it up
+ and down.
+ <LI> A green box will be drawn around each filename as your cursor passes
+ over it.
+ <LI> Find the file that you just saved in the last task. When the green
+ box is over this filename, tap <B>mouse button 1</B>. The filename
+ will turn green, and at the same time will be copied into the
+ text edit box.
+ <LI> Tap the "Okay" button to load the file.
+ <LI> If you do not wish to use the scrolling menu, you may type the filename,
+ with or without the "<TT>.ps</TT>" extension, in the text edit box,
+ followed by the <TT>RETURN</TT> key or tapping the "Okay" button.
+ <LI> Selecting a directory name in the file list box, including "../" for
+ the directory one level up, will go to that directory. Entering a
+ directory name in the text edit box followed by the <TT>RETURN</TT>
+ key will also go to that directory.
+ <LI> If you know where the <B>xcircuit</B> source is kept, then select the
+ "File->Read Xcircuit PS", go to the source directory, go to the
+ "examples" directory, and load one of the example files, such as
+ "<TT>vcoblock.ps</TT>".
+</OL>
+
+<H3><A NAME="Task13">Task 13: Entering Text</A></H3>
+Xcircuit has a very complicated interface for entering text, which allows
+you to change fonts and font styles within a string, make overlines and
+underlines, and subscripts and superscripts. <P>
+
+<OL>
+ <LI> Go to a new, unused page.
+ <LI> Let's say you want to type in a fairly complicated expression, like <BR>
+ "f(x) = sin(2*pi*omega_c*t)" (except with Greek letters, of course).
+ <LI> If you've read your TeX manual thoroughly, and understand all the finer
+ points of mathematical equation typesetting (if you haven't, you should),
+ then you know that all the variables should be in italic type.
+ <LI> Select menu item "Text->Style->Italic". The default text font is now
+ italic style.
+ <LI> Select menu item "Text->Font->Times Roman" if it is not checked already.
+ The default text font is now Times Italic (Times font + Italic style).
+ <LI> Select menu item "Text->Make Label" and click on <B>mouse button 1</B>
+ anywhere in the drawing area.
+ <LI> Alternately, you can just tap the "<TT>t</TT>" key in the drawing area.
+ <LI> The green line marks the pointer position, and the "x" marks the
+ origin (justification) of the text.
+ <LI> Select menu item "Text->Justification->Middle Justified". You will
+ see the green "x" move to the center of the line, showing that the
+ text is vertically centered on its point of origin.
+ <LI> Alternately, you could type keypad key "6" (on some systems,
+ Shift-keypad 6) to get center-left justified text.
+ <LI> Type "<TT>f</TT>". In the bottom message window, the letter "f" and a vertical
+ bar "|" appear, showing what's in the string relative to the text
+ cursor.
+ <LI> Select menu item "Text->Insert->1/4 Space". This is the proper thing to
+ do for "italic correction", an extra bit of space necessary after an
+ italic character followed by an upright character, particularly tall
+ ones such as "f" and "t" which lean leans rather far to the right of
+ their character bounding boxes.
+ <LI> Select menu item "Text->Style->Normal".
+ <LI> Type "<TT>(</TT>"
+ <LI> Select menu item "Text->Style->Italic".
+ <LI> Type "<TT>x</TT>"
+ <LI> Select menu item "Text->Style->Normal".
+ <LI> Type "<TT>) = sin(2</TT>"
+ <LI> Select menu item "Text->Style->Italic".
+ <LI> Select menu item "Text->Font->Symbol".
+ <LI> Type "\". A page with the 256 character encodings for the
+ Symbol font will appear, replacing the current page, as
+ shown in the figure below.<BR>
+ <CENTER><IMG SRC=giffiles/symbol_enc.gif></CENTER>
+ <LI> Click on the "pi" symbol. The screen will immediately
+ return to the original page, with the "pi" added to the
+ text line.
+ <LI> Type "\", then click on the "omega" symbol in the encoding
+ vector.
+ <LI> Select menu item "Text->Font->Times-Roman"
+ <LI> Select menu item "Text->Style->Subscript" (or keypad-minus)
+ <LI> Type "<TT>c</TT>"
+ <LI> Select menu item "Text->Style->Normalscript" (or keypad-enter)
+ <LI> Type "<TT>t</TT>"
+ <LI> Select menu item "Text->Insert->1/4 Space" for another italic
+ correction.
+ <LI> Select menu item "Text->Style->Normal".
+ <LI> Type "<TT>)</TT>"
+ <LI> Before typing <TT>&lt;RETURN&gt;</TT> to complete the text, use
+ the left- and right-arrow keys to move the cursor around inside
+ the text string. Note how font- and style- changing commands
+ embedded in the text string can be seen in the message window.
+ Their position relative to the text cursor is important when
+ anticipating the effect of deleting (<TT>&lt;DELETE&gt;</TT> key)
+ a text command.
+ <LI> Yes, this is very complicated, but it is also very powerful.
+</OL>
+
+<CENTER><IMG SRC=giffiles/text.gif></CENTER><BR>
+Above: The text figure created in the task.<BR>
+Below: The <A HREF=psfiles/test1.ps>PostScript output</A> of the same text from xcircuit.
+<CENTER><IMG SRC=giffiles/text2.gif></CENTER><BR><BR>
+
+<I>Typographical Note:</I> ISO-Latin1 encodings define the Greek character "mu"
+(µ) to be used for the symbol "micro", which naturally is used often in
+circuit schematics. This differs from the Symbol font "mu" in that it matches
+the style and properties of the font in which it is defined. Thus, it is
+possible to get a Helvetica "mu", a Times-BoldItalic "mu", etc., something
+which is virtually impossible to do even in LaTeX<A HREF=footnote.html>(*)</A>.
+Due to the font size and style matching, this is always preferable to the
+Symbol font "mu". To get the ISO-Latin1 "mu" character, (while entering or
+editing text) choose <I>Text->Encoding->ISO-Latin1</I> from the menu, then
+either choose <I>Text->Insert->Character</I> or type "\" at the text cursor,
+then select the "mu" character from the character array.
+
+<H3><A NAME="Task14">Task 14: Making curves and paths</A></H3>
+Curve drawing is a useful feature of most capable drawing programs. The
+concept of <I>paths</I> is a powerful aspect of PostScript which is not
+usually found elsewhere. Path definitions are used to create a single
+entity out of a string of curves, arc segments, and lines. The resulting
+entity has its own color, fill styles, and border styles.
+
+<OL>
+ <LI> Go to a new, unused page.
+ <LI> Type "s" to start a curve (you can think of "s" as standing for
+ "spline", although these are Bezier curves, not splines, or you
+ can just think of the curvy "s" shape. The key "c" is reserved
+ for copying). The first thing you will see is two dotted lines
+ ending in little "x" marks. These are the curve control points.
+ <LI> Move the cursor around. Right now you are positioning the
+ end of the curve but have no control over the control points.<BR>
+ <IMG SRC=giffiles/spline1.gif>
+ <LI> Place the curve endpoint. If you are satisfied with the shape
+ of this curve, you can tap <B>mouse button 2</B> to finish
+ the curve and quit. However, we'll say that you have more to
+ do to this curve, so tap <B>mouse button 1</B> instead.
+ <LI> You get a message saying "Adjust control point", and the cursor
+ moves overtop the nearest "x" mark. Now when you move the
+ cursor, you change the shape of the curve.
+ <LI> Move the control point two grid blocks to the left of where it
+ started (make the control line horizontal with a length of
+ 4 grid blocks). <BR>
+ <IMG SRC=giffiles/spline2.gif>
+ <LI> Click <B>mouse button 2</B> to finish the curve.
+ <LI> Now we will make a simple path. But it takes more than one element
+ to form a path. Put the cursor over the curve and tap the "c"
+ key.
+ <LI> When you move the cursor, a copy of the curve will follow you.
+ <LI> While you are dragging the curve copy, flip it by tapping the
+ "f" key and then the "F" key (one horizontal plus one vertical
+ flip).
+ <LI> Place the curve with its endpoints overtop the original curve.
+ The result should look like the figure below.
+ <LI> Select both curves by tapping <B>mouse button 2</B> on top of
+ each one, or by forming a selection box (see Task 5).
+ <LI> Tap the "j" key in order to "join" the two curves into a single
+ path.
+ <LI> If you now move or select the path, you will find that both
+ curves act as a single entity.
+ <LI> Select the path and then select menu item
+ "Options->Elements->Fill->(black box)". The path will then
+ become solid black. If you color it blue, it will look something
+ like the right side of the figure below.
+</OL>
+
+<CENTER><IMG SRC=giffiles/spline3.gif></CENTER><BR>
+Curves and paths. Left: The curve has been copied and flipped.
+Center: The two curves are placed together and joined into a path.
+Right: The path is filled and colored as a single entity.
+
+<H3><A NAME="Task15">Task 15: Dealing with over/under arrangement of elements</A></H3>
+
+<OL>
+ <LI> Clear the current page (menu option "File->Clear Page") or go
+ to a new, unused page.
+ <LI> Start a <B>box</B> with the "b" key (this is a convenience for
+ drawing rectangles and squares).
+ <LI> Click <B>mouse button 2</B> to finish the box.
+ <LI> Select the box and choose menu item
+ "Options->Elements->Fill->(black box)", where the "black box"
+ is the first menu item in the list. You will now have a black
+ box. (note that to select the box, the cursor must be near the
+ <B>edge</B> of the box, not in the middle).
+ <LI> Select the box again and choose menu item
+ "Options->Elements->Color->(orange box)". You will now have
+ a solid, orange box.
+ <LI> Go to the built-in library ("l" key) and bring back a circuit
+ object (say, a "nand" gate).
+ <LI> Place the gate on top of the orange box.
+ <LI> Make a copy the box ("c" key) and place it beside the first.
+ <B>mouse button 2</B> ends the copy command.
+ <LI> You will notice that the library object suddenly disappeared.
+ This is because the "copy" command moved the orange box
+ to the end of the drawing list. Because it is drawn <B>after</B>
+ the library object, the library object is hidden underneath.
+ <LI> To get the library object on top again, select everything in the
+ area of the orange box by forming a selection box around the
+ orange box (<B>mouse button 2</B>). Tap the "X" key (Shift-X)
+ to <B>exchange</B> the drawing order of the two elements. The
+ library object will now be visible on top of the orange box.
+</OL>
+
+<CENTER><IMG SRC=giffiles/overunder.gif><BR>
+Over- and Under- arrangements of elements. </CENTER>
+
+<H3><A NAME="Task16">Task 16: Making user-defined objects</A></H3>
+One of the most powerful aspects of xcircuit is its ability to deal with
+objects on a hierarchical level. Circuits in particular are highly
+structured. Often it is desirable to draw a subcircuit and use it
+several times. It is much more efficient to draw the subcircuit and
+create a <B>user object</B> from it rather than to copy all the
+separate elements of the subcircuit every time you want a copy.
+This is also true of new circuit components. <P>
+
+Say we wish to create a new circuit component, a <B>dependent current
+source</B>.
+
+<OL>
+ <LI> Clear the current page or go to a new page.
+ <LI> We want the dependent current source to look something like the
+ independent current source (isource) in the builtin library file.
+ Go to the library and bring back an "isource" object for reference.
+ <LI> Draw a polygon, as in Task 3. Make it diamond-shaped and three
+ grid spaces high, two wide (see the figure below).
+ <LI> Add a line of height one-half-grid space on the top and bottom
+ of the diamond.
+ <LI> Now we will do something unusual. We will grab the arrow from
+ inside the isource object. Edit the original "isource" object
+ by placing the cursor over it and typing the "&gt;" key (push
+ object). The page you were on will disappear, and you will
+ see only the object "isource".
+ <LI> Using the multiple-selection mechanism described in Task 10,
+ select the arrowhead and line in the middle of "isource", but
+ not the surrounding object.
+ <LI> Make a copy of these two elements with the "c" key.
+ <LI> While still dragging around the copy of the arrow, return to
+ the main page by typing the "&lt;" key (pop object). You will
+ be returned to the original drawing, still dragging the arrow
+ with you.
+ <LI> Place the arrow inside the diamond.
+ <LI> Using a selection box, select all of the components of the
+ "dependent current source" object you have just constructed.
+ <LI> Type the "m" key to make the object out of the selected
+ components.
+ <LI> You will get a popup box asking for a name for the object.
+ Type something obvious like "depsource" or "disource".
+ Spaces are not allowed (if you use them, they will be
+ converted to underscores).
+ <LI> Tap the "Okay" button. Now, if you click on the dependent
+ source, it will be treated just like one of the builtin
+ objects.
+ <LI> Type the "L" key to go to the <B>User Library</B>. You
+ will see that the new object you created is now located
+ there. You can click on it to bring back another copy,
+ just like the builtin objects.
+</OL>
+
+<CENTER><IMG SRC=giffiles/object.gif><BR>
+Steps in creating a new user-defined object. </CENTER>
+
+<H3><A NAME="Task17">Task 17: Editing objects and elements </A></H3>
+You briefly edited the built-in "isource" object in the last task,
+but did not change anything. In this task, suppose we want to change
+the appearance of the "dependent current source" object we made in
+the previous task.
+
+<OL>
+ <LI> To edit the object, "push" into it using the "&gt;" key,
+ as you did for the "isource" in the last task.
+ <LI> Make the polygon shorter. Put the cursor close to the
+ top of the diamond and type "e" for "edit".
+ <LI> Use the multiple-selection mechanism to select only the
+ diamond.
+ <LI> Now you will be editing the point position. Move the
+ point down one-half grid space, and tap <B>mouse
+ button 2</B> to complete the edit.
+ <LI> Do the same for the bottom point. Where the two ends of
+ the polygon meet, you will need to adjust both of the
+ points.
+ <LI> Extend the lines on the top and bottom to meet the
+ diamond by editing the endpoints just like you did for
+ the diamond.
+ <LI> When you are done, return to the main page by "popping"
+ out of the object page, using the "&lt;" key.
+</OL>
+
+<CENTER><IMG SRC=giffiles/objedit.gif><BR>
+Steps in editing the user-defined object. </CENTER>
+
+<H3><A NAME="Task18">Task 18: Generating complex geometric shapes</A></H3>
+This can be an incredibly useful feature for general drawing. A
+wholesale use of it is necessary to create such extravaganzas as
+this rendition of the
+<A HREF=http://bach.ece.jhu.edu/~tim/pictures/apl_logo3.ps>JHU Applied
+Physics Lab's logo</A>. I have made use of something in PostScript
+known as a ``path,'' that is, a linked set of lines, arcs, and splines
+which together form the boundary of a single object which can be
+bordered, filled, colored, etc. In this task, I will show you how
+to generate a picture of a solid cylinder, by making a path consisting
+of both ellipses and lines.
+
+<OL>
+ <LI> Start with a clean page.
+ <LI> Create an ellipse as follows:
+ <OL>
+ <LI> Type macro <B>a</B> to start an arc.
+ <LI> Drag the arc out to some desired size.
+ <LI> Click the first mouse button three times (to bypass endpoint
+ editing and go to ellipse axis editing). The position of
+ the cursor will move from the side of the circle to the top.
+ <LI> Drag the ellipse minor axis to the desired size and click
+ the second mouse button to end.
+ </OL> </LI>
+
+ <CENTER><IMG SRC=giffiles/path1.gif><BR>
+ Creating a path object (solid cylinder): top ellipse. </CENTER>
+
+ <LI> The whole ellipse becomes the top of the "cylinder". To make the
+ bottom of the cylinder:
+ <OL>
+ <LI> Copy the first arc and place it well below the first.
+ <LI> Type macro <B>e</B> to edit (or select edit from the menu
+ and click on the lower ellipse).
+ <LI> Immediately type <B>e</B> again or click on the first mouse
+ button to go to endpoint editing mode.
+ <LI> Drag the endpoint around to the other side until the
+ result is the bottom half of an ellipse. Click the
+ second mouse button to finish.
+ </OL> </LI>
+
+ <CENTER><IMG SRC=giffiles/path2.gif><BR>
+ Creating a path object (solid cylinder): bottom (half) ellipse. </CENTER>
+
+ <LI> Draw two lines to create the sides of the cylinder.
+ <LI> Select the bottom and sides of the cylinder, and type the <B>j</B> key
+ to "join" these segments into a single "path".
+ <LI> Select everything. If you (individually) select any component of the
+ path (either the side lines or the bottom ellipse), the whole path
+ will be highlighted.
+
+ <LI> Copy (with the <B>c</B> macro) and place the copy to the side. </LI>
+
+ <CENTER><IMG SRC=giffiles/path3.gif><BR>
+ Creating a path object (solid cylinder): Two cylinder frames. </CENTER>
+
+ <LI> Select the path (lower part) of the rightmost cylinder.
+ <LI> Choose menu item "Options->Elements->Fill->(black box)". Now
+ you can see how to create arbitrary filled shapes. </LI>
+
+ <CENTER><IMG SRC=giffiles/path4.gif><BR>
+ Creating a path object (solid cylinder): Two cylinders, the right one
+ consisting of a filled path. </CENTER>
+
+ <LI> Finish the cylinder in the following manner:
+ <OL>
+ <LI> Color the path shape dark gray.
+ <LI> Select the ellipse located above the colored cylinder and
+ perform the same steps to make it filled solid and colored
+ light gray.
+ <LI> Use the <B>X</B> keyboard macro to correctly arrange the
+ elements, with the light gray ellipse on top of the dark
+ gray path object.
+ <LI> Place the black wire frame cylinder on the left on top of
+ the solid cylinder on the right. <I>Hint:</I> Move the
+ wire frame halfway on top of the solid cylinder, then
+ arrange the top-to-bottom order of the elements so
+ that the wire frame ends up on top, then move the
+ wire frame the rest of the way.
+ </OL>
+</OL>
+
+<CENTER><IMG SRC=giffiles/path5.gif><BR>
+Creating a path object (solid cylinder): Finished cylinder. </CENTER>
+
+
+<H3><A NAME="Task19">Task 19: Investigating other <B>xcircuit</B> commands</A></H3>
+By now you should understand the basic user interface of xcircuit and be able
+to get around the menus, the drawing area, be able to handle the popup
+prompting windows, load and save files, write text, and create polygons,
+arcs, curves, paths, and user objects. Of course, we have just touched
+the surface of <B>xcircuit</B> capabilities. The list of features below
+will help you find out all the things that can be done with the program. <P>
+
+For help with remembering keyboard macros and their functions, select the
+menu item "Options->Help!". You will get a popup window to the right of
+the screen which lists all of the available keyboard functions. Tap the
+"Done" bottom at the bottom when you no longer need the help menu. <P>
+
+<HR>
+<P><A HREF=../welcome.html><IMG ALIGN=middle SRC=../giffiles/bluebutton.gif
+ BORDER=0></A> Back to the xcircuit home page. . .
+<P><IMG SRC=../giffiles/line1.gif><P>
+email: <I>tim@bach.ece.jhu.edu</I>
+</BODY>
+</HTML>
diff --git a/tutorial/tutorial2.html b/tutorial/tutorial2.html
new file mode 100644
index 0000000..b2322d7
--- /dev/null
+++ b/tutorial/tutorial2.html
@@ -0,0 +1,1455 @@
+<HTML>
+<HEAD>
+ <STYLE type="text/css">
+ H1 {color: maroon}
+ H2 {color: #007090}
+ H3 {color: #0050b0}
+ A.head {color: #0060a0}
+ </STYLE>
+</HEAD>
+<TITLE>XCircuit Schematic Capture Tutorial Page</TITLE>
+<BODY BACKGROUND=../giffiles/blpaper.gif>
+<H1><IMG ALIGN=top SRC=../xcicon.gif> The XCircuit Schematic Capture Tutorial</H1>
+
+<!--
+<HR>
+<font color=red>
+<IMG SRC=../giffiles/constr.gif ALIGN=middle>
+NOTICE: Page still under construction (but almost finished)!
+</font>
+-->
+
+<HR>
+
+<H2>Table of Contents</H2>
+<UL>
+ <LI> <A HREF="#Start">Getting Started</A>
+ <LI> <A HREF="#Task1">Task1</A> Acquaint yourself with XCircuit
+ <LI> <A HREF="#Task2">Task2</A> Run the program
+ <LI> <A HREF="#Task3">Task3</A> Drawing a circuit for SPICE simulation
+ <LI> <A HREF="#Task4">Task4</A> Introduction to parameters
+ <LI> <A HREF="#Task5">Task5</A> Drawing a circuit with parameters
+ <LI> <A HREF="#Task6">Task6</A> Making a new "fundamental" object
+ <LI> <A HREF="#Task7">Task7</A> A schematic with symbol-less schematics
+ in the hierarchy
+ <LI> <A HREF="#Task8">Task8</A> Identifying electrical connections
+ <LI> <A HREF="#Task9">Task9</A> A symbol on its own schematic
+ <LI> <A HREF="#Task10">Task10</A> "sim" format and flattened
+ <LI> <A HREF="#Task11">Task11</A> "pcb" type netlists
+ <LI> <A HREF="#Task12">Task12</A> Multiple-gate chips in PCB netlists
+ <LI> <A HREF="#Task13">Task13</A> Modifying netlist formats
+ <LI> <A HREF="#Task14">Task14</A> Example: A bridge rectifier for a PCB
+</UL>
+
+
+<H2><A NAME="Start">Getting started</A></H2>
+This tutorial is provided to help users get up and running with the
+schematic capture capabilities of xcircuit.
+In order to get the most out of this page, you should have already
+downloaded, compiled, and installed the xcircuit program and its libraries,
+and xcircuit should be compiled with schematic capture capability (on by
+default; see the Imakefile for details). <P>
+
+<BLOCKQUOTE>
+<font color=red> IMPORTANT NOTICE: </font>
+<font color=green>
+It is necessary for you to have the new (version 2.3.3) distribution of xcircuit
+compiled <I>and installed</I> to get the correct behavior in the tutorial.
+In particular, the PostScript prolog has changed and if the old one is
+prepended to the new xcircuit files, the files will not be printable or
+viewable from a PostScript previewer. <P>
+
+There are additional differences between versions 2.1(beta) to version 2.3.3,
+mainly in the way symbols and schematics are associated with each other.
+The new methods are incorporated into this tutorial. Version 2.3.3 also
+corrects some errors in netlist generation, and is generally more stable.
+Versions before 2.3.3 will <I>not</I> produce <B>pcb</B>-style netlists
+as featured in this tutorial.<P>
+</font>
+</BLOCKQUOTE>
+
+<H2><A NAME="Task1">Task 1: Acquaint yourself with XCircuit</A></H2>
+If you are not yet familiar with the basic features of xcircuit, I recommend
+you to peruse the basic <A HREF=tutorial.html>XCircuit tutorial</A> for
+essential features of the program which will not be reiterated here.
+
+<H2><A NAME="Task2">Task 2: Run the program</A></H2>
+XCircuit now starts in schematic capture mode unless explicitly compiled
+without the feature. So just start xcircuit as you normally would:
+<BLOCKQUOTE>
+ <B>xcircuit</B>
+</BLOCKQUOTE>
+
+Xcircuit in schematic capture mode will start with a window which
+has a menu button for ``Netlist'' and two
+buttons at the bottom left-hand corner, one of which is blank and the other
+which is colored red and labeled ``Schematic.''
+The bottom buttons can be interpreted to mean that the current page is a
+schematic drawing, and this schematic has no corresponding symbol (more
+about this later). <P>
+
+There is a menu button, "Options->Disable (Enable) XSchema", which toggles
+the visibility of the ``Netlist'' menu button and the two status buttons at the
+bottom. In case you're working on a drawing which has nothing to do with
+schematic capture, you might prefer to have the option disabled. This
+does not affect the program in any way other than to make the buttons
+disappear so that xcircuit looks like the original version without the
+schematic capture features. <P>
+
+<H2><A NAME="Task3">Task 3: Drawing a circuit for SPICE simulation</A></H2>
+This task outlines some of the features of xcircuit used to make a simple
+circuit. In this and the following tasks, you will create an analog
+circuit, an operational amplifier, and make it into a symbol to be used
+as a subcircuit of a more general circuit (an integrator). First you will
+draw a circuit using simple (default) devices, and later I will show how to
+pass parameters to devices, such as width and length of individual MOSFETs.
+
+<OL>
+ <LI> Drag the elements which you need from the built-in library to
+ (a clean) Page 1. Namely, the nMOS, pMOS, Vdd, and GND symbols. <P>
+ <LI> Duplicate elements (copy (<B>c</B>), flip (<B>f</B>)) as necessary
+ and connect with lines to produce the following transconductance
+ amplifier schematic: <BR><BR>
+
+ <CENTER><IMG SRC=giffiles/amp1.gif><BR>
+ A transconductance amplifier, schematic drawing. </CENTER> <BR>
+
+ <LI> Either drag the "dot" object from the library page or use the
+ period key ("<B>.</B>") to place connections between the wires
+ at junctions. This is not strictly necessary, as xcircuit will
+ deduce connectivity from the T-connections of wires, not from
+ the "dot" symbols; it is merely a matter of preference depending
+ on the style with which you like to draw circuits. In the case
+ of wires crossing at a junction, the dot <I>is</I> necessary
+ since crossing wires generally do not indicate a connection in
+ schematic diagrams. You may also use a "jumper" object to
+ indicate that two crossing wires do not connect although this,
+ like the use of dots at T-junctions, is a matter of style and
+ personal preference. <P>
+
+ <LI> Add "circle" connections at the inputs and outputs. Once again,
+ this is a matter of style; the actual inputs and outputs from
+ the netlist's point of view will be indicated by pin labels
+ (see next step). The resulting diagram looks like the following:
+ <BR><BR>
+
+ <CENTER><IMG SRC=giffiles/amp2.gif><BR>
+ Same transconductance amplifier, a little fancier style. </CENTER> <BR>
+
+ <LI> Because the amplifier will be a SPICE subcircuit, it is necessary
+ to tell the netlist generator where the input and output ports
+ are. For this, you need <I>pin labels</I>. Pin labels differ
+ from ordinary labels in several ways: By default, they are
+ colored red (though this can be changed), and are placed with a
+ slight offset from their marked positions, so the position
+ marker can be used as a tag to indicate what wire the label is
+ attached to. Additionally, the marked position is visible on
+ the drawing, since its exact location with respect to wires is
+ critical to the resultant netlist. Finally, pin labels only
+ appear on the top level of the hierarchy. <P>
+
+ To generate the pin label, type key macro (capital) <B>T</B>, or
+ choose menu item "Netlist->Make Pin". Set justification as
+ desired and place the "x" marking the pin position over the
+ "o" of the circle objects, or on top of a wire. The pins in
+ this amplifier will be labeled "in.m", "in.p", "out", and "bias".
+ <BR><BR>
+
+
+ <CENTER><IMG SRC=giffiles/amp3.gif><BR>
+ Transconductance amplifier with I/O pins marked. </CENTER> <BR>
+
+ <LI> Now it's time to turn this schematic into a symbol, that is,
+ to make a symbol which will be used on the top-level drawing
+ to designate the transconductance amplifier. What we really
+ want to do is to use the symbol "wramp" (stands for "wide
+ range (transconductance) amplifier", which is what this is),
+ from library "avlsi.lps" (part of the distribution), as the
+ symbol for the schematic you just drew. Go to the built-in
+ library, then edit the "wramp" symbol from there by placing
+ the cursor over the "wramp" symbol and typing key macro
+ "<B>&gt;</B>". The result looks like this: <BR><BR>
+
+ <CENTER><IMG SRC=giffiles/wramp1.gif><BR>
+ Transconductance amplifier symbol from the "avlsi.lps" library.
+ </CENTER><BR>
+
+ Note that in this picture, the bottom left-hand corner of
+ the screen says "Symbol" in the button that was, on Page 1, blank,
+ and the button that used to say "Schematic" is now blank. This
+ means that this object is a symbol, not a schematic, and it currently
+ does not have a schematic attached to it. <P>
+
+ Also note that the pin labels marking input/output positions for
+ <font color=red>in.m</font>,
+ <font color=red>in.p</font>,
+ <font color=red>out</font>, and
+ <font color=red>bias</font>
+ are invisible on the library page, but become visible when
+ editing the object, that is, when the library object has been placed
+ on the top-level page. When the library object is used in a circuit,
+ the pin labels are again invisible. This way, the drawing doesn't
+ get cluttered up with nested labels. <P>
+
+ <LI> The procedure to attach the schematic to this symbol is quite
+ simple. Choose menu item <I>Netlist->Associate With Schematic</I>.
+ Immediately, you will be taken to the page directory, with the
+ message "Click on schematic page to associate." With the first
+ mouse button, click on Page 1 (assuming that's the amplifier
+ schematic). Instead of the usual behavior on the page directory
+ (go immediately to the page under the cursor), you will be
+ returned back to the amplifier symbol edit page.
+
+ Now both buttons appear at the same time, one named "Symbol" and
+ one named "Schematic". The one named "Schematic" is colored white,
+ indicated that the current page is the symbol, and that a
+ schematic exists which is the circuit represented by this symbol.
+ Press either button, and you will go to the schematic drawing
+ (back to Page 1). Press either button again, and you will return
+ to the symbol. The library object "wramp" is now a symbol for
+ the schematic of Page 1. <P>
+
+ A symbol can be <I>disassociated</I> from its schematic, and
+ vice versa, by choosing menu item
+ <I>"Netlist->Disassociate Symbol"</I> or
+ <I>"Netlist->Disassociate Schematic"</I>.
+ This menu option will appear only for the appropriate case.
+ Choose this action from the menu now. Note that the white button
+ in the lower left-hand corner goes back to being blank. The
+ library object "wramp" is no longer a symbol for the schematic
+ of Page 1. <P>
+
+ Association can be initiated both ways. The alternate method is
+ as follows: Go back to Page 1 (the amplifier schematic).
+ Choose menu item <I>"Netlist->Associate with Symbol"</I> (note
+ that this is the same button that used to be "Disassociate").
+ You are transported to the library directory, with the instructions
+ in the message window to "click on the library page, then the
+ object to associate". <P>
+
+ Click on the first library page (the one containing the wide-range
+ amplifier symbol "wramp"). Now click on the symbol "wramp".
+ Now, you will be returned to the original schematic page, and
+ once again, the buttons in the window's lower-left-hand corner
+ are red and white, indicating that you are on the schematic page
+ (red) but can move to the symbol page (white). Alternately to
+ clicking buttons to move between pages, you can choose menu
+ item <I>"Netlist->Go To Symbol"</I> (or "Go To Schematic",
+ as appropriate), or use the "<TT>/</TT>" key macro. Note that
+ the key macro only works if an association exists (i.e., it will
+ never create a new schematic or symbol, as described in the next
+ paragraph, although this was formerly the behavior in xcircuit
+ version 2.1(beta)). <P>
+
+ The schematic and symbol both do not need to exist before association.
+ You can associate an existing schematic to a non-existing symbol
+ or associate an existing symbol to a non-existing schematic by using
+ the <I>"Netlist->Make Matching Symbol"</I> or
+ <I>"Netlist->Make Matching Schematic"</I> selection, respectively.
+ If you are editing a symbol, then you will be transported to the first
+ blank top-level page. If you are editing a schematic (top-level
+ page), a new User Library symbol will be generated and you will
+ be transported there. In either case, the new object will take
+ the name of its associated object, and all pin labels from the
+ original will be copied to the new, so that's one less step you
+ have to do yourself.
+
+ <LI> Now it's time to use the symbol as a subcircuit in a top-level
+ circuit schematic. Go to Page 2, which will be the top-level
+ circuit. Draw an integrator as shown below: <BR><BR>
+
+ <CENTER><IMG SRC=giffiles/integrate1.gif><BR>
+ Simple continuous-time integrator using a transconductance
+ amplifier. </CENTER> <BR>
+
+ Note that there is a "regular" text label titling the page;
+ this is made in the usual fashion, using key macro (lowercase)
+ "<B>t</B>", and therefore is not a pin label. <P>
+
+ There is a one-to-one correspondence between the
+ pin labels on the schematic and the pin labels on the
+ corresponding symbol. This is important to make sure that
+ the wires attaching to the symbol on the top-level schematic
+ go to the correct destinations in the amplifier's schematic.
+ It is not an error to have unassigned pins: A pin inside
+ the schematic may be labeling a net for reference purposes
+ only. A pin on the symbol which is not used in the
+ schematic is much less likely, but may, for instance, be
+ representing an unconnected pin on an IC. <P>
+
+ <LI> Save this page. Call it "integrator". At this point, several
+ points should be noted:
+ <UL>
+ <LI> Two pages were saved instead of one. XCircuit followed
+ the path of the symbol to its schematic, and saved the
+ schematic for the amplifier. This becomes a separate
+ page in the PostScript output. Running "ghostview" or
+ your favorite PostScript previewer shows the two-page
+ output.
+ <LI> Page 1, the page containing the schematic of the amplifier,
+ regardless of what you called it in the first place (if
+ anything), was renamed "wramp".
+ By convention, the schematic and symbol have the same
+ name, although this does not have to be the case.
+ <LI> All the pages got saved as "Full Page" and not as
+ "Encapsulated". For multi-page files, "Encapsulated"
+ PostScript is not meaningful. Options for positioning
+ the schematic on the page will probably appear in the
+ future.
+ </UL> <P>
+
+ <LI> Go to the top-level schematic page (Page 2, or "integrator").
+ From the menu, select "Netlist->Write Spice". The message
+ label will read "spice netlist saved as integrator.spc".
+ You can view the file <A HREF=netfiles/integrator.spc>integrator.spc</A>
+ here. Note in particular that xcircuit has generated a
+ hierarchical netlist, using the amplifier "wramp" as a
+ subcircuit. The subcircuit contains parameters which are
+ its pin labels; the <I>call</I> to the subcircuit has parameters
+ which are the pin labels given on the top level page. <P>
+</OL>
+
+For reference, the resulting PostScript file can be found here:
+<A HREF=psfiles/integrator.ps>integrator.ps</A><P>
+
+SPICE simulation: Xcircuit provides only the netlist. It can also
+provide voltage sources and so forth, which will be described in the
+next task. However, it has no concept of "models" and provides no
+commands for running analyses. In the example above, the spice file
+will need to be edited to insert models for devices "nmos" and "pmos",
+Declare a voltage source and value for Vdd, and add commands
+for DC operating point determination and transient analysis. <P>
+
+<H2><A NAME="Task4">Task 4: Introduction to parameters</A></H2>
+
+One thing you may have noticed about the previous circuit is that you
+did not, in fact <I>could not</I> specify a value for the capacitor,
+which defaulted in the spice netlist to 1.0pF. And there was no way
+to specify a width and length of each nMOS and pMOS device. You might
+have guessed: There does exist a way to pass values such as capacitance
+to the capacitor object, and width and length to the MOS device objects. <P>
+
+Here's a brief description of how parameters work:<BR>
+Each object contains a list of its parameters, NULL if there are no
+parameters. Each item in this list declares what is the <I>type</I> of
+parameter (so far, "string" or "integer", with only string types fully
+supported at present), a default value for the parameter, and another
+list which points to all the locations where the parameter gets
+substituted. <P>
+
+It is important to keep in mind the distinction between an <I>object</I>
+and its <I>instantiations</I>. If you are on Page 1 looking at an object
+you just dragged back from the library, you are looking at a single
+<I>instance</I> of that object. If you use the <B>&gt;</B> key to
+edit the object, then you are editing the object itself. Normally,
+there is no particular need to make the distinction. However, when
+using parameters, the object itself will declare the default parameter,
+but each instance of the object may contain its own unique value for
+that parameter. <P>
+
+Xcircuit adopts a method for editing parameters in which either the
+default value or the instance value may be altered, and which one is
+altered depends on <I>what top-level page you came from</I>. The
+most obvious way to implement this is that if you edit an object from
+one of the library pages, you are assumed to be altering the default
+(the object on the library page always displays the default value of
+all its parameters). If, instead, you edit the object by getting
+there from a top-level page or another object, you are editing the
+<I>instance</I>, and changes you make to the parameters will only
+affect the value of that instance only. This should be made clear
+by the tutorial below.
+
+<OL>
+ <LI> Run xcircuit, which should automatically load "analoglib2.lps"
+ onto library page 2 (since xcircuit version 2.2.0. Otherwise,
+ load it from the subdirectory "examples" of the source
+ distribution).
+ <LI> Go to library page 2 (macro <B>L</B>, click on second page).
+ You will see a set of
+ replacement objects for the basic circuit structures "capacitor",
+ "resistor", "nmos", etc. The main difference between these and
+ the original objects is that they contain labels indicating
+ values. <BR><BR>
+ <CENTER><IMG SRC=giffiles/alib.gif><BR>
+ The parameterized analog component library. </CENTER> <BR>
+
+ <LI> Select, say, the "Resistor" object and drag it back to Page 1.
+ <LI> Copy the resistor so you have two resistors on Page 1.
+ <LI> Edit one of the resistors (<B>&gt;</B> key). You will note that,
+ in addition to pin labels, there are some other strings (called
+ "info labels") which will be described in detail later.
+ <LI> Edit the string which reads "1.0 k(Ohm)" (<B>e</B> key macro, or
+ menu selection <I>Edit->Edit</I>). As you move the
+ cursor around the string, look at the message window. You will
+ note that in addition to the usual ASCII characters and string
+ commands such as font changes, half-space, etc., there is now
+ an additional embedded command label "Parameter(<I>n</I>)&lt;
+ <I>text</I>&gt;", where <I>n</I> is the parameter number, and
+ <I>text</I> is a substring (may be empty) which is the parameter
+ text. For the resistor, "1.0" is a parameter
+ describing the value, and "k" is a parameter for the metric
+ scale prefix. Unlike all other parts of the string, you cannot
+ delete the parameter delimiter marks (parameters must be
+ removed from a string with the "Unparameterize" function).
+ <LI> Replace the substring "1.0" with "20" and replace "k" by "M"
+ or whatever your favorite resistor value is. Be sure that you
+ are inside the parameter delimiters when you make the change,
+ or you will get unexpected results.
+ <LI> Pop back up to the originating page (<B>&lt;</B> key). You will
+ see that only the resistor which you edited has its values
+ changed; the other one still has the original (default) values
+ of "1.0" and "k".
+ <LI> Go to the library again (<B>L</B> key, then click on the second
+ page), and from there, edit the
+ resistor (<B>&gt;</B> key). From here, change the value to, say,
+ "2.0 k". Note that now you are changing the <I>default</I> value,
+ not an instance value.
+ <LI> Return to the library page (<B>&lt;</B> key). Now the library
+ object shows the new resistance value, indicating that the
+ default value was altered. From here, go back to the
+ originating page (third mouse button). Now you see that the
+ resistor you altered retained its unique value, but the
+ resistor you didn't alter changed with the default. <BR>
+ The rule here is that each instance of an object accepts the
+ default unless is specifically declares its own unique value.
+</OL>
+
+<BLOCKQUOTE>
+<font color=red> How does this work?</font><BR>
+<font color=green>
+There are already traces of parameterization at work in xcircuit.
+Each instance of an object has its own unique value for position,
+rotation, color, and scale. These can be thought of as parameters.
+Whenever xcircuit draws an object instance, it uses the unique
+position, rotation, and scale to alter the 2-D transformation
+matrix, then recursively calls the object drawing routine on the
+object itself. When parameters are present, xcircuit first looks
+up any unique values which the object instance might declare, and
+substitutes these values into the object itself. If the instance
+does not declare a particular parameter, then xcircuit substitutes
+the default value. Then xcircuit recursively calls the drawing
+routine on the object.
+</font>
+</BLOCKQUOTE>
+
+<H2><A NAME="Task5">Task 5: Drawing a circuit with parameters</A></H2>
+
+<OL>
+ <LI> Run xcircuit, as in the last example.
+
+ <LI> Using the parameterized devices from the <TT>analoglib2</TT>
+ library, create the simple lowpass R-C filter shown below:<BR><BR>
+
+ <CENTER><IMG SRC=giffiles/filter1.gif><BR>
+ Simple R-C filter. </CENTER> <BR>
+
+ <LI> Now, using what you learned from Task 4, alter the individual
+ parameter values so that they look like the following:<BR><BR>
+
+ <CENTER><IMG SRC=giffiles/filter2.gif><BR>
+ Simple R-C filter, with new parameter values. </CENTER> <BR>
+
+ <LI> Choose menu item "File->Write XCircuit PS", and rename the top
+ page something obvious like "filter". Save it if you like.
+
+ <LI> Choose menu item "Netlist->Write Spice".
+ You can view the resulting SPICE file
+ <A HREF=netfiles/filter.spc>filter.spc</A> here.
+</OL> <P>
+
+For reference, the finished PostScript file can be found here:
+<A HREF=psfiles/filter.ps>filter.ps</A><P>
+
+Although there are no MOS devices in this file, as in the previous task,
+the SPICE deck will need to be completed with commands for performing
+transient analysis and so forth, unless the file is to be used for
+netlist comparison purposes only. <P>
+
+Spice output is determined solely by the ``info labels'' (which are green
+by default, and only show up when the object they are in is on the top-level
+page), in particular, those that begin with the token ``spice:''. There
+are several ``escape sequences'' which have special meaning in this info
+label. They begin with the ``%'' character and are summarized below.
+Also, string parameters can be inserted directly into the info label, a
+process which is described directly after.
+
+<H3>Info label escape sequences:</H3>
+<BLOCKQUOTE>
+<DL>
+ <DT> <TT>%%</TT>
+ <DD> Inserts the character `%' into the netlist output line.
+ <DT> <TT>?</TT>
+ <DD> When a single question mark is parameterized as its
+ own parameter, it is interpreted in the following way: If the
+ parser encounters a non-default value (i.e., a number), it uses
+ that number as the index. Otherwise, it generates a unique sequence
+ number for the object instance. This method is preferred over the
+ "%i" escape, as it allows each part number to be individually
+ assigned, if desired.
+ <DT> <I>(parameter)</I>
+ <DD> Any parameter may be inserted into the info
+ label, and therefore takes the value of either the instance string,
+ if defined, or else takes the value of the default string. The
+ question mark (<TT>?</TT>) is a special case (see above).
+ <DT> <TT>%n</TT>
+ <DD> Insert the name of the object.
+ <DT> <TT>%p"name"</TT>
+ <DD> Insert the name of a pin. The pin name must
+ be quoted exactly as is the label which defines the pin. The quotes
+ may be omitted if the name contains no white space and is followed
+ by white space (if in doubt, just use the quotes).
+ <DT> <TT>%r</TT>
+ <DD> Insert a carriage-return into the netlist output line.
+ Carriage-returns can also be inserted directly into the output
+ by using Alt-Enter or menu option
+ <I>"Text->Insert->Carriage Return"</I>.
+ <DT> <TT>%t</TT>
+ <DD> Insert a tab into the netlist output line.
+</DL>
+</BLOCKQUOTE>
+
+Obsoleted sequences (maintained for backward compatibility):
+<BLOCKQUOTE>
+<DL>
+ <DT> <TT>%i</TT>
+ <DD> Insert a number, in sequence, incrementing each time
+ a new object instance is visited during netlist compilation.
+ <DT> <TT>%v"name"</TT>
+ <DD> Insert the name of a parameter. The parameter
+ name must be quoted exactly as the label or label segement which
+ defines the <I>default</I> parameter. Alternately, a parameter
+ can be inserted directly into the string during text edit mode
+ using the "Alt-p" key. This is perhaps more intuitive, because the
+ value shown is either the default or substituted value, as appropriate,
+ rather than always listing the default value. The library file
+ <A HREF=../xcircuit/psfiles/analoglib1.lps>analoglib1.lps</A>,
+ which is available either
+ at this link or in the source distribution under the "examples"
+ directory, makes use of the "%v" method. <TT>analoglib2.lps</TT>
+ makes use of the direct-insertion method.
+</DL>
+</BLOCKQUOTE>
+
+<font color=red> <I>Example:</I> </font>
+<font color=green>
+<BLOCKQUOTE><PRE><TT>
+sim:n %pG %pS %pD
+</TT></PRE></BLOCKQUOTE>
+</font>
+<font color=red>
+<I>or:</I>
+</font>
+<font color=green>
+<BLOCKQUOTE><PRE><TT>
+spice:M%i %pD %pG %pS GND nmos
+</TT></PRE></BLOCKQUOTE>
+</font>
+The top example produces an nMOS transistor line in a "sim" netlist, where
+the actual net names inserted into the output file are those which correspond
+to the gate, source, and drain pins, respectively. The bottom example does
+the same thing for a SPICE netlist file, assuming that the SPICE model will
+be called "nmos" (this can be parameterized if more than one model is
+required; see paragraph below), and the "%i" sequence ensures that each
+transistor gets a different label: M1, M2, M3, and so forth.
+
+<H3>Inserting string parameters directly into a label:</H3>
+
+While editing a label, use the key sequence ``Alt-p'' to insert a parameter.
+If the object has only one parameter, it will be inserted automatically. If
+the object has two or more parameters, xcircuit will prompt for the one to
+use (listed by number). Once the copy of the parameter string is in the
+label, there is effectively no difference between the copies: making changes
+to one automatically changes the other (although the change may not show up
+immediately). In general, this method is clearer than using ``%v'', since
+the subsituted string appears directly in the info label rather than
+referring back to the default string, so ``what you see is what you get.''<P>
+
+<OL>
+ <LI> From the default analog library (library page 1), grab the
+ (unparameterized) object "nmos" and drag
+ it back to page 1 (or whatever page you're working on).
+ <LI> Edit the "nmos" object (key "<B>&gt;</B>").
+ <LI> Use the second mouse button to draw a selection box around the
+ word ``nmos'' in the first information (green) label.
+ <LI> The word ``nmos'' will be highlighted; in this selection
+ mechanism, only that substring of the label has been selected.
+ <LI> Choose menu option <I>Text->Parameterize</I>.
+ <LI> Now edit the info label. When you get to the word ``nmos'',
+ you will notice, as printed in the message field at the bottom
+ of the xcircuit window, that it is bounded by invisible marker
+ characters ``Parameter(1)&lt;'' and ``&gt;''.
+ At this point, the SPICE model is a parameter of the object,
+ and its default value is ``nmos''.
+ <LI> Because you entered the object from Page 1 rather than the Library,
+ what you are editing is the string <I>instance</I>, not the
+ string <I>default</I>. Change the parameter substring to read
+ <B>nmos1</B>, indicating an alternate MOS model called ``nmos1''
+ (which must be added to the output SPICE file before simulation!).
+ Make <I>sure</I> that the character "1" comes <I>before</I> the
+ "&gt;" parameter end marker; otherwise, it is not part of the
+ parameter, and instead becomes part of the default value.
+ <LI> Finish editing and return to the calling page (key "<B>&lt;</B>").
+ <LI> Grab another object ``nmos'' from the library and place it on
+ Page 1. Edit it (key "<B>&gt;</B>"). Note that the parameter
+ string contains the default value ``nmos''.
+ <LI> Pop back out to Page 1 and run ``Netlist->Write spice''. The
+ resulting file is simple and can be included below. <BR><BR>
+
+<font color=green>
+<TT>
+Spice circuit Page 1<BR><BR>
+M1 net.1 net.2 net.3 GND nmos<BR>
+M2 net.4 net.5 net.6 GND nmos1<BR>
+.end
+</TT>
+</font>
+
+</OL>
+
+Information labels with embedded parameters are used in the library file
+<A HREF=../xcircuit/psfiles/analoglib2.lps>analoglib2.lps</A>.
+Note that in most objects
+("Capacitor", "Resistor"), the parameterized value is in a string and
+therefore shows up as part of the circuit diagram. However, others
+("PNP", "NPN", where the SPICE model name is parameterized) have the
+parameter only in an information label, where it does not show up on
+the top-level page. Yet others ("nMOS", "pMOS") contain both (width
+and length values appear on the top-level page and are copied into
+the information label, but the name of the SPICE model only appears
+in the information label). <P>
+
+As an addendum to this task, run xcircuit and load the file and generate
+a spice circuit which uses two nMOS devices from the "analoglib2"
+library page, each instance having a different SPICE model. In
+addition, make the widths of the two devices different.
+
+Note that when more than one string contain the same parameter, editing
+one of the values will not be immediately reflected on the screen as
+a change in the other(s). Popping back to the level above the object
+and returning to edit the object will show all the proper substitutions.
+
+<H2><A NAME="Task6">Task 6: Making a new "fundamental" object</A></H2>
+
+All netlists generate output when they reach a ``fundamental'' object,
+which is defined as an object containing one or more informational
+labels. <P>
+
+Fundamental objects require several features:
+<UL>
+ <LI> Fundamental objects are expected to be symbols. As in all
+ symbols, lines are interpreted as part of the symbol drawing,
+ not as nets. The only ``electrically relevant'' elements on
+ a symbol are the pins.
+ <LI> Fundamental objects contain ``info labels'' which tell the
+ netlist compiler what to do with the information passed to
+ the object via the pins. Presently, there are three
+ different "styles" of netlist, named after the primary
+ format which uses that kind of netlist:
+ <UL>
+ <LI> Hierarchical, or ``spice'' netlists
+ <LI> Flattened, or ``sim'' netlists
+ <LI> Network, or ``pcb'' netlists
+ </UL>
+ Information on each of these netlists is widely available
+ and distributed with layout and simulation software
+ packages. In a nutshell, however:
+ <UL>
+ <LI> Hierarchical and Flattened netlists both list by
+ <B>element</B>, with each line of the file consisting
+ of an element name followed by a list of network names
+ corresponding to each of the element's pins.
+ <font color=red>
+ <BR><I>example:</I>
+ </font>
+ <font color=green>
+ <TT>Q1 net2 D0 gnd npn1</TT><BR>
+ </font>
+ indicates that NPN transistor ``Q1'' has a collector
+ connection to "net2", base connection to "D0", and
+ an emitter connection to "gnd" (presumably a global
+ network).
+ <LI> A Network netlist lists by <B>network</B>, with each
+ line consisting of a network name followed by a list
+ of pins in the circuit to which the network connects.
+ The element names are part of the pin names, with
+ the circuit hierarchy encoded in the element name by
+ slashes (`/'), much like a file system directory listing.
+ <font color=red>
+ <BR><I>example:</I>
+ </font>
+ <font color=green>
+ <TT> Net3 control/74LS00_1#1-2 display/LED#2-5</TT><BR>
+ </font>
+ indicates that the network named "Net3" connects
+ pin number 2 in the first 74LS00 chip in subcircuit
+ "control" to pin number 5 of the second LED in subcircuit
+ "display".
+ </UL>
+ <LI> A result of being an object and having an info-label is that the
+ "Symbol" button is green, indicating a "fundamental" element.
+</UL>
+
+There is another type of symbol called a "trivial" symbol. This cannot be
+designated from xcircuit. It is only a optimization which tells xcircuit
+that an object does not produce output and is not a sub-schematic, and
+therefore can be ignored except for the presence of pins. This prevents
+the xcircuit netlist generator from wasting time looking for subschematics
+or informational labels. Except for saving compute cycles, there is no
+other difference between "trivial" and normal symbols. "Trivial" symbols
+are declared in the PostScript file with a "% trivial" line.
+
+<H2><A NAME="Task7">
+Task 7: A schematic with symbol-less schematics in the hierarchy</A></H2>
+
+A "subschematic" is a special kind of symbol which, unlike other symbols,
+contains electrically relevant objects. Really, it's just a grouping of
+electrical objects which bypasses the trouble of making a symbol to
+represent the grouping. This can be useful, for instance, in drawing
+one-half of a differential amplifier and repeating the schematic, flipped
+horizontally. <P>
+
+XCircuit is extremely sophisticated in its ability to deal with subschematics.
+It will determine how the subschematic is used, searching for input and
+output "ports" that link the subschematic to the circuit on the level above. <P>
+
+The file in the xcircuit source "examples" directory
+<TT>diffamp_test.ps</TT> is an example of such a file with subschematics.
+It represents an obvious situation in which a subschematic is useful: This is
+a differential amplifier, so a large portion of the amplifer is duplicated on
+the positive and negative sides. <P>
+
+<CENTER><IMG SRC=giffiles/halfamp.gif><BR><BR>
+Differential amplifier sub-schematic: One half of an amplifier.
+</CENTER> <BR><BR>
+
+<CENTER><IMG SRC=giffiles/fullamp_anno.gif><BR><BR>
+Differential amplifier complete schematic
+</CENTER> <BR><BR>
+
+The second of the two figures above shows how the half-amplifer subschematic
+connects into the differential amplifier schematic. Note that no pins (pin
+labels) have been explicitly called out in the subschematic. All connections
+are determined from context. Different contexts which xcircuit finds and
+interprets are marked with red circles on the differential schematic
+(the <A HREF=giffiles/fullamp.gif>unannotated version</A> of the schematic can be
+found here). The annotations, called out by number, are as follows: <P>
+
+<font color=red>
+<OL>
+ <LI> Port makes connection to a wire (polygon)
+ <LI> Port makes connection on one side but not on the other
+ <LI> Port makes connection to a label (pin)
+ <LI> Port makes connection to a pin of another object
+ <LI> Two ports in the subschematic get merged into one network
+ <LI> (not shown) Port connects to port on another subschematic
+</OL>
+</font>
+
+On any given schematic page, port connections between symbols, between
+subschematics, and from subschematics to symbols and vice versa, may be
+from any layer in the circuit hierarchy to any other layer in the circuit
+hierarchy. <P>
+
+<H2><A NAME="Task8">Task 8: Identifying electrical connections</A></H2>
+
+XCircuit has the ability to highlight all wires belonging to a single
+electrical network. This is a very useful feature for debugging
+schematics, finding shorts and open-circuits. The command for
+identifying network connectivity is menu selection
+<I>Netlist->Highlight Connectivity</I> and the default key binding
+for the same function is <B>Alt-w</B>. The key macro operates immediately
+on either selected elements or whatever element is nearest the cursor,
+while the menu item either operates immediately on any selected element
+or prompts for a mouse click on an element to show connectivity for.
+If multiple elements are selected prior to choosing the connectivity
+function, connectivity will be searched for the first item encountered
+in the select list which is part of a valid network. <P>
+
+As an example, load the file <TT>diffamp_test</TT> used previously in
+Task 7 (<TT>examples/diffamp_test.ps</TT> in the XCircuit source
+distribution). Place the pointer over any wire and type <B>Alt-w</B>.
+The whole network will be ``highlighted'' in green. Note some features
+of connectivity searches:
+<UL>
+ <LI> Global networks such as ground have all parts of the network
+ highlighted, even if they are physically separated on the
+ drawing.
+ <LI> Network selection is a different from element selection: It is
+ recursive. In the schematic drawing for "ampl_test" (Page 2),
+ networks inside the "half_amp" sub-schematic can be selected for
+ connectivity search, even though for purposes of normal move,
+ copy, etc., the "half_amp" can only be selected as an entire object.
+ <LI> Pins can be selected as well as wires, and pins belonging to a
+ network will be highlighted along with the rest of the network.
+ <LI> The name of the network is printed in the message window at the
+ bottom of the xcircuit screen. Hierarchy is relevant: A network
+ may have a different name depending on whether it is selected on
+ the top-level schematic, or somewhere down in the schematic
+ hierarchy. The network name displayed is that name belonging to
+ the network at the <I>highest</I> level of the hierarchy.
+ <LI> Additional networks can be highlighted without erasing the original.
+ To erase one network before starting another, click the right
+ mouse button once ("Cancel" operation).
+</UL>
+
+Currently, there is no method to detect and return a network name for
+pin positions connecting two objects (that is, networks which do not
+have a polygon or label explicitly attached to them in the schematic
+drawing). <P>
+
+<I>Note:</I> Network connectivity searches only work as described above
+in XCircuit version 2.3.5 rev. 1 and later. <P>
+
+<H2><A NAME="Task9">Task 9: A symbol on its own schematic</A></H2>
+
+File example "<TT>examples/logic8.ps</TT>" in the source distribution has
+an example of a symbol on its own schematic. Run xcircuit on this example
+file, and go to page 2, the schematic for the 2-input NAND gate. At the
+bottom of the schematic is a picture of the "NAND" symbol. Note that
+you can "push" ("&gt;" key) into the symbol picture, and then cross over
+("/" key) to the schematic, returning to where you started in a circular
+manner. You can do this all day until you run out of memory, so it is
+not recommended. Fortunately, when xcircuit generates the circuit netlist,
+it is not fooled into this recursive path. Instead, it detects the
+presence of the recursion and will not treat the symbol picture as part
+of the network. You can verify this by generating a SPICE netlist for
+circuit "logic8" and reading the resulting file "<TT>logic.spc</TT>":
+
+<FONT color=green>
+<BLOCKQUOTE>
+<PRE>
+*SPICE circuit "logic" from XCircuit v2.30
+
+.GLOBAL Vdd
+.GLOBAL GND
+
+.subckt invert Out In
+M1 Out In Vdd Vdd pmos
+M2 Out In GND GND nmos
+.ends
+
+.subckt nand Out In.1 In.2
+M1 Out In.1 Vdd Vdd pmos
+M2 Out In.1 ext13 GND nmos
+M3 ext13 In.2 GND GND nmos
+M4 Out In.2 Vdd Vdd pmos
+.ends
+
+X1 int1 Pin.1 invert
+X2 Pin.4 int1 Pin.2 nand
+X3 Pin.5 Pin.2 Pin.3 nand
+.end
+</PRE>
+</BLOCKQUOTE>
+</FONT>
+
+As you can see, the circuit has been created as intended, and the symbols
+marked on their own schematics do not present a problem. <P>
+
+<I>Caveat:</I> It is possible to do more subtle forms of recursion. For
+instance, in the "<TT>logic8</TT>" circuit, redraw the NAND2 schematic so
+that the output goes through a buffer made of two inverters. This is
+perfectly reasonable, by itself. Now, go to the inverter schematic, and
+in place of the nMOS + pMOS stack, put a NAND2 gate with its two inputs
+tied together between the In and Out pins. This is also perfectly reasonable,
+by itself. However, the two changes taken together try to define the
+NAND2 and inverter in terms of each other, which is recursive. Versions
+of xcircuit before 2.3.5 rev. 1 will simply crash. Later versions will
+detect the error as a suspiciously deep hierarchy, and halt the netlist
+process before the processor hits a stack limit. <P>
+
+<H2><A NAME="Task10">Task 10: "sim" format and flattened netlists</A></H2>
+
+"sim" netlists are normally associated with digital VLSI circuits, but they
+also can be useful for netlist comparisons of digital, analog, and mixed-signal
+VLSI circuits. The standard "sim" format defines device types for nFET
+(enhancement and depletion) and pFET transistors, resistors (explicitly
+defined and lumped), and capacitors. However, the format has variously
+been extended to cover other devices such as bipolar transistors, and any
+variation of any component, provided it gets a unique letter assigned for
+the device and is meaningful to whatever software uses the format downstream. <P>
+
+The main difference between "sim" and "SPICE" netlists is that SPICE allows
+hierarchical descriptions containing subcircuits, whereas "sim" is by
+definition a "flattened" version of a circuit. There is very little that
+is necessary to say here, other than to note the ability of XCircuit to
+generate flattened circuit netlists. XCircuit also has an option to
+generate flattened SPICE. Note the difference in output, for instance,
+between the output "logic.spc" for circuit "logic8" (shown in Task 9, above),
+and the following output "logic.fspc" for the same circuit (generated by
+<I>Netlist->Write flattened SPICE</I>:
+
+<FONT color=green>
+<BLOCKQUOTE>
+<PRE>
+*SPICE (flattened) circuit "logic" from XCircuit v2.30
+
+M1 int1 Pin.1 Vdd Vdd pmos
+M2 int1 Pin.1 GND GND nmos
+M3 Pin.4 int1 Vdd Vdd pmos
+M4 Pin.4 int1 nand1/ext13 GND nmos
+M5 nand1/ext13 Pin.2 GND GND nmos
+M6 Pin.4 Pin.2 Vdd Vdd pmos
+M7 Pin.5 Pin.2 Vdd Vdd pmos
+M8 Pin.5 Pin.2 nand2/ext13 GND nmos
+M9 nand2/ext13 Pin.3 GND GND nmos
+M10 Pin.5 Pin.3 Vdd Vdd pmos
+</PRE>
+</BLOCKQUOTE>
+</FONT>
+
+<H2><A NAME="Task11">Task 11: "pcb" type netlists</A></H2>
+
+XCircuit is ostensibly an ideal platform for generating schematic netlists
+to compare against PCB (printed circuit board) designs. However, by
+default (at least for now), xcircuit libraries are set up primarily for
+VLSI layout work, so PCB netlisting requires a little extra work
+(because a lot of users want to use XCircuit for PCB netlisting, I'd like
+some help putting together libraries of IC's). <P>
+
+PCB netlists are fundamentally different from SPICE and sim netlists.
+Instead of listing by <I>device</I>, the file lists by <I>network</I>.
+The format is flattened, probably on the assumption that printed circuit
+boards have no hierarchy. By default, xcircuit will list device pins
+(network connections) by the name of the object followed by a dash and
+the name of the pin to which the network connects. Any hierarchy present
+in the xcircuit file is flattened by separating layers of the hierarchy
+with slashes, as is done for the "sim" format. <P>
+
+For PCB symbols, the name of the object is used as the part name in the
+netlist unless the object's symbol has a "pcb:" info label. In addition,
+the sequence number of the part is assigned automatically unless declared
+as a parameter in the "pcb:" info label. Typically, PCB components are
+labeled "U" for integrated circuits, "R" for resistors, "C" for capacitors,
+"J" for connectors and jumpers, and so forth. The sequence number for
+each part, if automatically generated, will be unique with respect to
+the name used for the part in the netlist output.<P>
+
+Consider Harry Eatons's ``<B>LED</B>'' design which comes as an example
+in the "PCB" distribution. The relevant files are also linked
+here:
+<OL>
+ <LI> <A HREF=pcb/LED>LED</A> (a PCB-format file)
+ <LI> <A HREF=pcb/LED.NET>LED.NET</A> (a PCB netlist file)
+</OL>
+
+Creating the schematic is very complicated, so I've done much of the
+work to get you started. Here is an xcircuit file which can be used to
+create a (partial, because it's unfinished) netlist to compare
+against the <B>LED</B> printed circuit layout and netlist.
+
+<UL>
+ <LI> <A HREF=pcb/FlareLED.ps>FlareLED.ps</A> (an XCircuit-format file)
+</UL>
+
+The important thing to notice about this file is the way components are
+handled. Each component has an object name (a generic name, such as
+"Resistor" or a part description, such as "LTC490"), text which may or
+may not duplicate the title, and text which parameterizes the object
+(such as resistor and capacitor values). In addition, each object is
+parameterized for use in PCB. This requires a string inside the object,
+an "info label" which is interpreted by the pcb netlist generator in
+xcircuit. Also inside the object, not visible from the top level
+drawing, are pin numbers for each object. For integrated circuits,
+there is text on each pin which is a <I>functional</I> pin description.
+This is not needed for the netlist, but makes it much easier to understand
+the schematic.
+
+<OL>
+ <LI> Start up xcircuit on the file <A HREF=pcb/FlareLED.ps>FlareLED.ps</A>.
+ <LI> Go to the User Library (the library containing all of the ICs and
+ connectors in the schematic).
+
+ <CENTER><IMG SRC=pcb/flare_objects.gif><BR>
+ Integrated circuits and components library for FlareLED.
+ </CENTER> <BR>
+
+ <LI> Edit ("<B>&gt;</B>" key) the PIC controller (object named
+ "PIC16C54".
+ <LI> You will note several things: This is an 18-pin chip, with pin
+ labels corresponding to the actual DIP package pin numbers.
+ Next to each pin number is the functional name for that pin.
+ On the top level page, only the functional names appear. On
+ the top level page, the device can be flipped, rotated, etc.,
+ without regard to the physical PCB layout. It is only necessary
+ that the networks of wires correctly connect the pins of
+ all the components.
+ <LI> The "PIC16C54" object, like all the integrated circuits in the
+ schematic, has an "info label" which reads <BR><BR>
+ <font color=green><BLOCKQUOTE><PRE><TT>
+ pcb:U?
+ </TT></PRE></BLOCKQUOTE></font>
+
+ <CENTER><IMG SRC=pcb/pic_object.gif><BR>
+ PIC 16C54 object, as edited from the library (default parameters)
+ </CENTER> <BR>
+
+ <LI> Edit this info label ("<B>e</B>" key). Note that the question
+ mark is a parameter.
+ <LI> Escape from the label edit (3rd mouse button) and return to the
+ main page ("<B>1</B>" key). Now edit the <I>same</I> object,
+ the PIC16C54, from this page ("<B>&gt;</B>" key).
+ <LI> Now you will see that the info label reads
+ <font color=green><BLOCKQUOTE><PRE><TT>
+ pcb:U5
+ </TT></PRE></BLOCKQUOTE></font>
+ This is an <I>instance</I> value. It corresponds to the location
+ and label for an IC on the PCB layout. <BR><BR>
+
+ <CENTER><IMG SRC=pcb/pic_instance.gif><BR>
+ PIC 16C54 instance, as edited from the top page (instanced parameters)
+ </CENTER> <BR>
+
+ <LI> End the label edit and return once again to the top level page.
+ From the menu, choose <I>Netlist->Write pcb</I>. The result
+ is a file named <TT>FlareLED.pcb</TT>. Compare this file to
+ the supplied netlist file named <TT>LED.NET</TT>. The XCircuit
+ schematic is not complete, but the parts that are correspond in
+ both netlist files.
+ <LI> <I>Challenge</I>: Finish this schematic and show that the two
+ netlists are the same (``Layout vs. Schematic'', or ``LVS'').
+ <LI> <I>Another Challenge</I>: Create an xcircuit library containing
+ the entire 7400 digital IC series and send it to me so I can
+ post it on this website.
+</OL>
+
+<H2><A NAME="Task12">Task 12: Multiple-gate chips in PCB netlists</A></H2>
+
+Pins can be parameterized beginning in version 2.5.2 (it is allowed in
+earlier versions but will cause invalid netlist output). Pins normally
+work differently than label strings when making substitutions during
+netlist generation; it is the network name which is substituted.
+However, PCB-type netlists write pin names directly to the output, and
+this is where parameterized pin names can be useful: For example, a
+``quad part'' like a 7400 quad NAND chip has four NAND gates which are
+identical except for their pin numbers on the package. Normally, a
+PCB netlist would declare these as four parts, say, ``U1-1'' through
+``U1-4''. By parameterizing all of the pin names, four instances can
+be made representing the four gates inside the 7400 chip, each having
+the correct pinout. <P>
+
+A method for saving the pinouts of gate subunits in chips was added
+to version 2.5.2 along with the meaningful method for generating PCB
+netlists from parameterized pin names. This method allows multiple
+instances of a single object to appear on the same library page.
+These copies should represent the object with different parameter
+values. The most common use of this method is to parameterize pins
+of a logic gate that is a subunit of a multiple-gate IC, and show
+each of the subunits on the library page, where they can be used to
+generate a PCB netlist. <P>
+
+Using XCircuit 2.5.2 or later, installed, start xcircuit and go to the
+fourth library page ``<B>Library: quadparts</B>''. You will see the
+following set of objects (partial view of the library):
+
+<CENTER><IMG SRC=giffiles/quadparts.gif><BR><BR>
+Partial view of the ``Quadparts'' library (from preliminary version).
+</CENTER> <BR><BR>
+
+Note that there are four copies of each named object. Each of the copies has
+the same name, but three of the names are ``shaded out'' in a gray color.
+The part with the name written in black is the original library part. It
+contains parameters, but like standard library page objects, it displays all
+of the default values for these parameters. As in Tasks 4 and 5, editing
+parameter values in this library object will change the default values of
+those parameters. The objects with the names printed in gray are
+called ``virtual objects.'' They act like objects on a page rather than
+objects in a library. Parameters in these objects may take on individual
+values, and those specific values are copied along with the object when
+it is selected and dragged back to a page. <P>
+
+<CENTER><IMG SRC=giffiles/nand4.gif><BR><BR>
+Editing a library virtual copy (instance) of gate ``quadnand''.
+</CENTER> <BR><BR>
+
+From the library page, grab all four ``quadnand'' objects and bring them
+back to Page 1. With the four objects, one can make, for instance, a
+delay flip-flop implementation from a single 7400 chip. This is shown
+below:
+
+<CENTER><IMG SRC=giffiles/dff.gif><BR><BR>
+<A HREF=psfiles/dff.ps>Delay Flip-Flop</A> using the ``quadparts'' library.
+</CENTER> <BR><BR>
+
+After building the circuit, select <I>Netlist->Write pcb</I>. The
+result is a valid PCB netlist for the circuit:
+
+<FONT color=green>
+<BLOCKQUOTE>
+<PRE>
+!Q U2-2-5 U1-1-3
+D U3-3-9
+CLK U4-4-13 U3-3-10
+int5 U4-4-12 U3-3-8 U2-2-4
+int6 U4-4-11 U1-1-2
+Q U2-2-6 U1-1-1
+</PRE>
+</BLOCKQUOTE>
+</FONT>
+
+<H2><A NAME="Task13">Task 13: Modifying netlist formats</A></H2>
+
+The Python interpreter is supposed to make new netlist formats easy to
+implement. However, the Python interface does not yet include access
+to netlist information, so for the moment, netlist formats are limited. <P>
+
+As it stands, netlists must be one of three formats:
+<OL>
+ <LI> Flattened ("sim" or SPICE)
+ <LI> Hierarchical (with subcircuits in SPICE "subckt" format)
+ <LI> Netlist (flattened, in a PCB netlist format)
+</OL>
+
+Flattened netlists are the easiest to implement new formats in, since
+the only structure in the file is determined by the elements themselves
+(not counting comment lines, such as the first line that xcircuit writes
+to the netlist file). The other two formats contain syntax that is
+(currently) hard-coded into xcircuit (the "subckt" command in hierarchical
+SPICE, and the entire syntax of PCB). Information about how to write
+devices is encoded into ``informational labels'' (otherwise abbreviated
+as ``info labels''). The syntax of info labels is described above in
+<B>Task 5</B>. <P>
+
+Modifications to netlist formats can be useful in several ways:
+<OL>
+ <LI> Implement a completely different netlist type (some subset of VHDL,
+ for instance)
+ <LI> Modify an existing format (hspice or pspice syntax vs. ordinary
+ Berkeley spice3).
+ <LI> Avoid explicitly drawing circuit schematics for simple devices.
+ <LI> Write output at the gate level instead of the transistor level.
+</OL>
+
+The last two require some explaining, so start up xcircuit and prepare
+for another task. <P>
+
+<H3> Aggregate output per device </H3>
+Here, we will change an "inverter" into a fundamental device consisting
+of two transistors in the usual CMOS configuration for the inverter.
+By default, XCircuit neither attaches schematics to gates nor defines
+aggregate (multiple line) output for a gate because there are too many
+ways to define a gate. For instance, the inverter could be an nMOS
+device with a p-pullup, or it could be a bipolar-based TTL inverter,
+etc., ad nauseum.
+
+<OL>
+ <LI> Go to the first library page and drag back an inverter to the
+ first page.
+ <LI> Add some pin labels to the input and output nodes. Call them,
+ say, "in" and "out" (or something less boring, if you prefer).
+ <LI> Edit the inverter device (<B>&gt;</B> key)
+ <LI> Start an "info label" (<B>I</B> key, or <I>Netlist->Make Info Pin</I>
+ from the menu)
+ <LI> Type <BR>
+ <TT>sim:n %pIn GND %pOut</TT>&lt;Alt-Enter&gt;<TT>p %pIn Vdd %pOut</TT><BR>
+ where "&lt;Alt-Enter&gt;"
+ is the key combination Alt + Enter (also available using the
+ menu selection <I>Text->Insert->Carriage Return</I>).
+ Note that spaces, tabs, and other characters will transfer
+ to the netlist output, although embedded commands such as color,
+ font, and size change will not.
+ The embedded carriage return <I>will</I> end up in the netlist
+ output, as a real carriage return/newline. The result is shown
+ below. <BR><BR>
+
+ <CENTER><IMG SRC=giffiles/aggregate.gif><BR>
+ Inverter with informational label for "sim" netlist output.
+ </CENTER> <BR>
+
+ <LI> Return to the top level page, choose "File->Write Output" to
+ change the name from "Page 1" to something more useful.
+ Then, from the menu, select <I>Netlist->Write sim</I>.
+ The netlist output will look something like the following: <BR>
+
+<font color=green>
+<BLOCKQUOTE>
+<PRE><TT>
+| sim circuit "aggregate" from XCircuit v2.30
+n in GND out
+p in Vdd out
+</TT></PRE>
+</BLOCKQUOTE>
+</font>
+
+ <LI> If you return to editing the symbol "invert", you will find
+ that after writing the netlist, the "Symbol" button in
+ the lower left-hand corner of the XCircuit window turned
+ green, indicating that this symbol is now considered to be
+ a "fundamental" object. That is, it has an informational
+ label and contains no subcircuits.
+</OL>
+
+<H3> Output not on the device (transistor) level </H3>
+
+Suppose, in the above example, we didn't know or care what is the
+transistor-level implementation of the inverter, but wanted a SPICE
+file showing the hierarchy, for which an inverter subcircuit could
+be inserted at a later point.
+
+<OL>
+ <LI> Repeat the above task through number <B>4</B>.
+ <LI> Write for the info label <BR>
+ <TT>spice:X%i %pIn %pOut inverter</TT>
+ <LI> Return to the top level page, and write a SPICE netlist.
+ The netlist output will look something like the following: <BR>
+
+<font color=green>
+<BLOCKQUOTE>
+<PRE><TT>
+*SPICE circuit "aggregate" from XCircuit v2.30
+
+X1 in out inverter
+.end
+</TT></PRE>
+</BLOCKQUOTE>
+</font>
+
+ <LI> While this deck is not directly simulatable, it only awaits the
+ insertion of an inverter model in the form of a subcircuit.
+</OL>
+
+<H2><A NAME="Task14">Task 14: Example: A bridge rectifier for a PCB</A></H2>
+
+This task will summarize most of what has been covered above in the tutorial
+with a practical example, a power supply bridge rectifier for a printed circuit
+board layout. The example will work through detailed explanations of each
+step, for the benefit of the impatient. <P>
+
+The bridge rectifier is a simple power supply circuit which transforms an AC
+supply (e.g., wall outlet) into a DC current for powering a circuit. The
+"bridge" is a diode bridge, a loop of four diodes which act as a full-wave
+rectifier. The bridge also acts as a nonlinear resistance in a simple
+single-pole R-C low-pass filter. The filter pole is set by a large
+polarized capacitor on the rectifier output. The larger the capacitor,
+the steadier the output voltage, including resistance to short spikes and
+dropouts of the AC supply. <P>
+
+Usually the bridge rectifier circuit drives the input of a voltage regulator
+to clean up the 120Hz bumps generated by the less-than-ideal lowpass filter,
+and to adjust the voltage between the transformer and the circuit being
+powered. For simplicity, this example will not consider the voltage
+regulator. <P>
+
+For more information about bridge rectifiers, see Horowitz and Hill,
+<I>The Art of Electronics</I>, 2nd edition, pages 45 and following
+(Cambridge Press, 1989). <P>
+
+<H3>Step 1</H3>
+
+ If you have xcircuit version 2.3.3 after revision 6, there will be a
+ symbol "Diode" (with capital-D) in the analoglib2.lps file (the
+ second library page). If not, you can update your library from this
+ link: <A HREF=../xcircuit/psfiles/analoglib2.lps>analoglib2.lps</A>,
+ and skip to Step 2. Alternatively, you can
+ use the following instructions to generate the PCB-compatible diode
+ from the simple diode on the first library page (named "diode", no
+ capital letter). <P>
+
+ The diode symbol "diode" in the first library is not configured for use in
+ PCBs. This can be changed easily. Go to the first library page (<TT>l</TT>
+ key macro), and edit the diode symbol (<TT>&gt;</TT> key macro).
+ Change the pin names to "1" and "2" (edit, or <TT>e</TT> key) to match
+ PCB naming conventions. Finally, add an "info label" for the PCB
+ netlister (<TT>I</TT> key, or else create a normal label then select
+ menu item <I>Netlist->Convert Label To...->Info label</I>). The label
+ text should be
+ <font color=green>
+ <BLOCKQUOTE><PRE><TT>
+ pcb:D?
+ </TT></PRE></BLOCKQUOTE>
+ </font>
+ After creating the label, use the second mouse button to drag a select
+ box over the question mark. Only the question mark should be highlighted.
+ Then select menu item <I>Text->Parameterize</I>. As described earlier in
+ the tutorial, the PCB netlister will use this parameterized string to
+ determine a part number for the diode, or else the part number can be
+ explicitly declared by editing the info label from each of the four
+ instances of symbol "diode" that we will generate.
+
+ <CENTER><BR><IMG SRC=giffiles/pcbdiode.gif><BR></CENTER> <BR>
+
+ Return to a drawing page (<TT>&lt;</TT> key, <TT>1</TT> key to go to Page 1)
+ and continue with Step 2.
+
+<H3>Step 2</H3>
+
+ Go to the library (<TT>l</TT> key, twice to get to the analoglib2 page,
+ or once if using an edited version of the simple diode, from Step 1)
+ and select the diode for copying (<TT>c</TT> key).
+ This action will take you back to the main
+ drawing page, with a diode instance in tow. While the diode is still
+ selected, rotate it (<TT>r</TT> key, as many times as necessary).
+ Place it four times with a click of the first (left) mouse button,
+ and finish with a click of the third (right) mouse button. Rotate and
+ position the diodes as shown below.
+
+ <CENTER><BR><IMG SRC=giffiles/bridge2.gif><BR></CENTER> <BR>
+
+<H3>Step 3</H3>
+
+ Connect the diodes together in a bridge configuration. While the
+ diode endpoints are not quite on the drawing grid when the diode is
+ rotated 45 degrees, they are fairly close (as drawn, see figure
+ above), and there is some "slop" in the netlist generator when
+ considering whether two wires are connected together. No special
+ measures are necessary to ensure the connection.
+
+ <CENTER><BR><IMG SRC=giffiles/bridge3.gif><BR></CENTER> <BR>
+
+ Make a schematic out of the rectifier by selecting all the components
+ drawn so far, typing <TT>m</TT> to "make" the object, and name
+ the object "rectifier". This is a "subschematic", as described
+ above in the tutorial, and pins will be determined from context.
+
+<H3>Step 4</H3>
+
+ Grab the transformer symbol from the "analoglib2" library (2nd library
+ page). Add wires to the transformer input, ending in terminals for
+ the input AC supply. Name these terminals "V+" and "V-" (typographical
+ suggestion: use the Symbol font for "+" and "-").
+
+ <CENTER><BR><IMG SRC=giffiles/bridge1.gif><BR></CENTER> <BR>
+
+ Connect the transformer and the rectifier together as shown.
+
+ <CENTER><BR><IMG SRC=giffiles/bridge4.gif><BR></CENTER> <BR>
+
+<H3>Step 5</H3>
+
+ Grab two capacitors (one polarized, one not) from the second library
+ page. These are the capacitors with values listed.
+ They are already configured for use with a PCB netlist. <P>
+
+ The capacitors default to a picofarad value (for use with VLSI
+ layouts, not PCBs), so the value string needs to be edited to
+ change this to the "micro" symbol for microFarads. <P>
+
+ <font color=red>Typographical note:</font> <BR>
+ The best way to do this is to change the font of the whole
+ string from "Times-Roman" to "Times-RomanISO" (use menu option
+ <I>Text->Encoding->ISO-Latin1</I> or, while editing the label,
+ use the <I>Alt-</I><TT>e</TT> key combination). The "micro"
+ symbol (Greek "mu") is available from the font symbol table (accessed
+ with the backslash key while editing text). The change to ISO
+ encoding will be necessary on both the value string and the "SPICE"
+ info label. <P>
+
+ <font color=red>Netlist note:</font> <BR>
+ The SPICE netlist generator will convert the "mu" symbol to the "u"
+ used by SPICE. This happens regardless of whether the ISO-encoded
+ "mu" or the Symbol font "mu" is used. Of course, one may also
+ write ASCII "u" in the value string.
+
+ <CENTER><BR><IMG SRC=giffiles/pcbcap.gif><BR></CENTER> <BR>
+
+<H3>Step 6</H3>
+
+ Connect all the parts together on the top level page as shown.
+
+ <CENTER><BR><IMG SRC=giffiles/bridge6.gif><BR></CENTER> <BR>
+
+ Add finishing touches, and the completed bridge rectifier should
+ look something like the one shown below.
+
+ <CENTER><BR><IMG SRC=giffiles/bridge.gif><BR></CENTER> <BR>
+
+ The xcircuit file can be obtained here: <A HREF=psfiles/bridge.ps>bridge.ps</A>.
+
+<H3>Step 7</H3>
+
+ Select menu option <I>File->Write XCircuit PS</I> and select a "Page label"
+ for the file. This will be the name used by the netlist generator for
+ the netlist file name. <P>
+
+ Generate the PCB netlist by selecting menu option <I>Netlist->Write pcb</I>.
+ The result is shown below:<BR><BR>
+
+ <font color=red>
+ <BLOCKQUOTE><PRE><TT>
+ V- T1-2
+ V+ T1-1
+ int5 T1-3 rectifier1/D4-1 rectifier1/D3-2
+ int6 T1-4 rectifier1/D2-1 rectifier1/D1-2
+ Vout rectifier1/D3-1 rectifier1/D1-1 C2-1 C1-1
+ GND rectifier1/D4-2 rectifier1/D2-2 C2-2 C1-2
+ </TT></PRE></BLOCKQUOTE>
+ </font>
+ <BR>
+
+ and can also be obtained from this link:
+ <A HREF=pcb/bridge.pcb>bridge.pcb</A>.
+
+<H3>Step 8</H3>
+
+ The example is essentially done, but we can take it one step further
+ by generating a symbol called "power_supply" to represent this circuit
+ in a larger schematic. <P>
+
+ Go to an empty page (Page 2, perhaps) and generate the following figure:<BR>
+
+ <CENTER><BR><IMG SRC=giffiles/powersup.gif><BR></CENTER> <BR>
+
+ Labels in black are normal text (created with the <TT>t</TT> key), and labels
+ in red are pins (created with the <TT>T</TT> key). After drawing, select
+ everything and put it all into an object (<TT>m</TT> key). Name the object
+ "power_supply". <P>
+
+<H3>Step 9</H3>
+
+ Now go back to Page 1, the bridge rectifier schematic. Choose the menu
+ selection <I>Netlist->Associate with Symbol</I>. You will be taken to
+ the library directory. Click (once) on the user library. You will be
+ taken directly to the user library. Finally, click (once) on the symbol
+ "power_supply". Now you should be returned to the bridge rectifier
+ schematic, with the difference that there is a white button labeled
+ "Symbol" in the bottom left-hand corner of the window. Clicking on the
+ button toggles the drawing window between the schematic and its
+ (newly associated) symbol. <P>
+
+<H3>Step 10</H3>
+
+ Return to Page 2, the top-level schematic with the "power_supply" symbol.
+ Try out the following (trivial to the point of uselessness) circuit
+ (also available at this link: <A HREF=psfiles/powersup.ps>powersup.ps</A>):
+ <BR>
+
+ <CENTER><BR><IMG SRC=giffiles/powersup2.gif><BR></CENTER> <BR>
+
+ Go to menu selection <I>File->Write XCircuit PS</I> and rename the "Page
+ label" to "powersup". Then select <I>Netlist->Write pcb</I> to
+ generate a new PCB netlist. <P>
+
+ Now look at the result: <BR><BR>
+
+ <font color=red>
+ <BLOCKQUOTE><PRE><TT>
+ NET1 power_supply1/T1-3 power_supply1/rectifier1/D4-1 \
+ power_supply1/rectifier1/D3-2
+ NET2 power_supply1/T1-4 power_supply1/rectifier1/D2-1 \
+ power_supply1/rectifier1/D1-2
+ In+ power_supply1/T1-1
+ In- power_supply1/T1-2
+ Out power_supply1/rectifier1/D3-1 power_supply1/rectifier1/D1-1 \
+ power_supply1/C2-1 power_supply1/C1-1 R1-1
+ GND power_supply1/rectifier1/D4-2 power_supply1/rectifier1/D2-2 \
+ power_supply1/C2-2 power_supply1/C1-2 R1-2
+ </TT></PRE></BLOCKQUOTE>
+ </font>
+ <BR>
+
+ which can also be obtained from this link:
+ <A HREF=pcb/powersup.pcb>powersup.pcb</A>.
+
+ Note that the main difference is that the netlist is hierarchical, with
+ components inside the power supply being referenced by the prepended
+ name "power_supply1". The resistor, the only component on the top-level
+ page, is not so prefixed. Throughout the netlist, net names take the
+ name given in the highest level of the hierarchy. <P>
+
+<HR>
+<P><A HREF=../welcome.html><IMG ALIGN=middle SRC=../giffiles/bluebutton.gif
+ BORDER=0></A> Back to the xcircuit home page. . .
+<P><IMG SRC=../giffiles/line1.gif><P>
+email: <I>tim@bach.ece.jhu.edu</I>
+</BODY>
+</HTML>