summaryrefslogtreecommitdiff
path: root/macros/plain/contrib/js-misc
diff options
context:
space:
mode:
Diffstat (limited to 'macros/plain/contrib/js-misc')
-rw-r--r--macros/plain/contrib/js-misc/History25
-rw-r--r--macros/plain/contrib/js-misc/INSTALL65
-rw-r--r--macros/plain/contrib/js-misc/Imakefile96
-rw-r--r--macros/plain/contrib/js-misc/License339
-rw-r--r--macros/plain/contrib/js-misc/Makefile288
-rw-r--r--macros/plain/contrib/js-misc/README45
-rw-r--r--macros/plain/contrib/js-misc/TODO2
-rw-r--r--macros/plain/contrib/js-misc/cassette.tex166
-rw-r--r--macros/plain/contrib/js-misc/deutsch.doc329
-rw-r--r--macros/plain/contrib/js-misc/deutsch.dvibin0 -> 11368 bytes
-rw-r--r--macros/plain/contrib/js-misc/deutsch.tex350
-rw-r--r--macros/plain/contrib/js-misc/idverb.doc194
-rw-r--r--macros/plain/contrib/js-misc/idverb.dvibin0 -> 6368 bytes
-rw-r--r--macros/plain/contrib/js-misc/idverb.tex215
-rw-r--r--macros/plain/contrib/js-misc/js-misc.dvibin0 -> 7212 bytes
-rw-r--r--macros/plain/contrib/js-misc/js-misc.tex244
-rw-r--r--macros/plain/contrib/js-misc/names.sty95
-rw-r--r--macros/plain/contrib/js-misc/schild.tex84
-rw-r--r--macros/plain/contrib/js-misc/sperr.tex116
-rw-r--r--macros/plain/contrib/js-misc/xfig.tex626
-rw-r--r--macros/plain/contrib/js-misc/xfig/text-2.1-doc.tex27
-rw-r--r--macros/plain/contrib/js-misc/xfig/text-2.1.fig3
-rw-r--r--macros/plain/contrib/js-misc/xfig/text-2.1.latex26
-rw-r--r--macros/plain/contrib/js-misc/xfig/text-3.1-doc.tex27
-rw-r--r--macros/plain/contrib/js-misc/xfig/text-3.1.latex11
25 files changed, 3373 insertions, 0 deletions
diff --git a/macros/plain/contrib/js-misc/History b/macros/plain/contrib/js-misc/History
new file mode 100644
index 0000000000..dfa7bbf787
--- /dev/null
+++ b/macros/plain/contrib/js-misc/History
@@ -0,0 +1,25 @@
+plain/js-misc/History 30 Jul 95 -*- Indented-Text -*-
+---------------------------------------------------------------------------
+
+
+ deutsch.tex uses german.sty. (With babel 3.5, germanb.sty
+ cannot be used with plain TeX any more.) [1]
+
+
+Version 1.3 07 May 95
+
+ xfig.tex handles \SetFigFont variants (from transfig versions
+ 2.1 & 3.1) automatically.
+
+
+Version 1.2 17 Apr 95
+
+ Typo in sperr.tex prevented it from working.
+
+ Don't allocate registers in xfig.tex globally, to allow
+ reading it several times in a group.
+
+
+Version 1.1 16 Mar 95
+
+ First public release.
diff --git a/macros/plain/contrib/js-misc/INSTALL b/macros/plain/contrib/js-misc/INSTALL
new file mode 100644
index 0000000000..540e67301c
--- /dev/null
+++ b/macros/plain/contrib/js-misc/INSTALL
@@ -0,0 +1,65 @@
+$Id: INSTALL,v 1.1 1995/03/16 01:18:22 schrod Exp $
+------------------------------------------------------------
+
+These instructions are written for the installation of this package on
+a TDS-compliant TeX system. (TDS is the forthcoming standard for TeX
+installations, refer to ftp.th-darmstadt.de:/pub/tex/TDS-compliant/draft/
+for more information.) If you don't have such a system, you have to
+figure out your directory names yourself.
+
+If you're on a Unix system and want to use make for installation, read
+further. Otherwise skip forward to ``MANUAL INSTALLATION''.
+
+
+------------------------------------------------------------
+INSTALLATION BY MAKE:
+
+Edit the Makefile and adapt the values of the following variables to
+your system. Sorry, but the values are not collected at the top of the
+Makefile, use your editor to locate them. (The Makefile is generated
+by Imake, I don't touch it... :-)
+
+ MAKEDIR [Default: mkdir -p]
+ A command to create a directory, including all
+ non-existent intermediate ones.
+
+ DESTDIR [Default is empty]
+ This is a prefix that's prepended in front of all
+ destination directories, in case your installation
+ structure is somewhere else than your run-time
+ location.
+
+ INSTALL [Default depends on the machine I generated the distribution]
+ A BSD install program.
+ If you have a System V Unix, and you have X11, you can
+ use a script named bsdinst.sh or bsdinst or
+ install.sh that's located your X11 bin directory.
+ If you don't have a BSD install program, you must use
+ the manual installation, described below.
+
+ TEXMF [Default: /usr/local/lib/texmf]
+ The root of your (TDS) TeX tree.
+
+Now, type "make install" and everything should be OK.
+
+
+
+------------------------------------------------------------
+MANUAL INSTALLATION:
+
+
+The Imakefile features definitions that look like
+InstallTeX<category>(<package>,<files>).
+
+Copy all <files> to a directory that is appropriate for this
+<category> and this <package>. (The <category> `Generic' denotes macro
+files that can be used with many TeX formats, including plain TeX,
+LaTeX, and AmS-TeX.)
+ The TDS directory names are $TEXMF/tex/<category>/<package>/,
+where $TEXMF is your TDS root directory and <category> is
+all-lowercase.
+
+
+------------------------------------------------------------
+# LocalWords: tex MAKEDIR DESTDIR bsdinst sh usr lib texmf Imakefile AmS
+# LocalWords: InstallTeX
diff --git a/macros/plain/contrib/js-misc/Imakefile b/macros/plain/contrib/js-misc/Imakefile
new file mode 100644
index 0000000000..4592d64acc
--- /dev/null
+++ b/macros/plain/contrib/js-misc/Imakefile
@@ -0,0 +1,96 @@
+XCOMM $Id: Imakefile,v 1.5 1995/05/28 00:30:55 schrod Exp $
+/* ---------------------------------------------------------------------- */
+
+/*
+ * Imakefile for plain TeX macro package `js-misc'
+ *
+ * (history at end)
+ */
+
+
+/* needed modules */
+#include <install/TeX.imk>
+#include <makeprog.imk>
+#include <TeX.imk>
+
+XCOMM ------------------------------------------------------------
+XCOMM continue in Imakefile
+
+
+/*
+ * The plain TeX package `js-misc' consists of the following macro files:
+ *
+ * cassette -- Labels for audio cassettes
+ * deutsch -- German texts with plain TeX
+ * idverb -- Verbatim identifiers a la WEB
+ * names.sty -- Logos
+ * schild -- Make a label (for doors, books, etc.)
+ * sperr -- Letterspace text (but don't steel sheep...)
+ * xfig -- Incorporate xfig output in plain TeX documents
+ */
+
+#ifdef ITI_Site
+ DESTDIR = /archives/tex/Install
+#endif
+
+InstallTeXPlain(js-misc,cassette.tex deutsch.tex idverb.tex \
+ schild.tex sperr.tex xfig.tex)
+InstallTeXGeneric(misc,names.sty)
+InstallTeXDoc(plain,js-misc.dvi)
+
+
+MpDoc2TeXTarget(deutsch,tex)
+MpDoc2TeXTarget(idverb,tex)
+
+TeXTarget(ftex,js-misc)
+
+
+/*
+ * creating a source-distribution of this macro package
+ */
+
+TeXFileTarget(tex,deutsch,doc)
+TeXFileTarget(tex,idverb,doc)
+
+export:: deutsch.dvi idverb.dvi
+ $(MAKE) all
+ $(RM) *.log
+
+/* This will get a module, too. */
+export::
+ touch site.imk
+ $(MAKE) Makefile IMAKE_INCLUDES=-I.
+ $(RM) -r site.imk Makefile.bak
+ cp $(HOME)/Notes/Copying.gpl License
+ pwd=`pwd` ; pwd=`suffix $$pwd /` ; cd .. ; \ @@\
+ gtar -czvf $$pwd.tar.gz \ @@\
+ --exclude=CVS --exclude=.cvsignore $$pwd ; \ @@\
+ cp $$pwd/README $$pwd.README
+
+
+/* ============================================================
+ *
+ * $Log: Imakefile,v $
+ * Revision 1.5 1995/05/28 00:30:55 schrod
+ * On export, exclude CVS files by gtar options, not be removing
+ * them. Do also export the README file.
+ *
+ * Revision 1.4 1995/04/16 23:21:04 schrod
+ * Moved itinames.sty & TH viscards to plain-iti package.
+ *
+ * Revision 1.3 1995/03/16 02:22:12 schrod
+ * Export also DVI versions of DOC files.
+ *
+ * Revision 1.2 1995/03/16 01:17:45 schrod
+ * Use TeX module.
+ * Add export target.
+ *
+ * Revision 1.1 1995/03/13 23:18:09 schrod
+ * Started to manage this package with CVS. Made minor code cleanup.
+ *
+
+ * ------------------------------------------------------------
+ * Local Variables:
+ * mode: Indented-Text
+ * End:
+ */
diff --git a/macros/plain/contrib/js-misc/License b/macros/plain/contrib/js-misc/License
new file mode 100644
index 0000000000..a43ea2126f
--- /dev/null
+++ b/macros/plain/contrib/js-misc/License
@@ -0,0 +1,339 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 675 Mass Ave, Cambridge, MA 02139, USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ Appendix: How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) 19yy <name of author>
+
+ 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.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) 19yy name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/macros/plain/contrib/js-misc/Makefile b/macros/plain/contrib/js-misc/Makefile
new file mode 100644
index 0000000000..492717b770
--- /dev/null
+++ b/macros/plain/contrib/js-misc/Makefile
@@ -0,0 +1,288 @@
+# Makefile generated by imake - do not edit!
+# $XConsortium: imake.c,v 1.91 95/01/12 16:15:47 kaleb Exp $
+
+# $ITI: Imake.tmpl,v 1.5 1995/01/24 17:48:12 schrod Exp $
+#----------------------------------------------------------------------
+# Makefile generated from "Imake.tmpl" and <Imakefile>
+#
+# Top level imake template of `Imake module edition'.
+#
+
+default: all
+
+# ======================================================================
+# MIT & XFree configuration files
+# $ITI: MIT-config.imk,v 1.3 1994/12/19 19:16:35 schrod Exp $
+
+# -------------------------------------------------------------------------
+# site-specific configuration parameters that need to come before
+# the platform-specific parameters - edit site.def to change
+
+# $ITI: site.def,v 1.7 1995/03/27 14:41:35 herr Exp $
+#
+# ITI site definitions
+#
+# starting from original MIT version
+
+# site: $XConsortium: site.def,v 1.2 91/07/30 20:26:44 rws Exp $
+
+# -------------------------------------------------------------------------
+# platform-specific configuration parameters - edit x386.cf to change
+
+# $ITI: x386.cf,v 1.3 1994/06/30 17:03:54 schrod Exp $
+# $XFree86: mit/config/x386.cf,v 2.44 1994/04/16 04:20:56 dawes Exp $
+# platform: $XConsortium: x386.cf,v 1.7 91/08/16 19:30:10 gildea Exp $
+
+# operating system: Linux
+
+# -------------------------------------------------------------------------
+# site-specific configuration parameters that go after
+# the platform-specific parameters - edit site.def to change
+
+# $ITI: site.def,v 1.7 1995/03/27 14:41:35 herr Exp $
+#
+# ITI site definitions
+#
+# starting from original MIT version
+
+# site: $XConsortium: site.def,v 1.2 91/07/30 20:26:44 rws Exp $
+
+ KMEMGROUP = kmem
+
+# ======================================================================
+# Imake template with basic definitions
+# $ITI: Base.imk,v 1.5 1994/11/28 20:57:37 schrod Exp $
+
+ LOCALDIR = /usr/local
+
+# ------------------------------------------------------------
+# Imake template for operations on files
+# $ITI: files.imk,v 1.5 1994/12/02 19:46:44 schrod Exp $
+
+ COPYIF = copyif
+ CPP = /lib/cpp
+ LN = ln -s
+ MAKEDIR = mkdir -p
+ MV = mv
+ RM = /bin/rm -f
+
+
+
+# ------------------------------------------------------------
+# Imake template for use of imake & makedepend
+# $ITI: imake.imk,v 1.9 1995/06/30 16:29:13 schrod Exp $
+
+
+
+ IMAKE = imake
+
+ IMAKE_STD_OPTIONS =
+ IMAKE_STD_INCLUDES = -I$(LOCALDIR)/lib/imake
+ IMAKE_STD_DEFINES =
+
+ IMAKE_FLAGS = $(IMAKE_OPTIONS) $(IMAKE_EXTRA_OPTIONS) $(IMAKE_STD_OPTIONS) $(IMAKE_INCLUDES) $(IMAKE_EXTRA_INCLUDES) $(IMAKE_STD_INCLUDES) $(IMAKE_DEFINES) $(IMAKE_EXTRA_DEFINES) $(IMAKE_STD_DEFINES)
+
+
+
+ MAKE = make
+ SHELL = /bin/sh
+
+
+
+ TOPDIR = .
+ CURDIR = .
+ THISDIR = `basename $(CURDIR)`
+
+ MAKEOVERRIDES =
+
+
+
+depend::
+ touch .dependdummy
+ $(DEPEND) $(DEPENDFLAGS) -s "# DO NOT DELETE" .dependdummy
+ $(RM) .dependdummy
+
+ DEPEND = makedepend
+ DEPENDFLAGS =
+
+
+
+ SUBDIRS =
+
+###########################################################################
+# start of Imakefile
+
+# $Id: Imakefile,v 1.5 1995/05/28 00:30:55 schrod Exp $
+
+# ======================================================================
+# Imake template for installation of TeX files
+# $ITI: TeX.imk,v 1.2 1995/03/14 12:55:51 schrod Exp $
+
+# ======================================================================
+# Imake template for software installation
+# $ITI: install.imk,v 1.2 1995/03/14 12:56:05 schrod Exp $
+
+ DESTDIR =
+
+ INSTALL = install
+ INSTALL_OWNER = $(USER)
+ INSTALL_GROUP = `id -gn`
+
+ INSTALL_DATA_RIGHTS = 644
+ INSTALL_PROGRAM_RIGHTS = 755
+ INSTALL_SCRIPT_RIGHTS = 755
+
+ TEXMF = /usr/local/lib/texmf
+
+# ======================================================================
+# Imake template for MAKEPROG, the Literate Documentation system
+# $ITI: makeprog.imk,v 1.2 1995/03/14 12:55:29 schrod Exp $
+
+ MP_DOC2TEX = doc2tex
+ MP_TEX2DOC = tex2doc
+
+# ======================================================================
+# Imake template for TeX & friends
+# $ITI: TeX.imk,v 1.1 1995/03/14 19:40:12 schrod Exp $
+
+ TEX_IT = tex-it
+
+# ------------------------------------------------------------
+# continue in Imakefile
+
+install::
+ $(MAKEDIR) $(DESTDIR)/$(TEXMF)/tex/plain/js-misc
+ @test "cassette.tex deutsch.tex idverb.tex schild.tex sperr.tex xfig.tex" -o "cassette.tex deutsch.tex idverb.tex schild.tex sperr.tex xfig.tex" = "NullParameter" && \
+ for file in cassette.tex deutsch.tex idverb.tex schild.tex sperr.tex xfig.tex '' ; \
+ do if [ empty$$file != empty ] ; \
+ then (set -x; $(INSTALL) -c -o $(INSTALL_OWNER) -g $(INSTALL_GROUP) -m $(INSTALL_DATA_RIGHTS) $$file $(DESTDIR)/$(TEXMF)/tex/plain/js-misc) ; \
+ fi ; \
+ done || \
+ exit 0
+
+install::
+ $(MAKEDIR) $(DESTDIR)/$(TEXMF)/tex/generic/misc
+ @test "names.sty" -o "names.sty" = "NullParameter" && \
+ for file in names.sty '' ; \
+ do if [ empty$$file != empty ] ; \
+ then (set -x; $(INSTALL) -c -o $(INSTALL_OWNER) -g $(INSTALL_GROUP) -m $(INSTALL_DATA_RIGHTS) $$file $(DESTDIR)/$(TEXMF)/tex/generic/misc) ; \
+ fi ; \
+ done || \
+ exit 0
+
+install::
+ $(MAKEDIR) $(DESTDIR)/$(TEXMF)/doc/plain
+ @test "js-misc.dvi" -o "js-misc.dvi" = "NullParameter" && \
+ for file in js-misc.dvi '' ; \
+ do if [ empty$$file != empty ] ; \
+ then (set -x; $(INSTALL) -c -o $(INSTALL_OWNER) -g $(INSTALL_GROUP) -m $(INSTALL_DATA_RIGHTS) $$file $(DESTDIR)/$(TEXMF)/doc/plain) ; \
+ fi ; \
+ done || \
+ exit 0
+
+deutsch.tex: deutsch.doc
+ $(MP_DOC2TEX) deutsch.doc deutsch.tex
+
+all:: deutsch.tex
+
+clean::
+ $(RM) deutsch.tex
+
+idverb.tex: idverb.doc
+ $(MP_DOC2TEX) idverb.doc idverb.tex
+
+all:: idverb.tex
+
+clean::
+ $(RM) idverb.tex
+
+all:: js-misc.dvi
+
+js-misc.dvi: js-misc.tex
+ $(TEX_IT) ftex js-misc.tex
+
+clean::
+ $(RM) js-misc.dvi js-misc.log js-misc.aux js-misc.toc js-misc.blg
+
+realclean::
+ $(RM) js-misc.bbl
+
+deutsch.dvi: deutsch.doc
+ $(TEX_IT) tex deutsch.doc
+
+clean::
+ $(RM) deutsch.dvi deutsch.log deutsch.aux deutsch.toc deutsch.blg
+
+realclean::
+ $(RM) deutsch.bbl
+
+idverb.dvi: idverb.doc
+ $(TEX_IT) tex idverb.doc
+
+clean::
+ $(RM) idverb.dvi idverb.log idverb.aux idverb.toc idverb.blg
+
+realclean::
+ $(RM) idverb.bbl
+
+export:: deutsch.dvi idverb.dvi
+ $(MAKE) all
+ $(RM) *.log
+
+export::
+ touch site.imk
+ $(MAKE) Makefile IMAKE_INCLUDES=-I.
+ $(RM) -r site.imk Makefile.bak
+ cp $(HOME)/Notes/Copying.gpl License
+ pwd=`pwd` ; pwd=`suffix $$pwd /` ; cd .. ; \
+ gtar -czvf $$pwd.tar.gz \
+ --exclude=CVS --exclude=.cvsignore $$pwd ; \
+ cp $$pwd/README $$pwd.README
+
+# -------------------------------------------------------------------------
+# common rules for all Makefiles - do not edit
+
+Makefile::
+ @if [ -f Makefile ]; \
+ then set -x; \
+ $(RM) Makefile.bak; $(MV) Makefile Makefile.bak; \
+ else set -x; fi ; \
+ $(IMAKE) $(IMAKE_FLAGS) -DImakeTopDir=$(TOPDIR) -DImakeCurrentDir=$(CURDIR); \
+ set +x
+
+Makefiles::
+ @case "$(MAKEFLAGS)" in *[ik]*) set +e;; esac; \
+ case "$(TOPDIR)" in \
+ /?*) newtop=$(TOPDIR) ;; \
+ *) newtop=../$(TOPDIR) ;; \
+ esac; \
+ test "$(SUBDIRS)" -o "$(SUBDIRS)" = "NullParameter" && \
+ for d in $(SUBDIRS) '' ; \
+ do if [ empty$$d != empty ] ; \
+ then echo "making Makefiles in $(CURDIR)/$$d ..."; \
+ $(MAKE) subdirMakefiles SUBDIR=$$d TOPDIR=$$newtop CURDIR=$(CURDIR)/$$d ; \
+ fi ; \
+ done || \
+ exit 0
+
+subdirMakefiles::
+ @cd $(SUBDIR) ; \
+ if [ -f Makefile ]; \
+ then set -x; \
+ $(RM) Makefile.bak; $(MV) Makefile Makefile.bak; \
+ else set -x; fi ; \
+ $(IMAKE) $(IMAKE_FLAGS) -DImakeTopDir=$(TOPDIR) -DImakeCurrentDir=$(CURDIR); \
+ set +x ; \
+ $(MAKE) Makefiles
+
+clean::
+ $(RM) $(CLEAN_EXTRA_FILES) *.CKP *.ln *.BAK *.bak *.o core errs ,* *~ *.a .emacs_* tags TAGS make.log MakeOut "#"*
+
+# -------------------------------------------------------------------------
+# default rules for Imakefiles that do not generate them - do not edit
+
+all::
+
+# -------------------------------------------------------------------------
+# dependencies generated by makedepend
+
diff --git a/macros/plain/contrib/js-misc/README b/macros/plain/contrib/js-misc/README
new file mode 100644
index 0000000000..14e8bf3f5c
--- /dev/null
+++ b/macros/plain/contrib/js-misc/README
@@ -0,0 +1,45 @@
+$Id: README,v 1.2 1995/05/07 16:58:21 schrod Exp $
+------------------------------------------------------------
+
+
+The plain/js-misc package collects some small miscellaneous plain TeX
+macros I wrote and use quite regularly. You'll find a complete list of
+the package's macro files at the start of Imakefile.
+
+In my opinion, of particular importance are
+
+ idverb.tex Typesetting verbatim by |...|
+ xfig.tex Typeset figures created by xfig (transfig, actually)
+
+There does not exist a user manual for most macros. A German
+description of two minor macro files (cassette.tex & schild.tex) is
+available in js-misc.{tex,dvi}. Other DVI files in this distribution
+feature explanations of specific macro files, typically with
+implementation info as well. The rest has user documentation at the
+top of the macro files, as comments.
+
+For installation instructions, check the file INSTALL.
+
+
+Reference anonymous ftp site:
+ ftp.th-darmstadt.de [130.83.47.112]
+ directory pub/tex/plain
+ file js-misc-<version>.tar.gz
+ where <version> is the current version number
+ (a gzipped tar file)
+
+CTAN directory:
+ macros/plain/contrib/js-misc/
+ version info is in file History
+
+
+Enjoy,
+ Joachim
+
+--
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+Joachim Schrod Email: schrod@iti.informatik.th-darmstadt.de
+Computer Science Department
+Technical University of Darmstadt, Germany
+
+
diff --git a/macros/plain/contrib/js-misc/TODO b/macros/plain/contrib/js-misc/TODO
new file mode 100644
index 0000000000..dc42a352ab
--- /dev/null
+++ b/macros/plain/contrib/js-misc/TODO
@@ -0,0 +1,2 @@
+
+------------------------------------------------------------
diff --git a/macros/plain/contrib/js-misc/cassette.tex b/macros/plain/contrib/js-misc/cassette.tex
new file mode 100644
index 0000000000..828260153b
--- /dev/null
+++ b/macros/plain/contrib/js-misc/cassette.tex
@@ -0,0 +1,166 @@
+% $Id: cassette.tex,v 1.2 1995/03/16 01:17:54 schrod Exp $
+%--------------------------------------------------------
+% Written by Joachim Schrod <schrod@iti.informatik.th-darmstadt.de>.
+% Put into public domain.
+
+
+\catcode`\@=11
+
+\font\norm=cmss8
+\font\intfont=cmssi8
+\font\titfont@page=cmcsc10 scaled 800
+\font\titfont=cmss10
+\font\titintfont=cmssi10
+\font\cassfont=cmcsc10
+
+\newdimen\colwidth \colwidth=50 true mm
+\newdimen\backheight \backheight=10 true mm
+\newdimen\titheight \titheight=14 true mm
+\newdimen\pagheight \pagheight=66 true mm
+
+\def\@seite#1{%
+ \global\setbox\@page=\vbox{\hsize=\colwidth
+ \everypar={\global\hangindent=1em }%
+ \vskip \tw@\p@
+ #1\endgraf
+ \vfil
+ }%
+ }
+
+\def\cnt#1:{[#1]}
+\def\von#1:{{\intfont #1\/}:\penalty -100 } % <== Space!
+\def\nl{\hfill\break}
+
+\def\@titel#1{%
+ \global\setbox\@title=\vbox{\hsize=\colwidth
+ \let\intfont=\titintfont % Font fuer Interpret
+ \vfill
+ \unvbox\@title
+ \titfont #1\endgraf
+ \vfill
+ }%
+ {\titfont@page
+ \def\von##1:{\uppercase{##1}:\penalty -100 }% % <== Space!
+ #1%
+ }}
+
+
+\newbox\@seitea
+\newbox\@seiteb
+\newbox\@titela
+\newbox\@titelb
+\def\seitea{\let\@page=\@seitea \let\titel=\titela \obeylines \@seite}
+\def\seiteb{\let\@page=\@seiteb \let\titel=\titelb \obeylines \@seite}
+\def\titela{\let\@title=\@titela \@titel}
+\def\titelb{\let\@title=\@titelb \@titel}
+
+\def\titelcass#1{%
+ \global\setbox\@titela=\vbox{\hsize=\colwidth
+ \vfill
+ \unvbox\@titela
+ \titfont #1\endgraf
+ \vfill
+ }%
+ }
+
+
+
+
+\def\begincassette#1{%
+ \def\cassname{#1}%
+ \setbox\@seitea\vbox{\hrule width\colwidth height\z@ depth\z@ \vfil}%
+ \setbox\@seiteb\vbox{\hrule width\colwidth height\z@ depth\z@ \vfil}%
+ \setbox\@titela\vbox{\hrule width\colwidth height\z@ depth\z@ \vfil}%
+ \setbox\@titelb\vbox{\hrule width\colwidth height\z@ depth\z@ \vfil}%
+ \splittopskip\baselineskip
+ }
+
+\newif\if@text@left@
+\def\endcassette{%
+ \hbox{%
+ \vrule
+ \vbox{%
+ \hrule
+ \vbox to \backheight{\hsize2\colwidth \advance\hsize by 4.4\p@
+ \vfill
+ \centerline{\cassfont \cassname}%
+ \vfill
+ }%
+ \hrule
+ \col{\titheight}{@titel}%
+ \hrule
+ \loop
+ \global\@text@left@false
+ \one@page
+ \if@text@left@ \repeat
+ }%
+ \vrule
+ }%
+ }
+\def\one@page{%
+ \col{\pagheight}{@seite}%
+ \hrule
+ }%
+\def\col#1#2{%
+ \hbox{%
+ \hskip \p@
+ \split@col{#2a}{#1}%
+ \hskip \p@
+ \vrule
+ \hskip \p@
+ \split@col{#2b}{#1}%
+ \hskip \p@
+ }%
+ }
+\def\split@col#1#2{%
+ \expandafter \ifvoid \csname #1\endcsname
+ \vbox to #2{\hrule width\colwidth height\z@ depth\z@ \vfil}%
+ \else
+ \vbox to #2{\hsize\colwidth
+ \setbox\z@ \vsplit \csname #1\endcsname to #2\relax
+ \unvbox\z@
+ \vskip 2pt plus 1fil minus 2pt
+ }%
+ \expandafter \ifvoid \csname #1\endcsname
+ \else \global\@text@left@true
+ \fi
+ \fi
+ }
+
+
+\norm \baselineskip=9pt \lineskip=0pt \lineskiplimit=0pt
+\parindent=\z@ \parskip=\tw@\p@ minus \tw@\p@
+\rightskip=\z@ plus 0.7\colwidth \linepenalty=100
+\r@ggedbottomtrue
+\frenchspacing
+\nopagenumbers
+
+
+\endinput
+
+
+
+% ============================================================
+%
+% $Log: cassette.tex,v $
+% Revision 1.2 1995/03/16 01:17:54 schrod
+% Support for magnified typesetting.
+% Might be more changes as well, they looked sensible.
+%
+% Revision 1.1 1995/03/13 23:18:10 schrod
+% Started to manage this package with CVS. Made minor code cleanup.
+%
+
+%
+% Pre-CVS Log:
+%
+% 87-09-20 js Initial revision
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+Local Variables:
+mode: plain-TeX
+TeX-master: t
+TeX-brace-indent-level: 4
+End:
diff --git a/macros/plain/contrib/js-misc/deutsch.doc b/macros/plain/contrib/js-misc/deutsch.doc
new file mode 100644
index 0000000000..8285a980c3
--- /dev/null
+++ b/macros/plain/contrib/js-misc/deutsch.doc
@@ -0,0 +1,329 @@
+% $Id: deutsch.doc,v 1.4 1995/07/30 13:23:56 schrod Exp $
+%----------------------------------------------------------------------
+% Written by Joachim Schrod <schrod@iti.informatik.th-darmstadt.de>.
+% This file is distributed without any copyright restriction.
+
+%
+% deutsch.doc -- typeset German documents with plain TeX.
+%
+% [TeX in MAKEPROG]
+% (history at end)
+
+
+\input progdoc
+
+\input names.sty
+\def\babel{{\sf babel}}
+
+
+
+\title{Typesetting German Documents with Plain \TeX{}}
+
+
+
+\chap Introduction.
+
+There are several defencies of plain \TeX{} if used for German
+documents:
+
+\item{---} Mappings of national characters (`umlauts' and `sharp~s')
+to macros or to other character codes (if special fonts are available)
+are missing.
+
+\item{---} \TeX{} produces lots of overfull hboxes for German texts.
+That's because the words there are usually longer than English ones.
+Furthermore we have to use much more hyphenation for German texts than
+for English ones, narrow typesetting is more important than few
+hyphenations. In particular, words with umlauts are not hyphenated
+often anyhow, even with the `multiple-word' approach from |german.sty|.
+
+\item{---} It is typographic usage that between compound words
+ligatures are not built. Plain~\TeX{} has no easy, readable way to
+provide this.
+
+\noindent This file does the according definitions. They are quite
+often only a kludge. But it is hard to make the restrictions
+disappear, sometimes it is even impossible within the current
+implementation of \TeX{}---and there will never be any other
+implementation. So we must live with these kludges.
+
+
+\sect Of course, there is more to German typesetting. Hyphenation,
+also for words with umlauts and sharp~s, etc. This basic
+functionality is supplied by the \babel{} system and DANTE's
+|german.sty|, we have to load the appropriate module.
+
+There's one problem, though. \babel{}~3.5 defines
+|\DeclareTextSymbol|, a symbol used by |german.sty| to decide if it
+shall use NFSS code to access symbols. But that usage will lead to an
+endless recursion, because some text symbols are defined by
+themselves. I don't know if that problem is caused by \babel{}'s code
+or by its usage in |german.sty| -- turning it off seems to be an
+appropriate fix.
+
+\beginprog
+\let\DeclareTextSymbol\undefined
+\input german.sty
+\endprog
+
+
+\sect But before we start we declare some shorthands for category
+codes. By declaring the at sign~(`|@|') as well as the
+underscore~`(|_|)' as letters we can use them in our macros. (I
+agree with D.~Knuth that |\identifier_several_words_long| is more
+readable than |\IdentifierSeveralWordsLong| and in every case better
+than |\p@@@s|.) With the at sign we can use the ``private'' Plain
+macros and with the underscore we can make our own macros more
+readable. But as we have to restore these category codes at the end
+of this macro file we store their former values in control
+sequences. This method is better than to use
+a group because not all macros have to be defined global this way.
+
+\beginprog
+\ifx \CatEscape\undefined
+ \chardef\CatEscape=0
+ \chardef\CatOpen=1
+ \chardef\CatClose=2
+ \chardef\CatIgnore=9
+ \chardef\CatLetter=11
+ \chardef\CatOther=12
+ \chardef\CatActive=13 % \active of plain.tex
+ \chardef\CatInvalid=15
+
+ \chardef\CatAtCode=\catcode`\@
+ \chardef\CatUsCode=\catcode`\_
+\fi
+
+\catcode`\@=\CatLetter % top level macro file
+\catcode`\_=\CatLetter
+\endprog
+
+
+\sect Let's identify this macro file against the user and in the Log file.
+
+\beginprog
+\begingroup
+ \catcode`\$=\CatIgnore
+ \catcode`\:=\CatIgnore
+ \message{Support for German documents, $Revision: 1.4 $}
+\endgroup
+\endprog
+
+
+
+\chap National Characters.
+
+By default no extended characters are available, except those defined
+below. I.e., we start to treat all characters from |"7F| to |"FF| as
+invalid characters.
+
+\beginprog
+\count@="7F
+\loop
+ \catcode \the\count@ = \CatInvalid
+ \advance\count@ by 1
+ \ifnum \count@ < "100
+\repeat
+\endprog
+
+
+\sect We provide a command for the definition of non-ASCII characters:
+|\ExtendChar|. A sample definition of an ``Umlaut-a''~(\"a) in the
+extended code of an IBM~PC (hex code~|"84|) is:
+$$
+ |\ExtendChar\^^84: {^^84}{\"a}|
+$$
+First the hex code is given as a control sequence, followed by a
+colon. Afterwards come two parameters, the first is again the hex
+code, the second is the token list which should be used instead of the
+hex code.
+
+The macro definition is rather easy, we just have to make the
+respective character active and bind it to it's new meaning.
+
+\beginprog
+\def\ExtendChar #1:{%
+ \catcode`#1 \CatActive
+ \extend_char
+ }
+\def\extend_char #1#2{%
+ \def #1{#2}%
+ }
+\endprog
+
+
+\sect Now we can define some replacements.
+
+The braces after the control sequences are needed when characters from
+the extended character set are written to an auxiliary file and read
+in later. During the |\write| they are expanded and following white
+space would be gobbled if the braces would not be there.
+
+\beginprog
+% ISO-Latin-1
+\ExtendChar\^^c4: {^^c4}{\"A}
+\ExtendChar\^^d6: {^^d6}{\"O}
+\ExtendChar\^^dc: {^^dc}{\"U}
+\ExtendChar\^^df: {^^df}{\ss{}}
+\ExtendChar\^^e4: {^^e4}{\"a}
+\ExtendChar\^^f6: {^^f6}{\"o}
+\ExtendChar\^^fc: {^^fc}{\"u}
+
+% IBM PC (code page 850)
+\ExtendChar\^^81: {^^81}{\"u}
+\ExtendChar\^^84: {^^84}{\"a}
+\ExtendChar\^^8e: {^^8e}{\"A}
+\ExtendChar\^^94: {^^94}{\"o}
+\ExtendChar\^^99: {^^99}{\"O}
+\ExtendChar\^^9a: {^^9a}{\"U}
+\ExtendChar\^^e1: {^^e1}{\ss{}} % actually \beta, used as \ss in Germany
+
+% Atari ST (like IBM PC, but with a real `sharp~s')
+\ExtendChar\^^9e: {^^9e}{\ss{}}
+\endprog
+
+
+
+\chap Paragraph Breaking.
+
+As outlined in the introduction, we allow longer interword spaces. A
+line now may have a badness up to 2500, over 1500 a warning is to be
+given. Furthermore the penalties for hyphenation are lowered because a
+narrow typesetting is preferred against few hyphenations.
+
+These values are still experimental and should be tuned.
+
+As |german.sty| uses \babel{} compatible structure, the german
+language hook is a good place to store such definitions. But to
+use \babel{}'s convenient macros, too, we have to assure that it's
+kernel code is loaded first.
+
+\beginprog
+\ifx \babel@core@loaded\undefined
+ \input babel.def
+\fi
+\addto\extrasgerman{%
+ \babel@savevariable\tolerance
+ \babel@savevariable\hbadness
+ \babel@savevariable\doublehyphendemerits
+ \babel@savevariable\finalhyphendemerits
+ \babel@savevariable\adjdemerits
+ \tolerance 2500 \hbadness 1500
+ \doublehyphendemerits 50000
+ \finalhyphendemerits 25000
+ \adjdemerits 50000
+ }
+\endprog
+
+
+\sect In some languages ligatures should not appear between compound
+words. We use {\tt \string\|\/} to mark those places. This is only
+done within text mode, in math mode {\tt \string\|\/} is still
+`$\|$'. But it is sure that one can always hyphenate between compound
+words, so we insert |\-|. To allow the hyphenation in other parts of
+the word though, we use |\allowhyphens| again.
+
+\beginprog
+\def\|{% % break open a ligature (if not in math mode)
+ \relax
+ \ifmmode \Vert
+ \else \allowhyphens\-\allowhyphens
+ \fi
+ }
+\endprog
+
+
+\sect Don't use the dreaded `double quote special meaning' stuff of
+|german.sty|. And use original umlauts. Already in M\"unster I voted
+against it\dots
+
+\beginprog
+\addto\extrasgerman{%
+ \mdqoff
+ \umlautlow
+ }
+\endprog
+
+
+\sect Define |\SwitchtoLanguage| for upward compatibility. It does
+not really do the same, the old definition was more similar to
+|\selectlanguage|. But other languages have to be declared
+explicitely, that's not done by this macro file. So we just want to
+make old documents processable.
+
+\beginprog
+\def\SwitchtoLanguage#1{\language \csname l@#1\endcsname}
+\endprog
+
+
+\sect We are finished; switch to german language (to enable the new
+extras defined above), restore the catcodes and prevent from following
+garbage.
+
+\beginprog
+\selectlanguage{german}
+
+\catcode`\@=\CatAtCode
+\catcode`\_=\CatUsCode
+
+\endinput
+\endprog
+
+
+%% \sect {\it Acknowledgements:}\quad I would like to thank XXX
+
+
+\bye
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% $Log: deutsch.doc,v $
+% Revision 1.4 1995/07/30 13:23:56 schrod
+% Discard babel definition of \DeclareTextCommand before including
+% german.sty, they are incompatible.
+%
+% Revision 1.3 1995/07/29 17:58:24 schrod
+% Use german.sty, not germanb.sty. (babel 3.5 is not functional for
+% plain TeX any more.) But we still want to use babel's macros, we have
+% to load it's kernel for that.
+%
+% Revision 1.2 1995/03/13 23:18:10 schrod
+% Started to manage this package with CVS. Made minor code cleanup.
+%
+% Revision 1.1 1994/10/16 16:57:30 schrod
+% Merged macros from local.tex, codes.tex, and language.tex. This
+% new file is mainly there to provide upward compatibility for our old
+% documents.
+%
+%
+%
+% pre-CVS Version History:
+%
+% DATE WHO REMARKS
+% 91-01-18 js set all extended characters to code invalid
+% 90-12-23 js added the definition of \ExtendChar for usage in codes.tex.
+% 90-10-06 js renamed from dlocal to local, it's now international,
+% adapted to TeX 3:
+% included codes.tex and langdef.tex if they exist,
+% assumed that language.tex is already loaded,
+% defined German parameters as a language hook,
+% removed first \allowhyphens in \uml@ut,
+% documented it with MAKEPROG.
+% 89-10-27 js was reworked for ILaTeX
+% 89-05-31 js defined \| as a separator for ligatures in text mode
+% 87-10-01 js introduced \protect,
+% set parameters for German page makeup
+% 87-??-?? kg first release
+%
+% kg: Klaus Guntermann <gunterma@<schrod@iti.informatik.th-darmstadt.de>
+% js: Joachim Schrod <schrod@iti.informatik.th-darmstadt.de>
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+Local Variables:
+mode: plain-TeX
+TeX-master: t
+TeX-brace-indent-level: 4
+End:
diff --git a/macros/plain/contrib/js-misc/deutsch.dvi b/macros/plain/contrib/js-misc/deutsch.dvi
new file mode 100644
index 0000000000..057f173fc1
--- /dev/null
+++ b/macros/plain/contrib/js-misc/deutsch.dvi
Binary files differ
diff --git a/macros/plain/contrib/js-misc/deutsch.tex b/macros/plain/contrib/js-misc/deutsch.tex
new file mode 100644
index 0000000000..26f3e3719d
--- /dev/null
+++ b/macros/plain/contrib/js-misc/deutsch.tex
@@ -0,0 +1,350 @@
+% $Id: deutsch.doc,v 1.4 1995/07/30 13:23:56 schrod Exp $
+%----------------------------------------------------------------------
+% Written by Joachim Schrod <schrod@iti.informatik.th-darmstadt.de>.
+% This file is distributed without any copyright restriction.
+
+%
+% deutsch.doc -- typeset German documents with plain TeX.
+%
+% [TeX in MAKEPROG]
+% (history at end)
+
+
+%%%%
+%%%%
+%%%% These TeX macros were documented with the documentation system
+%%%% MAKEPROG and automatically converted to the current form.
+%%%% If you have MAKEPROG available you may transform it back to
+%%%% the original input: Remove every occurence of three percents
+%%%% and one optional blank from the beginning of a line and remove
+%%%% every line which starts with four percents. The following lex
+%%%% program will do this:
+%%%%
+%%%% %%
+%%%%
+%%%% ^%%%\ ? ;
+%%%% ^%%%%.*\n ;
+%%%%
+%%%% If you just want to print the documentation you may fetch
+%%%% the archive print-makeprog.tar.Z from ftp.th-darmstadt.de (directory
+%%%% pub/tex/latex). It contains *all* used styles -- but beware, they
+%%%% may not be in a documented form...
+%%%%
+%%%%
+%%% \input progdoc
+
+%%% \input names.sty
+%%% \def\babel{{\sf babel}}
+
+
+
+%%% \title{Typesetting German Documents with Plain \TeX{}}
+
+
+
+%%% \chap Introduction.
+
+%%% There are several defencies of plain \TeX{} if used for German
+%%% documents:
+
+%%% \item{---} Mappings of national characters (`umlauts' and `sharp~s')
+%%% to macros or to other character codes (if special fonts are available)
+%%% are missing.
+
+%%% \item{---} \TeX{} produces lots of overfull hboxes for German texts.
+%%% That's because the words there are usually longer than English ones.
+%%% Furthermore we have to use much more hyphenation for German texts than
+%%% for English ones, narrow typesetting is more important than few
+%%% hyphenations. In particular, words with umlauts are not hyphenated
+%%% often anyhow, even with the `multiple-word' approach from |german.sty|.
+
+%%% \item{---} It is typographic usage that between compound words
+%%% ligatures are not built. Plain~\TeX{} has no easy, readable way to
+%%% provide this.
+
+%%% \noindent This file does the according definitions. They are quite
+%%% often only a kludge. But it is hard to make the restrictions
+%%% disappear, sometimes it is even impossible within the current
+%%% implementation of \TeX{}---and there will never be any other
+%%% implementation. So we must live with these kludges.
+
+
+%%% \sect Of course, there is more to German typesetting. Hyphenation,
+%%% also for words with umlauts and sharp~s, etc. This basic
+%%% functionality is supplied by the \babel{} system and DANTE's
+%%% |german.sty|, we have to load the appropriate module.
+
+%%% There's one problem, though. \babel{}~3.5 defines
+%%% |\DeclareTextSymbol|, a symbol used by |german.sty| to decide if it
+%%% shall use NFSS code to access symbols. But that usage will lead to an
+%%% endless recursion, because some text symbols are defined by
+%%% themselves. I don't know if that problem is caused by \babel{}'s code
+%%% or by its usage in |german.sty| -- turning it off seems to be an
+%%% appropriate fix.
+
+%%% \beginprog
+\let\DeclareTextSymbol\undefined
+\input german.sty
+%%% \endprog
+
+
+%%% \sect But before we start we declare some shorthands for category
+%%% codes. By declaring the at sign~(`|@|') as well as the
+%%% underscore~`(|_|)' as letters we can use them in our macros. (I
+%%% agree with D.~Knuth that |\identifier_several_words_long| is more
+%%% readable than |\IdentifierSeveralWordsLong| and in every case better
+%%% than |\p@@@s|.) With the at sign we can use the ``private'' Plain
+%%% macros and with the underscore we can make our own macros more
+%%% readable. But as we have to restore these category codes at the end
+%%% of this macro file we store their former values in control
+%%% sequences. This method is better than to use
+%%% a group because not all macros have to be defined global this way.
+
+%%% \beginprog
+\ifx \CatEscape\undefined
+ \chardef\CatEscape=0
+ \chardef\CatOpen=1
+ \chardef\CatClose=2
+ \chardef\CatIgnore=9
+ \chardef\CatLetter=11
+ \chardef\CatOther=12
+ \chardef\CatActive=13 % \active of plain.tex
+ \chardef\CatInvalid=15
+
+ \chardef\CatAtCode=\catcode`\@
+ \chardef\CatUsCode=\catcode`\_
+\fi
+
+\catcode`\@=\CatLetter % top level macro file
+\catcode`\_=\CatLetter
+%%% \endprog
+
+
+%%% \sect Let's identify this macro file against the user and in the Log file.
+
+%%% \beginprog
+\begingroup
+ \catcode`\$=\CatIgnore
+ \catcode`\:=\CatIgnore
+ \message{Support for German documents, $Revision: 1.4 $}
+\endgroup
+%%% \endprog
+
+
+
+%%% \chap National Characters.
+
+%%% By default no extended characters are available, except those defined
+%%% below. I.e., we start to treat all characters from |"7F| to |"FF| as
+%%% invalid characters.
+
+%%% \beginprog
+\count@="7F
+\loop
+ \catcode \the\count@ = \CatInvalid
+ \advance\count@ by 1
+ \ifnum \count@ < "100
+\repeat
+%%% \endprog
+
+
+%%% \sect We provide a command for the definition of non-ASCII characters:
+%%% |\ExtendChar|. A sample definition of an ``Umlaut-a''~(\"a) in the
+%%% extended code of an IBM~PC (hex code~|"84|) is:
+%%% $$
+%%% |\ExtendChar\^^84: {^^84}{\"a}|
+%%% $$
+%%% First the hex code is given as a control sequence, followed by a
+%%% colon. Afterwards come two parameters, the first is again the hex
+%%% code, the second is the token list which should be used instead of the
+%%% hex code.
+
+%%% The macro definition is rather easy, we just have to make the
+%%% respective character active and bind it to it's new meaning.
+
+%%% \beginprog
+\def\ExtendChar #1:{%
+ \catcode`#1 \CatActive
+ \extend_char
+ }
+\def\extend_char #1#2{%
+ \def #1{#2}%
+ }
+%%% \endprog
+
+
+%%% \sect Now we can define some replacements.
+
+%%% The braces after the control sequences are needed when characters from
+%%% the extended character set are written to an auxiliary file and read
+%%% in later. During the |\write| they are expanded and following white
+%%% space would be gobbled if the braces would not be there.
+
+%%% \beginprog
+% ISO-Latin-1
+\ExtendChar\^^c4: {^^c4}{\"A}
+\ExtendChar\^^d6: {^^d6}{\"O}
+\ExtendChar\^^dc: {^^dc}{\"U}
+\ExtendChar\^^df: {^^df}{\ss{}}
+\ExtendChar\^^e4: {^^e4}{\"a}
+\ExtendChar\^^f6: {^^f6}{\"o}
+\ExtendChar\^^fc: {^^fc}{\"u}
+
+% IBM PC (code page 850)
+\ExtendChar\^^81: {^^81}{\"u}
+\ExtendChar\^^84: {^^84}{\"a}
+\ExtendChar\^^8e: {^^8e}{\"A}
+\ExtendChar\^^94: {^^94}{\"o}
+\ExtendChar\^^99: {^^99}{\"O}
+\ExtendChar\^^9a: {^^9a}{\"U}
+\ExtendChar\^^e1: {^^e1}{\ss{}} % actually \beta, used as \ss in Germany
+
+% Atari ST (like IBM PC, but with a real `sharp~s')
+\ExtendChar\^^9e: {^^9e}{\ss{}}
+%%% \endprog
+
+
+
+%%% \chap Paragraph Breaking.
+
+%%% As outlined in the introduction, we allow longer interword spaces. A
+%%% line now may have a badness up to 2500, over 1500 a warning is to be
+%%% given. Furthermore the penalties for hyphenation are lowered because a
+%%% narrow typesetting is preferred against few hyphenations.
+
+%%% These values are still experimental and should be tuned.
+
+%%% As |german.sty| uses \babel{} compatible structure, the german
+%%% language hook is a good place to store such definitions. But to
+%%% use \babel{}'s convenient macros, too, we have to assure that it's
+%%% kernel code is loaded first.
+
+%%% \beginprog
+\ifx \babel@core@loaded\undefined
+ \input babel.def
+\fi
+\addto\extrasgerman{%
+ \babel@savevariable\tolerance
+ \babel@savevariable\hbadness
+ \babel@savevariable\doublehyphendemerits
+ \babel@savevariable\finalhyphendemerits
+ \babel@savevariable\adjdemerits
+ \tolerance 2500 \hbadness 1500
+ \doublehyphendemerits 50000
+ \finalhyphendemerits 25000
+ \adjdemerits 50000
+ }
+%%% \endprog
+
+
+%%% \sect In some languages ligatures should not appear between compound
+%%% words. We use {\tt \string\|\/} to mark those places. This is only
+%%% done within text mode, in math mode {\tt \string\|\/} is still
+%%% `$\|$'. But it is sure that one can always hyphenate between compound
+%%% words, so we insert |\-|. To allow the hyphenation in other parts of
+%%% the word though, we use |\allowhyphens| again.
+
+%%% \beginprog
+\def\|{% % break open a ligature (if not in math mode)
+ \relax
+ \ifmmode \Vert
+ \else \allowhyphens\-\allowhyphens
+ \fi
+ }
+%%% \endprog
+
+
+%%% \sect Don't use the dreaded `double quote special meaning' stuff of
+%%% |german.sty|. And use original umlauts. Already in M\"unster I voted
+%%% against it\dots
+
+%%% \beginprog
+\addto\extrasgerman{%
+ \mdqoff
+ \umlautlow
+ }
+%%% \endprog
+
+
+%%% \sect Define |\SwitchtoLanguage| for upward compatibility. It does
+%%% not really do the same, the old definition was more similar to
+%%% |\selectlanguage|. But other languages have to be declared
+%%% explicitely, that's not done by this macro file. So we just want to
+%%% make old documents processable.
+
+%%% \beginprog
+\def\SwitchtoLanguage#1{\language \csname l@#1\endcsname}
+%%% \endprog
+
+
+%%% \sect We are finished; switch to german language (to enable the new
+%%% extras defined above), restore the catcodes and prevent from following
+%%% garbage.
+
+%%% \beginprog
+\selectlanguage{german}
+
+\catcode`\@=\CatAtCode
+\catcode`\_=\CatUsCode
+
+\endinput
+%%% \endprog
+
+
+%%% %% \sect {\it Acknowledgements:}\quad I would like to thank XXX
+
+
+%%% \bye
+
+%%%
+%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% %
+%%% % $Log: deutsch.doc,v $
+%%% % Revision 1.4 1995/07/30 13:23:56 schrod
+%%% % Discard babel definition of \DeclareTextCommand before including
+%%% % german.sty, they are incompatible.
+%%% %
+%%% % Revision 1.3 1995/07/29 17:58:24 schrod
+%%% % Use german.sty, not germanb.sty. (babel 3.5 is not functional for
+%%% % plain TeX any more.) But we still want to use babel's macros, we have
+%%% % to load it's kernel for that.
+%%% %
+%%% % Revision 1.2 1995/03/13 23:18:10 schrod
+%%% % Started to manage this package with CVS. Made minor code cleanup.
+%%% %
+%%% % Revision 1.1 1994/10/16 16:57:30 schrod
+%%% % Merged macros from local.tex, codes.tex, and language.tex. This
+%%% % new file is mainly there to provide upward compatibility for our old
+%%% % documents.
+%%% %
+%%% %
+%%% %
+%%% % pre-CVS Version History:
+%%% %
+%%% % DATE WHO REMARKS
+%%% % 91-01-18 js set all extended characters to code invalid
+%%% % 90-12-23 js added the definition of \ExtendChar for usage in codes.tex.
+%%% % 90-10-06 js renamed from dlocal to local, it's now international,
+%%% % adapted to TeX 3:
+%%% % included codes.tex and langdef.tex if they exist,
+%%% % assumed that language.tex is already loaded,
+%%% % defined German parameters as a language hook,
+%%% % removed first \allowhyphens in \uml@ut,
+%%% % documented it with MAKEPROG.
+%%% % 89-10-27 js was reworked for ILaTeX
+%%% % 89-05-31 js defined \| as a separator for ligatures in text mode
+%%% % 87-10-01 js introduced \protect,
+%%% % set parameters for German page makeup
+%%% % 87-??-?? kg first release
+%%% %
+%%% % kg: Klaus Guntermann <gunterma@<schrod@iti.informatik.th-darmstadt.de>
+%%% % js: Joachim Schrod <schrod@iti.informatik.th-darmstadt.de>
+
+
+%%%
+%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% Local Variables:
+%%% mode: plain-TeX
+%%% TeX-master: t
+%%% TeX-brace-indent-level: 4
+%%% End:
diff --git a/macros/plain/contrib/js-misc/idverb.doc b/macros/plain/contrib/js-misc/idverb.doc
new file mode 100644
index 0000000000..79fb0b183d
--- /dev/null
+++ b/macros/plain/contrib/js-misc/idverb.doc
@@ -0,0 +1,194 @@
+% $Id: idverb.doc,v 1.1 1995/03/13 23:18:11 schrod Exp $
+%----------------------------------------------------------------------
+% Written by Joachim Schrod <schrod@iti.informatik.th-darmstadt.de>.
+% Copyright conditions see below.
+
+%
+% idverb.doc --- typeset identifiers verbatim
+%
+% [plain TeX in MAKEPROG]
+% (history at end)
+
+
+\input progdoc
+
+\input names.sty
+\def\v{{\tt \vbar\/}}
+
+
+
+\title{Identifiers Verbatim \`a la {\ttitlefont WEB}}
+
+
+
+\chap Introduction.
+
+This macro files allows to write identifiers in a \WEB{} like style,
+i.e.\ as {\tt \origvert identifier\origvert\/}. The identifiers are
+typeset verbatim in the monospace type face. The macros
+|\makevertother| and |\makevertactive| are available to activate and
+deactivate the special behaviour of the vertical bar.
+
+
+\sect This macro file uses the namespace |idv|.
+
+\beginprog
+\ifx \IdvLoaded\undefined
+ \def\IdvLoaded{$Revision: 1.1 $}
+\else \endinput \fi % <-- one line!
+\endprog
+
+
+\sect These macros are supported. Send bug reports, comments and
+repairs.
+
+The reference version may be retrieved via anonymous ftp from
+|ftp.th-darmstadt.de| [130.83.47.112], directory |pub/tex/plain|. It's
+placed there as a gzipped tar file. (The information on the
+IP~number is dated March 13, 1995. It might have changed, also this is very
+unlikely. Use your friendly nameserver.)
+
+
+\sect This is freely distributable 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.
+
+This software is distributed in the hope that it will be useful, but
+{\bf without any warranty\/}; without even the implied warranty of
+{\bf merchantability\/} or {\bf fitness for a particular purpose}. See
+the GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License in
+the file |License| along with this package; if not, write to the Free
+Software Foundation, Inc., 675~Mass Ave, Cambridge, MA~02139,~USA.
+
+
+\sect But before we start we declare some shorthands for category
+codes. By declaring the at sign~(`|@|') as well as the
+underscore~`(|_|)' as letters we can use them in our macros. (I agree
+with D.~Knuth that |\identifier_several_words_long| is more readable
+than |\IdentifierSeveralWordsLong| and in every case better than
+|\p@@@s|.) With the at sign we can use the ``private'' Plain macros
+and with the underscore we can make our own macros more readable. But
+as we have to restore these category codes at the end of this macro
+file we store their former values in control sequences. This method is
+better than to use a group because not all macros have to be defined
+global this way.
+
+Only the first macro file read in defines the |Cat| cseqs.
+
+\beginprog
+\ifx \CatEscape\undefined
+ \chardef\CatEscape=0
+ \chardef\CatOpen=1
+ \chardef\CatClose=2
+ \chardef\CatIgnore=9
+ \chardef\CatLetter=11
+ \chardef\CatOther=12
+ \chardef\CatActive=13 % \active of plain.tex
+ \chardef\CatInvalid=15
+
+ \chardef\CatAtCode=\catcode`\@
+ \chardef\CatUsCode=\catcode`\_
+\fi
+
+\catcode`\@=\CatLetter % top level macro file
+\catcode`\_=\CatLetter
+\endprog
+
+
+\sect Let's identify this macro file against the user and in the Log file.
+
+\beginprog
+\begingroup
+ \catcode`\$=\CatIgnore
+ \catcode`\:=\CatIgnore
+ \message{Verbatim identifiers, $Revision: 1.1 $}
+\endgroup
+\endprog
+
+
+\sect The usual verbatim macros use |\dospecials| to change the
+catcode of all special characters. We have to add `\v' to this list.
+The old meaning is stored in |\idv_OrigDospecials|.
+
+\beginprog
+\let\idv_OrigDospecials=\dospecials
+\begingroup
+ \def\do#1{\noexpand\do\noexpand#1}
+ \xdef\dospecials{\idv_OrigDospecials\do\|}
+\endgroup
+\let\idv_dospecials=\dospecials
+
+\def\makevertactive{\catcode`\|\CatActive \let\dospecials\idv_dospecials}
+\def\makevertother{\catcode`\|\CatOther \let\dospecials\idv_OrigDospecials}
+
+\makevertactive
+\endprog
+
+
+\sect Now we can define `\v'. This definition is a little bit tricky,
+as it redefines itself to |\egroup| to close the hbox. But if the hbox
+is ended, `\v' is restored to its original meaning. |\origvert| is
+given the original meaning of `\v'. |\vbar| is the character from the
+current font that has the ASCII code of a vertical bar, sometimes this
+{\it is\/} a vertical bar.
+
+\beginprog
+\let\origvert=|
+\chardef\vbar=`\|
+
+\def\idv_setup_verbatim{%
+ \def\do##1{\catcode`##1\CatOther}\idv_OrigDospecials
+ \parskip\z@skip \parindent\z@
+ \obeylines \obeyspaces \frenchspacing
+ \tt
+ }
+
+\def|{%
+ \leavevmode
+ \hbox\bgroup
+ \let\par\space \idv_setup_verbatim
+ \let|\egroup
+ }
+\endprog
+
+
+\sect We are finished;
+restore the catcodes and prevent from following garbage.
+
+\beginprog
+\catcode`\@=\CatAtCode
+\catcode`\_=\CatUsCode
+
+\endinput
+\endprog
+
+
+%% \sect {\it Acknowledgements:}\quad I would like to thank XXX
+
+
+\bye
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% $Log: idverb.doc,v $
+% Revision 1.1 1995/03/13 23:18:11 schrod
+% Started to manage this package with CVS. Made minor code cleanup.
+%
+
+%
+% Pre-CVS Log:
+%
+% 27 Jul 89 js Initial revision.
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+Local Variables:
+mode: plain-TeX
+TeX-master: t
+TeX-brace-indent-level: 4
+End:
diff --git a/macros/plain/contrib/js-misc/idverb.dvi b/macros/plain/contrib/js-misc/idverb.dvi
new file mode 100644
index 0000000000..edd0b08f21
--- /dev/null
+++ b/macros/plain/contrib/js-misc/idverb.dvi
Binary files differ
diff --git a/macros/plain/contrib/js-misc/idverb.tex b/macros/plain/contrib/js-misc/idverb.tex
new file mode 100644
index 0000000000..f40dbf860c
--- /dev/null
+++ b/macros/plain/contrib/js-misc/idverb.tex
@@ -0,0 +1,215 @@
+% $Id: idverb.doc,v 1.1 1995/03/13 23:18:11 schrod Exp $
+%----------------------------------------------------------------------
+% Written by Joachim Schrod <schrod@iti.informatik.th-darmstadt.de>.
+% Copyright conditions see below.
+
+%
+% idverb.doc --- typeset identifiers verbatim
+%
+% [plain TeX in MAKEPROG]
+% (history at end)
+
+
+%%%%
+%%%%
+%%%% These TeX macros were documented with the documentation system
+%%%% MAKEPROG and automatically converted to the current form.
+%%%% If you have MAKEPROG available you may transform it back to
+%%%% the original input: Remove every occurence of three percents
+%%%% and one optional blank from the beginning of a line and remove
+%%%% every line which starts with four percents. The following lex
+%%%% program will do this:
+%%%%
+%%%% %%
+%%%%
+%%%% ^%%%\ ? ;
+%%%% ^%%%%.*\n ;
+%%%%
+%%%% If you just want to print the documentation you may fetch
+%%%% the archive print-makeprog.tar.Z from ftp.th-darmstadt.de (directory
+%%%% pub/tex/latex). It contains *all* used styles -- but beware, they
+%%%% may not be in a documented form...
+%%%%
+%%%%
+%%% \input progdoc
+
+%%% \input names.sty
+%%% \def\v{{\tt \vbar\/}}
+
+
+
+%%% \title{Identifiers Verbatim \`a la {\ttitlefont WEB}}
+
+
+
+%%% \chap Introduction.
+
+%%% This macro files allows to write identifiers in a \WEB{} like style,
+%%% i.e.\ as {\tt \origvert identifier\origvert\/}. The identifiers are
+%%% typeset verbatim in the monospace type face. The macros
+%%% |\makevertother| and |\makevertactive| are available to activate and
+%%% deactivate the special behaviour of the vertical bar.
+
+
+%%% \sect This macro file uses the namespace |idv|.
+
+%%% \beginprog
+\ifx \IdvLoaded\undefined
+ \def\IdvLoaded{$Revision: 1.1 $}
+\else \endinput \fi % <-- one line!
+%%% \endprog
+
+
+%%% \sect These macros are supported. Send bug reports, comments and
+%%% repairs.
+
+%%% The reference version may be retrieved via anonymous ftp from
+%%% |ftp.th-darmstadt.de| [130.83.47.112], directory |pub/tex/plain|. It's
+%%% placed there as a gzipped tar file. (The information on the
+%%% IP~number is dated March 13, 1995. It might have changed, also this is very
+%%% unlikely. Use your friendly nameserver.)
+
+
+%%% \sect This is freely distributable 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.
+
+%%% This software is distributed in the hope that it will be useful, but
+%%% {\bf without any warranty\/}; without even the implied warranty of
+%%% {\bf merchantability\/} or {\bf fitness for a particular purpose}. See
+%%% the GNU General Public License for more details.
+
+%%% You should have received a copy of the GNU General Public License in
+%%% the file |License| along with this package; if not, write to the Free
+%%% Software Foundation, Inc., 675~Mass Ave, Cambridge, MA~02139,~USA.
+
+
+%%% \sect But before we start we declare some shorthands for category
+%%% codes. By declaring the at sign~(`|@|') as well as the
+%%% underscore~`(|_|)' as letters we can use them in our macros. (I agree
+%%% with D.~Knuth that |\identifier_several_words_long| is more readable
+%%% than |\IdentifierSeveralWordsLong| and in every case better than
+%%% |\p@@@s|.) With the at sign we can use the ``private'' Plain macros
+%%% and with the underscore we can make our own macros more readable. But
+%%% as we have to restore these category codes at the end of this macro
+%%% file we store their former values in control sequences. This method is
+%%% better than to use a group because not all macros have to be defined
+%%% global this way.
+
+%%% Only the first macro file read in defines the |Cat| cseqs.
+
+%%% \beginprog
+\ifx \CatEscape\undefined
+ \chardef\CatEscape=0
+ \chardef\CatOpen=1
+ \chardef\CatClose=2
+ \chardef\CatIgnore=9
+ \chardef\CatLetter=11
+ \chardef\CatOther=12
+ \chardef\CatActive=13 % \active of plain.tex
+ \chardef\CatInvalid=15
+
+ \chardef\CatAtCode=\catcode`\@
+ \chardef\CatUsCode=\catcode`\_
+\fi
+
+\catcode`\@=\CatLetter % top level macro file
+\catcode`\_=\CatLetter
+%%% \endprog
+
+
+%%% \sect Let's identify this macro file against the user and in the Log file.
+
+%%% \beginprog
+\begingroup
+ \catcode`\$=\CatIgnore
+ \catcode`\:=\CatIgnore
+ \message{Verbatim identifiers, $Revision: 1.1 $}
+\endgroup
+%%% \endprog
+
+
+%%% \sect The usual verbatim macros use |\dospecials| to change the
+%%% catcode of all special characters. We have to add `\v' to this list.
+%%% The old meaning is stored in |\idv_OrigDospecials|.
+
+%%% \beginprog
+\let\idv_OrigDospecials=\dospecials
+\begingroup
+ \def\do#1{\noexpand\do\noexpand#1}
+ \xdef\dospecials{\idv_OrigDospecials\do\|}
+\endgroup
+\let\idv_dospecials=\dospecials
+
+\def\makevertactive{\catcode`\|\CatActive \let\dospecials\idv_dospecials}
+\def\makevertother{\catcode`\|\CatOther \let\dospecials\idv_OrigDospecials}
+
+\makevertactive
+%%% \endprog
+
+
+%%% \sect Now we can define `\v'. This definition is a little bit tricky,
+%%% as it redefines itself to |\egroup| to close the hbox. But if the hbox
+%%% is ended, `\v' is restored to its original meaning. |\origvert| is
+%%% given the original meaning of `\v'. |\vbar| is the character from the
+%%% current font that has the ASCII code of a vertical bar, sometimes this
+%%% {\it is\/} a vertical bar.
+
+%%% \beginprog
+\let\origvert=|
+\chardef\vbar=`\|
+
+\def\idv_setup_verbatim{%
+ \def\do##1{\catcode`##1\CatOther}\idv_OrigDospecials
+ \parskip\z@skip \parindent\z@
+ \obeylines \obeyspaces \frenchspacing
+ \tt
+ }
+
+\def|{%
+ \leavevmode
+ \hbox\bgroup
+ \let\par\space \idv_setup_verbatim
+ \let|\egroup
+ }
+%%% \endprog
+
+
+%%% \sect We are finished;
+%%% restore the catcodes and prevent from following garbage.
+
+%%% \beginprog
+\catcode`\@=\CatAtCode
+\catcode`\_=\CatUsCode
+
+\endinput
+%%% \endprog
+
+
+%%% %% \sect {\it Acknowledgements:}\quad I would like to thank XXX
+
+
+%%% \bye
+
+%%%
+%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% %
+%%% % $Log: idverb.doc,v $
+%%% % Revision 1.1 1995/03/13 23:18:11 schrod
+%%% % Started to manage this package with CVS. Made minor code cleanup.
+%%% %
+
+%%% %
+%%% % Pre-CVS Log:
+%%% %
+%%% % 27 Jul 89 js Initial revision.
+
+
+%%%
+%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% Local Variables:
+%%% mode: plain-TeX
+%%% TeX-master: t
+%%% TeX-brace-indent-level: 4
+%%% End:
diff --git a/macros/plain/contrib/js-misc/js-misc.dvi b/macros/plain/contrib/js-misc/js-misc.dvi
new file mode 100644
index 0000000000..5d5c97f44e
--- /dev/null
+++ b/macros/plain/contrib/js-misc/js-misc.dvi
Binary files differ
diff --git a/macros/plain/contrib/js-misc/js-misc.tex b/macros/plain/contrib/js-misc/js-misc.tex
new file mode 100644
index 0000000000..c39e7c257f
--- /dev/null
+++ b/macros/plain/contrib/js-misc/js-misc.tex
@@ -0,0 +1,244 @@
+% $Id: js-misc.tex,v 1.1 1995/03/13 23:18:12 schrod Exp $
+%--------------------------------------------------
+% Written by Joachim Schrod <schrod@iti.informatik.th-darmstadt.de>.
+
+% This is a german description for cassette.tex & schild.tex.
+
+
+% Manual fuer ``Kleine TeX-Makros, aufbauend auf PLAIN'':
+% Tonbandkassetten-Schilder
+% Buecherruecken-Schilder
+%
+% [Formate]
+
+
+\berichtformat
+
+\input idverb
+\def\.{$\bullet$}
+
+
+
+
+\titel{}{Kleine \TeX{}-Makros}{, aufbauend auf {\tt PLAIN}}
+\autor{Joachim Schrod}
+\datum{Rödermark, den 08.02.88}
+
+
+
+
+
+\kapitel{Beschriftung von Tonband-Kassetten}{}
+
+Die Beschriftung von Tonband-Kassetten wird durch
+|\input cassette| geladen.
+Durch diese Makros werden Schilder erzeugt, die
+in eine Kassettenhülle gelegt werden können.
+%Jedes Schild wird auf eine einzelne Seite gedruckt.
+Das Layout eines Schildes ist in Abb.~1.1 zu sehen.
+Das Schild wird an den äußeren Rändern ausgeschnitten
+und entlang der horizontalen Linien gefaltet.
+
+\abbvoll{
+{\input cassette
+\let\eject=\relax
+\begincassette{Kassettenname}
+\titelcass{Frontseite mit Titeln}
+\seitea{Musikstücke der Seite A}
+\seiteb{Musikstücke der Seite B}
+\endcassette
+}}{Layout eines Kassettenschildes}
+
+\noindent Folgende Befehle erzeugen das gewünschte Layout:
+
+\beginitemize
+
+\item{\.} |\begincassette|\quad (1 Parameter)\nl
+Mit diesem Befehl beginnt die Beschreibung eines Kassettenschilds.
+Der Parameter ist der Name der Kassette, der in |\cassfont|
+(Kapitälchen, 10pt) gesetzt wird.
+
+\item{\.} |\titelcass|\quad (1 Parameter)\nl
+Dieser Befehl gibt den Titel der Kassette an, der auf die
+Frontseite gesetzt wird.
+Der Titel wird in |\titfont| (Serifenlose, 10pt) gesetzt.
+Dieser Befehl ist optional, da Titel auch durch |\titel| (s.u.)\
+angegeben werden können.
+
+\item{\.} |\seitea|\quad (1 Parameter)\nl
+Durch den Parameter von |\seitea| wird die Seite~A der
+Kassette beschrieben.
+Diese Beschreibung umfaßt einen optionalen Titel und eine
+Folge von Musikstücken.
+Sie ist zeilenorientiert, d.h.\ jeweils ein Musikstück
+(mit eventuellem Interpret) steht auf einer Eingabezeile.
+Wenn der Text zu lang wird, kann durch die Angabe von |%|
+am Zeilenende die Folgezeile mitbenutzt werden.
+Innerhalb eines Musikstücks kann durch |\nl| gezielt
+umgebrochen werden, wenn man mit dem von \TeX{} gewähltem
+Umbruch nicht zufrieden ist.
+Die Musikstücke werden in |\norm| (Serifenlose, 8pt) gesetzt.
+Dieser Befehl ist optional.
+\itempar
+Folgende Hilfsbefehle stehen zur Beschreibung zur Verfügung:
+
+{\nextitemlevel\itemskip=0pt
+\item{--} |\cnt|\quad (1 Parameter, beendet durch |:|)\nl
+Mit |\cnt| kann die Zählerstellung des Beginns eines
+Musikstücks angegeben werden.
+Die angegebene Zahl wird in eckige Klammern gesetzt.
+
+\item{--} |\von|\quad (1 Parameter, beendet durch |:|)\nl
+Durch |\von| kann ein Interpret dem Musikstück vorgestellt werden.
+Ein Beispiel für eine vollständige Angabe eines Musikstücks
+kann also
+$$
+ \hbox{|\von Led Zeppelin: Stairway to heaven|}
+$$
+sein.
+Der Interpret wird in |\intfont| (Serifenlose Kursiv, 8pt) gesetzt.
+
+\item{--} |\titel|\quad (1 Parameter)\nl
+Mit diesem Befehl kann in die Seite eine Angabe eines Titels
+(z.B.~einer Schallplatte) übernommen werden.
+Dieser Titel wird gleichzeitig auf die Frontseite gesetzt.
+Innerhalb des Titels kann |\von| zur Angabe eines Interpreten
+benutzt werden.
+Dieser Befehl kann mehrmals vorkommen.
+Der Titel wird auf der Seite in |\titfont@page| (Kapitälchen, 8pt)
+gesetzt, wobei der Interpret in Versalien gesetzt wird.
+Auf der Frontseite wird der Titel in |\titfont| (Serifenlose, 10pt)
+gesetzt, wobei der Interpret in |\titintfont| (Serifenlose Kursiv, 10pt)
+gesetzt wird.
+\par}
+
+\item{\.} |\seiteb|\quad (1 Parameter)\nl
+Dieser Befehl beschreibt die Seite~B der Kassette.
+Die Beschreibungsmöglichkeiten sind mit denen von |\seitea|
+identisch.
+
+\item{\.} |\endcassette|\nl
+Durch diesen Befehl wird die Beschreibung des Kassettenschildes
+beendet und das Kassettenschild gesetzt.
+Gleichzeitig wird eine neue Seite begonnen.
+
+\enditemize
+
+
+
+
+
+\kapitel{Beschriftung von Bücherrücken}{}
+
+Die Beschriftung von Bücherrücken wird durch
+|\input schild| geladen.
+Durch diese Makrodatei ist es möglich Schilder für
+Bücherrücken zu erzeugen, die anschließend auf die Bücher
+geklebt werden können.
+Das Layout eines Schildes ist in der Abb.~2.1 gezeigt,
+es wird an den äußeren Rändern ausgeschnitten.
+
+\def\schild{%
+ \vbox{%
+ \hrule
+ \hbox{%
+ \vrule
+ \vbox to 10mm{%
+ \vfill
+ \hbox{\kern 25mm \svtnrm Name des Buches\kern 25mm}%
+ \vfill
+ }%
+ \vrule
+ }%
+ \hrule
+ }%
+ }
+
+\def\vertlen{%
+ \llap{%
+ \vbox to 10mm{%
+ \vfill
+ \hbox{{\tt \#1\/} mm }%
+ \vfill
+ }
+ }%
+ }
+\def\vertmass{%
+ \vbox{%
+ \hrule width 4mm
+ \hbox{%
+ \vertlen
+ \kern 2mm
+ \vrule height 10mm
+ }%
+ \hrule width 4mm
+ }%
+ }
+
+\def\horizmass{%
+ \hbox{%
+ \vrule height 2mm depth 2mm
+ \vtop{%
+ \hrule width 25mm
+ \kern 2mm
+ \hbox to 25mm{\ctr{\tt \char`\\rand}}%
+ }%
+ \vrule height 2mm depth 2mm
+ }%
+ }
+
+\abbvoll{
+ \offinterlineskip
+ \hbox{%
+ \llap{%
+ \vertmass
+ \hskip 2mm
+ }%
+ \schild
+ }%
+ \vskip 2mm
+ \hbox{%
+ \horizmass
+ \phantom{\svtnrm Name des Buches}%
+ \horizmass
+ }%
+}{Layout eines Buchrückenschildes}
+
+\noindent Um das Buchrückenschild zu erzeugen, existieren
+folgende Makros und Parameter:
+
+\beginitemize
+
+\item{\.} |\schild|\quad (2 Parameter)\nl
+Durch dieses Makro wird ein Schild erzeugt.
+Der erste Parameter ist die Höhe des Schildes, der zweite
+der Text, der auf das Buchrückenschild soll.
+
+\item{\.} |\rand|\nl
+|\rand| ist eine Dimensionsangabe, die beschreibt, wieviel
+Platz zwischen dem Buchnamen und dem Rand des Schildes
+horizontal verbleibt.
+
+\item{\.} |\namfont|\nl
+In |\namfont| wird der Buchname gesetzt.
+
+\enditemize
+
+
+
+
+
+\bye
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% $Log: js-misc.tex,v $
+% Revision 1.1 1995/03/13 23:18:12 schrod
+% Started to manage this package with CVS. Made minor code cleanup.
+%
+
+%
+% Pre-CVS Log:
+%
+% 88-02-08 js Initial revision
diff --git a/macros/plain/contrib/js-misc/names.sty b/macros/plain/contrib/js-misc/names.sty
new file mode 100644
index 0000000000..57452c17b5
--- /dev/null
+++ b/macros/plain/contrib/js-misc/names.sty
@@ -0,0 +1,95 @@
+% $Id: names.sty,v 1.2 1995/03/13 23:18:13 schrod Exp $
+%------------------------------------------------------------
+
+%
+% Verfuegbarkeit von haeufigen Abkuerzungen/Logos in
+% LaTeX und Formate bei Grund-Schriftgroesse 10pt.
+%
+% alle Logos nur in Roman
+% TeX related Logos:
+% \TeX
+% \INITeX
+% \Plain Plain TeX
+% \LaTeX
+% \BibTeX
+% \SliTeX
+% \MakeIndex (kursiv)
+% \AmSTeX AmS-TeX
+% \LAMSTeX LAmS-TeX
+% \MF METAFONT
+% \INIMF
+% \WEB
+% \CWEB
+% \TIE
+% \stTeX
+% \stMF
+% Dateitypen (alle in teletype):
+% \LOG
+% \DVI
+% \FMT
+% \TFM
+% \GF
+% \PK
+% \PXL
+% andere Logos:
+% \C++
+
+
+\font\tenlogo=logo10
+\let\logo=\tenlogo
+\ifx \mc\undefined \let\mc=\small \fi % fuer LaTeX, `medium caps'
+
+
+% FIXME: should the space factor be set to 1000 afterwards?
+% is it a global value? otherwise it would be a faulty design within TeX...
+\def\TeX{{\rm T\kern-.1667em\lower.5ex\hbox{E}\kern-.125emX}}
+\def\INITeX{{\rm INI\TeX}}
+
+\def\Plain{{\rm Plain~\TeX}}
+
+% LaTeX-Definition mit Original-TeX-Logo!
+% Entspricht nicht der Definition von L. Lamport, ist aber konsistenter
+\def\LaTeX{{\rm L\kern-.36em\raise.3ex\hbox{\sc a}\kern-.15em\TeX}}
+\def\BibTeX{{\rm B\kern-.05em{\sc i\kern-.025em b}\kern-.08em\TeX}}
+\def\SliTeX{{\rm S\kern-.06em{\sc l\kern-.035em i}\kern-.06em\TeX}}
+\def\MakeIndex{{\it MakeIndex\/}}
+
+\def\AmSTeX{%
+ $\cal A\kern-.1667em\lower.5ex\hbox{$\cal M$}\kern-.125em S$%
+ -\TeX
+ }
+\def\LAMSTeX{%
+ L\raise.42ex\hbox{$\scriptstyle\kern-.3em\cal A$}\kern-.2em
+ \lower.376ex\hbox{$\cal M$}\kern-.125em $\cal S$%
+ -\TeX
+ }
+
+
+\def\MF{{\logo META}\-{\logo FONT\/}}
+\def\INIMF{{\mc INI}{\logo MF}}
+
+
+\def\WEB{{\tt WEB\/}}
+\def\CWEB{{\mc CWEB}}
+\def\TIE{{\tt TIE\/}}
+
+
+\def\stTeX{{\sc st\rm\kern-0.13em\TeX}} % unser stTeX (TeXsys)
+\def\stMF{{\sc st}{\logo MF}} % unser stMF
+
+
+\def\LOG{{\tt LOG\/}}
+\def\DVI{{\tt DVI\/}}
+\def\FMT{{\tt FMT\/}}
+\def\TFM{{\tt TFM\/}}
+
+\def\GF{{\tt GF\/}}
+\def\PK{{\tt PK\/}}
+\def\PXL{{\tt PXL\/}}
+
+
+
+\def\C++{C\raise .4ex\hbox{$\scriptstyle +\!+$}}
+
+
+\endinput
diff --git a/macros/plain/contrib/js-misc/schild.tex b/macros/plain/contrib/js-misc/schild.tex
new file mode 100644
index 0000000000..9bc3ef237b
--- /dev/null
+++ b/macros/plain/contrib/js-misc/schild.tex
@@ -0,0 +1,84 @@
+% $Id: schild.tex,v 1.1 1995/03/13 23:18:13 schrod Exp $
+%--------------------------------------------------------
+
+
+% Rueckenschild fuer ein gelumbacktes Buch:
+%
+% \buchschild#1#2 #1 == Breite in mm #2 == Name des Buches
+%
+%
+% Tuerschilder ITI:
+%
+% \tuerschild#1 #1 == Text (ueblicherweise in Grossbuchstaben)
+% falls zu lang, Font auf magstep3 reduzieren
+
+
+\newdimen\rand
+\rand=25mm
+
+\let\buchfont=\svtnrm
+\font\tuerfont=cmssdc10 scaled \magstep4 % magstep3, falls zu lang
+\let\tuerschildfont=\tuerfont
+
+
+
+\def\buchschild#1#2{%
+ \vbox{%
+ \offinterlineskip
+ \hrule
+ \hbox{%
+ \vrule
+ \vbox to #1mm{%
+ \vfill
+ \hbox{\kern\rand \buchfont #2\kern\rand}%
+ \vfill
+ }%
+ \vrule
+ }%
+ \hrule
+ }%
+ \vskip 2cm
+ }
+
+\def\tuerschild#1{%
+ \vbox{%
+ \offinterlineskip
+ \hrule
+ \hbox{%
+ \vrule
+ \vbox to 10mm{%
+ \rand=15mm
+ \vfill
+ \hbox to 155mm{\kern\rand \tuerschildfont #1\hfill}%
+ \vfill
+ }%
+ \vrule
+ }%
+ \hrule
+ }%
+ \vskip 2cm
+ }
+
+
+
+\raggedbottom
+\nopagenumbers
+
+
+\endinput
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% $Log: schild.tex,v $
+% Revision 1.1 1995/03/13 23:18:13 schrod
+% Started to manage this package with CVS. Made minor code cleanup.
+%
+
+%
+% Pre-CVS Log:
+%
+% 92-04-15 cd renamed \schild to \buchschild
+% introduced \tuerschild
+% 88-02-08 js first release
diff --git a/macros/plain/contrib/js-misc/sperr.tex b/macros/plain/contrib/js-misc/sperr.tex
new file mode 100644
index 0000000000..4e6b090230
--- /dev/null
+++ b/macros/plain/contrib/js-misc/sperr.tex
@@ -0,0 +1,116 @@
+% $Id: sperr.tex,v 1.2 1995/04/16 23:27:04 schrod Exp $
+%---------------------------------------------------------
+% Written by Joachim Schrod <schrod@iti.informatik.th-darmstadt.de>.
+% This file is distributed without any copyright restriction.
+
+
+%
+% Makro-Datei zum Sperren von Zeichenfolgen.
+%
+% Bitte sperrt damit keine Gemeinen.
+%
+% Joachim Schrod
+%
+
+%
+% Benutzung: \sperr{TEXT}{KERNING}
+% Wenn in TEXT mehrere Token als eines behandelt werden sollen
+% (z.B. Umlaute), m\"ussen diese Tokens geklammert werden.
+%
+
+
+\ifx \CatEscape\undefined
+ \chardef\CatEscape=0
+ \chardef\CatOpen=1
+ \chardef\CatClose=2
+ \chardef\CatIgnore=9
+ \chardef\CatLetter=11
+ \chardef\CatOther=12
+ \chardef\CatActive=13 % \active of plain.tex
+ \chardef\CatInvalid=15
+
+ \chardef\CatAtCode=\catcode`\@
+ \chardef\CatUsCode=\catcode`\_
+\fi
+
+\catcode`\@=\CatLetter % top level macro file
+\catcode`\_=\CatLetter
+
+\begingroup
+ \catcode`\$=\CatIgnore
+ \catcode`\:=\CatIgnore
+ \message{Text sperren, $Revision: 1.2 $}
+\endgroup
+
+
+\let\end_list=\relax
+\edef\empty_list{\end_list}
+
+\def\split#1#2\end_list{%
+ \edef\sec_char{#1}%
+ \toks@={#2\end_list}%
+ }
+
+\def\do_split{%
+ \expandafter \split \the\toks@ \end_list
+ }
+
+\def\next_char{%
+ \edef\first_char{\sec_char}%
+ \do_split
+ }
+
+
+
+\newdimen\sperr_width
+
+\def\sperr#1#2{% % Text, Sperrbreite
+ \toks@={#1\end_list}%
+ \sperr_width=#2\relax
+ \do_split
+ \next_char % initialize pipeline
+ \ifx \sec_char\empty_list #1% % nur 1 Zeichen
+ \else \do_sperr
+ \fi
+ }
+
+
+\newif \if@loop
+
+\def\do_sperr{%
+ \loop
+ \set_char % Zeichen und nachfolgendes Kerning setzen
+ \next_char
+ \ifx \sec_char\empty_list
+ \first_char
+ \@loopfalse
+ \else \@looptrue
+ \fi
+ \if@loop
+ \repeat
+ }
+
+
+
+
+\newbox\kern_box
+\newdimen\kern_width
+
+\def\set_char{%
+ \setbox\kern_box=\hbox{\first_char\sec_char}%
+ \kern_width=\wd\kern_box
+ \setbox\kern_box=\hbox{\hbox{\first_char}\hbox{\sec_char}}%
+ \advance \kern_width by -\wd\kern_box
+ \advance \kern_width by \sperr_width
+ \first_char \kern\kern_width
+ }
+
+
+
+
+\catcode`\@=\CatAtCode
+\catcode`\_=\CatUsCode
+
+
+
+\endinput
diff --git a/macros/plain/contrib/js-misc/xfig.tex b/macros/plain/contrib/js-misc/xfig.tex
new file mode 100644
index 0000000000..95a86cff5e
--- /dev/null
+++ b/macros/plain/contrib/js-misc/xfig.tex
@@ -0,0 +1,626 @@
+% $Id: xfig.tex,v 1.4 1995/05/07 16:52:05 schrod Exp $
+%------------------------------------------------------------
+% Hacked together by Joachim Schrod <schrod@iti.informatik.th-darmstadt.de>
+% Put into public domain.
+
+%
+% Support for xfig pictures in plain TeX
+% orginally written for transfig 2.1.7
+% support last checked for transfig 3.1.3
+%
+
+
+% USAGE:
+%
+% To include xfig figures in plain TeX documents, just input these
+% macros and then input the (La)TeX file you got by exporting your
+% figure as `LaTeX picture' or by calling fig2dev with option `-L
+% latex'. No other ``language'' is supported by these macros; in
+% particular, `Combined PS/LaTeX' is not supported.
+
+% You can select the used types for text by redefining some macros:
+% \FigFontType<type> (with <type> equal `rm', `bf', `it', `sf', or
+% `tt') must expand to the external font name that's used for the
+% respective xfig font selection.
+% \FigFontDefault specifies the font that's used for the `Default'
+% font selection. That macro is only accessed if you use the new xfig,
+% or if you repaired the no-NFSS code of fig2dev (in texfonts.h, see
+% comments at \xfig@bindSetFigFont implementation below).
+%
+% At the start of each figure \pictureHook is evaluated, you might
+% want to bind that to some code that does document-specific setup.
+% Each figure is set in a group, so you can rebind other control
+% sequences in that hook.
+
+
+% ------------------------------------------------------------
+
+% IMPLEMENTATION NOTES:
+%
+% The macros might not work in all circumstances, it's updated and improved
+% by need...
+%
+% In particular:
+% -- The font selection in \SetFigFont could be improved.
+% -- The environment code (\begin/\end) is very rough and should
+% check for erroneous input.
+
+
+% Code structure:
+%
+% After general setup, code from DEK that implements most parts of
+% LaTeX's picture environment is used. Then we add definitions for the
+% missing and xfig-specific tags.
+%
+% In Emacs, each section starts on a new page.
+
+
+% ============================================================
+
+% standard setup:
+
+\ifx \CatEscape\undefined
+ \chardef\CatEscape=0
+ \chardef\CatOpen=1
+ \chardef\CatClose=2
+ \chardef\CatIgnore=9
+ \chardef\CatLetter=11
+ \chardef\CatOther=12
+ \chardef\CatActive=13 % \active of plain.tex
+ \chardef\CatInvalid=15
+
+ \chardef\CatAtCode=\catcode`\@
+ \chardef\CatUsCode=\catcode`\_
+\fi
+
+\catcode`\@=\CatLetter % top level macro file
+
+\begingroup
+ \catcode`\$=\CatIgnore
+ \catcode`\:=\CatIgnore
+ \message{xfig pictures, $Revision: 1.4 $}
+\endgroup
+
+
+% This macro file allocates registers and might be read in multiple
+% times, in groups. (Actually, this occured for the first time when we
+% wanted to use xfig pictures in Texinfo documents. There they are
+% typeset in a `tex' environment, and xfig is read in anew for each
+% figure.) As all register allocations are globally, we define some
+% macros that help us to define them only once.
+
+\def\xfig@newskip#1{%
+ \ifx #1\undefined \csname newskip\endcsname #1\fi
+ }
+\def\xfig@newdimen#1{%
+ \ifx #1\undefined \csname newdimen\endcsname #1\fi
+ }
+\def\xfig@newcount#1{%
+ \ifx #1\undefined \csname newcount\endcsname #1\fi
+ }
+\def\xfig@newbox#1{%
+ \ifx #1\undefined \csname newbox\endcsname #1\fi
+ }
+
+
+% ============================================================
+
+%% First comes an implementation of the picture environment's features,
+%% by the Grand Wizard of TeX Arcana himself. This is from picture.tex,
+%% I deleted the \cpic macro and the squines. \makebox did not support
+%% position specifiers, I substituted the definition by the one from
+%% LaTeX2e. In addition, all register allocations are made with the
+%% macros defined above.
+
+% --------------------------------------------------
+
+% Pictures (a subset of \LaTeX's conventions, plus squines)
+
+%% [start of change to DEK's code]
+%%
+%% At's catcode is changed above already.
+%% Allocation info for registers should go to log file.
+
+% \chardef\CatcodeAt=\catcode`\@
+% \catcode`\@=11 % enable private control sequences
+% \def\wlog#1{} % don't put allocation info into the log
+
+%% [end of change]
+
+\xfig@newskip\hsssglue \hsssglue=0pt plus 1fill minus 1fill
+\def\hsss{\hskip\hsssglue}
+
+\xfig@newdimen\unitlength \xfig@newdimen\linethickness
+\xfig@newdimen\@picheight \xfig@newdimen\@xdim \xfig@newdimen\@ydim \xfig@newdimen\@len
+\xfig@newdimen\@save
+\xfig@newcount\@multicount \xfig@newcount\@xarg \xfig@newcount\@yarg
+\xfig@newbox\@picbox \xfig@newbox\@mpbox
+
+\font\tenln=line10 \font\tenlnw=linew10
+\font\tencirc=lcircle10 \font\tencircw=lcirclew10
+
+\xfig@newdimen\@halfwidth
+
+\def\thinlines{\let\linefont=\tenln \let\circlefont=\tencirc
+ \linethickness=\fontdimen8\linefont \@halfwidth .5\linethickness}
+\def\thicklines{\let\linefont=\tenlnw \let\circlefont=\tencircw
+ \linethickness=\fontdimen8\linefont \@halfwidth .5\linethickness}
+\thinlines
+
+\def\beginpicture(#1,#2)(#3,#4){\@picheight=#2\unitlength
+ \setbox\@picbox=\hbox to#1\unitlength\bgroup \let\line=\@line
+ \kern-#3\unitlength \lower#4\unitlength\hbox\bgroup\ignorespaces}
+\def\endpicture{\egroup\hss\egroup
+ \ht\@picbox=\@picheight \dp\@picbox=\z@
+ \leavevmode\box\@picbox}
+
+\def\put(#1,#2)#3{\raise#2\unitlength\rlap{\kern#1\unitlength #3}\ignorespaces}
+
+\def\multiput(#1,#2)(#3,#4)#5#6{\@multicount=#5\relax
+ \@xdim=#1\unitlength \@ydim=#2\unitlength \setbox\@mpbox=\hbox{#6}%
+ \loop\ifnum\@multicount>0
+ \raise\@ydim\rlap{\kern\@xdim \unhcopy\@mpbox}%
+ \advance\@xdim#3\unitlength \advance\@ydim#4\unitlength
+ \advance\@multicount\m@ne \repeat\ignorespaces}
+
+\def\@ifnextchar#1#2#3{\let\@tempe=#1\def\@tempa{#2}\def\@tempb{#3}\futurelet
+ \@tempc\@ifnch}
+\def\@ifnch{\ifx \@tempc \@sptoken \let\@tempd\@xifnch
+ \else \ifx \@tempc \@tempe\let\@tempd\@tempa\else\let\@tempd\@tempb\fi
+ \fi \@tempd}
+
+%% [start of change to DEK's code]
+%%
+%% \makebox is called with an optional argument, the position
+%% specifier. The code below is copied from the LaTeX2e beta-test
+%% release.
+
+\def\makebox(#1,#2){%
+ \@ifnextchar[{\@makebox(#1,#2)}{\@makebox(#1,#2)[]}}
+
+\def\@nnil{\@nil}
+\def\@fornoop#1\@@#2#3{}
+\def\@tfor#1:=#2\do#3{\def\@fortmp{#2}\ifx\@fortmp\empty \else
+ \@tforloop#2\@nil\@nil\@@#1{#3}\fi}
+\def\@tforloop#1#2\@@#3#4{\def#3{#1}\ifx #3\@nnil
+ \let\@nextwhile\@fornoop \else
+ #4\relax\let\@nextwhile\@tforloop\fi\@nextwhile#2\@@#3{#4}}
+
+\long\def\@makebox(#1,#2)[#3]#4{%
+ \vbox to#2\unitlength
+ {\let\mb@b\vss \let\mb@l\hss\let\mb@r\hss
+ \let\mb@t\vss
+ \@tfor\@tempa :=#3\do{%
+ \if s\@tempa
+ \let\mb@l\relax\let\mb@r\relax
+ \else
+ \expandafter\let\csname mb@\@tempa\endcsname\relax
+ \fi}%
+ \mb@t
+ \hbox to #1\unitlength{\mb@l #4\mb@r}%
+ \mb@b
+ \kern\z@}}
+
+%% [end of change]
+
+\newif\ifneg
+\def\@line(#1,#2)#3{\@xarg=#1 \@yarg=#2 \@len=#3\unitlength \leavevmode
+ \ifnum\@xarg<0 \reverseline \else \negfalse \@ydim=\z@\fi
+ \ifnum\@xarg=0 \@vline
+ \else\ifnum\@yarg=0 \@hline \else\@sline\fi\fi
+ \ifneg\kern-\@len\else\@save=\@ydim\fi}
+\def\reverseline{\negtrue \kern-\@len \@xarg=-\@xarg
+ \@ydim=\@len \multiply\@ydim\@yarg \divide\@ydim\@xarg \@yarg=-\@yarg}
+
+\def\@hline{\vrule height.5\linethickness depth.5\linethickness width\@len}
+\def\@vline{\kern-.5\linethickness\vrule width\linethickness
+ \ifnum\@yarg<0 height\z@ depth\else depth\z@ height\fi\@len
+ \kern-.5\linethickness}
+
+\def\@sline{\setbox\@picbox=\hbox{\linefont \count@=\@xarg \multiply\count@ 8
+ \ifnum\@yarg>0 \advance\count@\@yarg \advance\count@-9
+ \else \advance\count@-\@yarg \advance\count@ 55 \fi \char\count@}%
+ \ifnum\@yarg<0 \@picheight=-\ht\@picbox \advance\@ydim\@picheight
+ \else \@picheight=\ht\@picbox \fi
+ \@xdim=\wd\@picbox \@save=\@ydim
+ \loop\ifdim\@xdim<\@len \raise\@ydim\copy\@picbox
+ \advance\@xdim\wd\@picbox \advance\@ydim\@picheight \repeat
+ \advance\@xdim-\@len \kern-\@xdim
+ \multiply\@xdim\@yarg \divide\@xdim\@xarg \advance\@ydim-\@xdim
+ \raise\@ydim\box\@picbox}
+
+\def\vector(#1,#2)#3{\@line(#1,#2){#3}%
+ \ifnum\@xarg=0 \@vvector \else\ifnum\@yarg=0 \@hvector \else\@svector\fi\fi}
+\def\@hvector{\ifneg\rlap{\linefont\char27}\else
+ \smash{\llap{\linefont\char45}}\fi} % we have to smash because of font bug
+\def\@vvector{\ifnum\@yarg<0 \raise-\@len\rlap{\linefont\char63}%
+ \else\setbox\@picbox=\rlap{\linefont\char54}\advance\@len-\ht\@picbox
+ \raise\@len\box\@picbox\fi}
+
+\def\@svector{\setbox\@picbox=\hbox to\z@{\linefont
+ \ifnum\@yarg<0 \count@=55 \@yarg=-\@yarg \else\count@=-9 \fi
+ \ifneg\multiply\@xarg16 \multiply\@yarg2
+ \else\hss % \llap
+ \ifnum\@xarg>2 \multiply\@xarg9 \multiply\@yarg2 \advance\count@29
+ \else\ifnum\@yarg>2 \multiply\@xarg16 \multiply\@yarg9 \advance\count@-20
+ \else\multiply\@xarg24 \multiply\@yarg3 \fi\fi\fi
+ \advance\count@\@xarg \advance\count@\@yarg \char\count@
+ \ifneg\hss\fi}% \rlap
+ \raise\@save\box\@picbox}
+
+\def\disk#1{\@len=#1\unitlength \count@='160 \@diskcirc}
+\def\circle#1{\@len=#1\unitlength \count@='140 \@diskcirc}
+\def\@diskcirc{\setbox\@picbox=\hbox{\circlefont\char\count@}\@xdim=\wd\@picbox
+ \leavevmode \ifdim\@len>15.499\@xdim \@bigdc \else \@smalldc\fi}
+\def\@bigdc{\ifnum\count@<'160 \@bigcirc
+ \else \@len=15\@xdim \@diskcirc\fi}
+\def\@smalldc{{\advance\@len-.5\@xdim
+ \loop\ifdim\@xdim<\@len \advance\count@\@ne \advance\@xdim\wd\@picbox\repeat
+ \hbox{\circlefont\char\count@}}}
+\def\@bigcirc{{\circlefont\count@=15
+ \setbox\@picbox=\hbox{\char\count@}\@xdim=\wd\@picbox
+ \ifdim\@len>2.5\@xdim \@len=2.5\@xdim\fi
+ \advance\@len-.125\wd\@picbox
+ \loop\ifdim\@xdim<\@len \advance\count@ 4 \advance\@xdim.25\wd\@picbox\repeat
+ \@ydim=.5\@xdim \advance\@ydim.5\linethickness
+ \setbox\@picbox=\vbox{\hbox{\char\count@\advance\count@-3\char\count@}%
+ \nointerlineskip
+ \hbox{\advance\count@\m@ne\char\count@\advance\count@\m@ne\char\count@}}%
+ \kern-\@ydim\lower\@ydim\box\@picbox}}
+
+\newif\ifovaltl \newif\ifovaltr \newif\ifovalbl \newif\ifovalbr
+\ovaltltrue \ovaltrtrue \ovalbltrue \ovalbrtrue
+\def\oval(#1,#2){\@xdim=#1\unitlength \@ydim=#2\unitlength
+ {\circlefont \setbox\@picbox=\hbox{\char0}
+ \ifdim\@xdim<\wd\@picbox \@xdim=\wd\@picbox\fi
+ \ifdim\@ydim<\wd\@picbox \@ydim=\wd\@picbox\fi
+ \@save=\@xdim \ifdim\@ydim<\@save \@save=\@ydim \fi
+ \count@=39
+ \loop \setbox\@picbox=\hbox{\char\count@}\ifdim\@save<\wd\@picbox
+ \advance\count@-4 \repeat
+ \setbox\strutbox=\hbox{\vrule height\ht\@picbox depth\dp\@picbox width\z@
+ \kern\wd\@picbox}%
+ \@save=.5\wd\@picbox \advance\@save-.5\linethickness
+ \setbox0=\hbox to\@xdim{\ifovaltl\char\count@\else\strut\fi
+ \kern-\@save\leaders\hrule height\ifovaltl\linethickness\else\z@\fi\hfil
+ \leaders\hrule height\ifovaltr\linethickness\else\z@\fi\hfil\kern\@save
+ \ifovaltr\advance\count@-3\char\count@\else\strut\fi\kern-\wd\@picbox}%
+ \advance\count@\m@ne
+ \setbox2=\hbox to\@xdim{\ifovalbl\char\count@\else\strut\fi
+ \kern-\@save\leaders\hrule height\ifovalbl\linethickness\else\z@\fi\hfil
+ \leaders\hrule height\ifovalbr\linethickness\else\z@\fi\hfil\kern\@save
+ \ifovalbr\advance\count@\m@ne\char\count@\else\strut\fi\kern-\wd\@picbox}%
+ \@save=\@ydim \advance\@save-\wd\@picbox \divide\@save 2
+ \setbox\@picbox=\vbox{\box0\nointerlineskip
+ \hbox to\@xdim{\vrule height\@save width\ifovaltl\linethickness\else\z@\fi
+ \hfil\ifovaltr\vrule width\linethickness\kern-\linethickness\fi}%
+ \nointerlineskip
+ \hbox to\@xdim{\vrule height\@save width\ifovalbl\linethickness\else\z@\fi
+ \hfil\ifovalbr\vrule width\linethickness\kern-\linethickness\fi}%
+ \nointerlineskip\box2}%
+ \@save=.5\@ydim \advance\@save.5\linethickness \leavevmode
+ \kern-.5\@xdim \kern-.5\linethickness \lower\@save\box\@picbox}}
+
+% ============================================================
+
+%% More picture environment tags, output by fig2dev
+
+
+%% The framebox tag was missing in DEK's code. Below is a copy from
+%% the 1994/06/01 version of ltboxes.dtx. Actually, we need only the
+%% \@framepicbox tag.
+
+% \DescribeMacro\framebox
+% |\framebox| ... : like |\makebox|, except it puts a `frame' around
+% the box. The frame is made of lines of thickness
+% |\fboxrule|, separated by space |\fboxsep| from the
+% text -- except for |\framebox(X,Y)| ... , where the
+% thickness of the lines is as for the picture environment,
+% and there is no separation added.
+
+\def\framebox(#1,#2){%
+ \@ifnextchar[{\@framebox(#1,#2)}{\@framebox(#1,#2)[]}% ] (Emacs)
+ }
+\long\def\@framebox(#1,#2)[#3]#4{%
+ \frame{\makebox(#1,#2)[#3]{#4}}}
+
+\long\def\frame#1{%
+ \leavevmode
+ \hbox{%
+ \hskip-\linethickness
+ \vbox{%
+ \vskip-\linethickness
+ \hrule height\linethickness
+ \hbox{%
+ \vrule width\linethickness
+ #1%
+ \vrule width\linethickness}%
+ \hrule height\linethickness
+ \vskip -\linethickness}%
+ \hskip -\linethickness}}
+
+
+%% The dashbox tag was also missing. We copy it from ltpictur.dtx,
+%% 1994/05/22 v1.0e LaTeX Kernel (Picture Mode). The (missing)
+%% indentation is from there, not introduced by me. Sorry, but this
+%% must be emphasized.
+
+% \@wholewidth -> \linethickness
+% \@makepicbox -> \makebox
+
+\xfig@newdimen\@dashdim
+\xfig@newbox\@dashbox
+\xfig@newcount\@dashcnt
+
+\def\@whilenoop#1{}
+\def\@whilenum#1\do #2{\ifnum #1\relax #2\relax\@iwhilenum{#1\relax
+ #2\relax}\fi}
+\def\@iwhilenum#1{\ifnum #1\let\@nextwhile\@iwhilenum
+ \else\let\@nextwhile\@whilenoop\fi\@nextwhile{#1}}
+
+\def\dashbox#1(#2,#3){\leavevmode\hbox to\z@{\baselineskip \z@skip
+\lineskip \z@skip
+\@dashdim #2\unitlength
+\@dashcnt \@dashdim \advance\@dashcnt 200
+\@dashdim #1\unitlength\divide\@dashcnt \@dashdim
+\ifodd\@dashcnt\@dashdim \z@
+\advance\@dashcnt \@ne \divide\@dashcnt \tw@
+\else \divide\@dashdim \tw@ \divide\@dashcnt \tw@
+\advance\@dashcnt \m@ne
+\setbox\@dashbox \hbox{\vrule height \@halfwidth depth \@halfwidth
+width \@dashdim}\put(0,0){\copy\@dashbox}%
+\put(0,#3){\copy\@dashbox}%
+\put(#2,0){\hskip-\@dashdim\copy\@dashbox}%
+\put(#2,#3){\hskip-\@dashdim\box\@dashbox}%
+\multiply\@dashdim \thr@@
+\fi
+\setbox\@dashbox \hbox{\vrule height \@halfwidth depth \@halfwidth
+width #1\unitlength\hskip #1\unitlength}\count@\z@
+\put(0,0){\hskip\@dashdim \@whilenum \count@ <\@dashcnt
+\do{\copy\@dashbox\advance\count@ \@ne }}\count@\z@
+\put(0,#3){\hskip\@dashdim \@whilenum \count@ <\@dashcnt
+\do{\copy\@dashbox\advance\count@ \@ne }}%
+\@dashdim #3\unitlength
+\@dashcnt \@dashdim \advance\@dashcnt 200
+\@dashdim #1\unitlength\divide\@dashcnt \@dashdim
+\ifodd\@dashcnt \@dashdim \z@
+\advance\@dashcnt \@ne \divide\@dashcnt \tw@
+\else
+\divide\@dashdim \tw@ \divide\@dashcnt \tw@
+\advance\@dashcnt \m@ne
+\setbox\@dashbox\hbox{\hskip -\@halfwidth
+\vrule width \linethickness
+height \@dashdim}\put(0,0){\copy\@dashbox}%
+\put(#2,0){\copy\@dashbox}%
+\put(0,#3){\lower\@dashdim\copy\@dashbox}%
+\put(#2,#3){\lower\@dashdim\copy\@dashbox}%
+\multiply\@dashdim \thr@@
+\fi
+\setbox\@dashbox\hbox{\vrule width \linethickness
+height #1\unitlength}\count@\z@
+\put(0,0){\hskip -\@halfwidth \vbox{\@whilenum \count@ <\@dashcnt
+\do{\vskip #1\unitlength\copy\@dashbox\advance\count@ \@ne }%
+\vskip\@dashdim}}\count@\z@
+\put(#2,0){\hskip -\@halfwidth \vbox{\@whilenum \count@<\@dashcnt
+\do{\vskip #1\unitlength\copy\@dashbox\advance\count@ \@ne }%
+\vskip\@dashdim}}}\makebox(#2,#3)}
+
+
+% ============================================================
+
+%% Then we must supply the LaTeX tags that are inserted by fig2dev.
+
+% \setlength is the LaTeX PC way of setting a register.
+\def\setlength#1#2{#1=#2\relax}
+
+% --------------------------------------------------
+
+% \makeatletter is called to access private macros in the \SetFigFont
+% definition. Since we never expand that definition, we could ignore
+% the catcode change. But we should not define a macro with a nonsense
+% name...
+\ifx \makeatletter\undefined
+ \def\makeatletter{\catcode`\@=11 } % <-- Space
+\fi
+
+% --------------------------------------------------
+
+% The real hassle in that macro file is the font switch code. Once
+% there was an interface, in transfig 2.1.7 & 2.1.8: A macro named
+% \SetFigFont was used to select the type for texts. The macro
+% definition itself is written by fig2dev, it is part of the figure
+% code.
+%
+% Then transfig 3 was released and the interface disappeared. There's
+% still the macro \SetFigFont and the macro definition is still
+% written by fig2dev, but it may be defined with 3 arguments or with 5
+% arguments, one cannot determine what's used. The second form is used
+% when NFSS is added to the defines of fig2dev and should be the
+% default. (After all, LaTeX2e subsumed NFSS.) The first form must be
+% used for LaTeX 2.09 w/OFSS.
+%
+% \SetFigFont is not defined if it is defined already when the figure
+% code is read. OK, one might think, let's define a plain TeX version.
+% (Actually, xfig.tex up to revision 1.3 did so.) But which interface
+% shall we use for our definition? In a typical installation one has
+% old documents with xfig pictures that were created with an old
+% fig2dev, we must therefore support the three-arg-variant. Newly
+% created figures will use the five-arg-variant, though. There is no
+% obvious way to determine which variant will be used in the
+% respective figure.
+
+% Please note that the information above -- and the one below about
+% the actual possible interfaces of \SetFigFont -- was determined by
+% looking at the output of example files and the code in setfigfont.c
+% and texfonts.h, as not even the comments in these files got updated
+% when the new \SetFigFont interface was introduced. (Sigh.)
+%
+% The changes were not even marked in the list of changes, I learned
+% about them when folks from the Net sent me complaints about revision
+% 1.1 of xfig.tex. (I hadn't installed xfig 3 at this time.)
+%
+% Do I really have to tell you what I think about these kinds of
+% changes, in terms of software quality? (Don't ask me when I'm in a
+% bad mood if you want polite answers.)
+
+% Well, here's the solution: As told above, I've analyzed the possible
+% expansions of \SetFigFont. I'll define macros for every cseq that's
+% in the expansion, one of these macros will bind \SetFigFont to
+% \SetFigFontOFSS or \SetFigFontNFSS, respectively. Let's have a look:
+%
+% OFSS: evaluates \@setsize. This macro has supposed to have 4
+% arguments (type, baselineskip, font-setup, font-setup). Then the
+% type specifier is evaluated by a \csname. Passing nothing there will
+% effectively be a nop.
+%
+% NFSS: The \SetFigfont expansion uses more cseqs, but is more
+% regular, too. We may supply empty expansions for everything that
+% shall setup the font parameters: \reset@font, \fontsize (2 args),
+% \fontfamily & \fontseries & \fontshape (each 1 arg). Then
+% \selectfont is evaluated, here we bind the appropriate expansion of
+% \SetFigFont.
+
+% Now we may setup the macro definitions, evaluate one pseudo
+% \SetFigFont and \SetFigFont will be bound to the correct expansion.
+%
+% The first argument must be a number, as the OFSS \SetFigFont version
+% assigns it to a count register.
+\def\xfig@bindSetFigFont{%
+ % OFSS
+ \def\@setsize##1##2##3##4{\let\SetFigFont\SetFigFontOFSS}%
+ % NFSS
+ \let\reset@font\relax
+ \def\fontsize##1##2{}%
+ \def\fontfamily##1{}%
+ \def\fontseries##1{}%
+ \def\fontshape##1{}%
+ \def\selectfont{\let\SetFigFont\SetFigFontNFSS}%
+ % Now bind correct \SetFigFont by evaluating \SetFigFont.
+ \SetFigFont{0}{}{}{}{}%
+ }
+
+% --------------------------------------------------
+
+% The interface of \SetFigFontOFSS:
+% #1 is the size (w/o pt),
+% #2 the baselineskip (w/o pt),
+% #3 a plain TeX type specifier.
+% If #3 is empty we assume that a default font should be taken.
+% This default font can be named by \FigFontDefault. Note, that
+% this parameter is not empty if you choose the font `Default' in
+% xfig. You have to chang texfonts.h accordingly. I did it
+% already for 2.1.7 and sent the diffs to the maintainer, but
+% obviously he dumped them since they did not appear in 3.x.
+%
+% It's a pity, that we can't use the plain TeX type specifier. We
+% demand an appropriate font scaled to the correct size. This is not
+% the best solution, but nowadays most DVI drivers generate the fonts on
+% the fly anyhow.
+
+\def\FigFontDefault{cmr10}
+\def\FigFontType{\FigFontDefault\space}
+\def\FigFontTyperm{cmr10}
+\def\FigFontTypebf{cmbx10}
+\def\FigFontTypeit{cmti10}
+\def\FigFontTypesf{cmss10}
+\def\FigFontTypett{cmtt10}
+\def\SetFigFontOFSS#1#2#3{%
+ \font\FigFont \csname FigFontType#3\endcsname\space at #1pt
+ \FigFont
+ \baselineskip #2pt\relax
+ }
+
+% The interface of \SetFigFontNFSS:
+% #1 is the size (w/o pt),
+% #2 the baselineskip (w/o pt),
+% #3 the NFSS font family (as a cseq),
+% #4 the NFSS font series (as a cseq), and
+% #5 the NFSS font shape (as a cseq).
+%
+% The current font state is reset before the arguments take effect.
+% The call to \SetFigFont doesn't use the full possibilities of NFSS;
+% only fixed combinations of arguments are supplied, as xfig itself
+% knows only about a fixed set of fonts (default, roman, bold, italic,
+% sans serif, and typewriter).
+
+% We map that interface back to the one of \SetFigFontOFSS. To do that
+% we redefine the NFSS font specifiers locally to create plain TeX
+% font specifiers. That's mostly easy, medium density (`md') series
+% and upright (`up') shape are ignored in plain anyhow. The default is
+% explicitely specified by \familydefault, we don't need to infer it.
+% But there is one exception: bold is specified as `roman bold', ie,
+% as `rmbf'. For that exception we just define a new FigFontType macro.
+
+\def\FigFontTypermbf{\FigFontTypebf}
+\def\SetFigFontNFSS#1#2#3#4#5{%
+ \begingroup
+ \let\familydefault\empty
+ \def\rmdefault{rm}%
+ \def\sfdefault{sf}%
+ \def\ttdefault{tt}%
+ \let\mddefault\empty
+ \def\bfdefault{bf}%
+ \let\updefault\empty
+ \def\itdefault{it}%
+ \xdef\FigFontSpec{#3#4#5}%
+ \endgroup
+ \SetFigFontOFSS{#1}{#2}{\FigFontSpec}%
+ }
+
+% --------------------------------------------------
+
+% Environments are enclosed in \begin{foo} ... \end{foo}.
+% I don't check if the call is ok -- this file is specific for
+% machine-generated code, that shall be correct by definition.
+%
+% We need to setup the correct \SetFigFont binding, as explained above.
+% And let's evaluate a hook to enable document specific adaptions.
+
+\def\begin#1{%
+ \begingroup
+ \def\end##1{%
+ \csname end##1\endcsname
+ \endgroup
+ }%
+ \xfig@bindSetFigFont
+ \csname #1Hook\endcsname
+ \csname begin#1\endcsname
+ }
+
+
+% ============================================================
+
+\catcode`\@=\CatAtCode
+
+\endinput
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% $Log: xfig.tex,v $
+% Revision 1.4 1995/05/07 16:52:05 schrod
+% Determine \SetFigFont variant automatically. \OldXfig is not
+% looked at any more, \SetFigFontOld and \SetFigFontNew are renamed to
+% \SetFigFontOFSS and \SetFigFontNFSS.
+%
+% Revision 1.3 1995/04/17 00:01:08 schrod
+% Don't allocate registers anew if xfig.tex is read in the second
+% time.
+%
+% Revision 1.2 1995/03/16 01:15:51 schrod
+% Support output of transfig 3.1.1.
+%
+% Revision 1.1 1995/03/13 23:18:15 schrod
+% Started to manage this package with CVS. Made minor code cleanup.
+%
+
+% 94-06-10 js Initial revision.
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+Local Variables:
+mode: plain-tex
+TeX-master: t
+TeX-brace-indent-level: 4
+page-delimiter: "^% ==*$"
+End:
diff --git a/macros/plain/contrib/js-misc/xfig/text-2.1-doc.tex b/macros/plain/contrib/js-misc/xfig/text-2.1-doc.tex
new file mode 100644
index 0000000000..ed37a84508
--- /dev/null
+++ b/macros/plain/contrib/js-misc/xfig/text-2.1-doc.tex
@@ -0,0 +1,27 @@
+% $Id: text-2.1-doc.tex,v 1.1 1995/05/07 16:52:36 schrod Exp $
+%------------------------------------------------------------
+
+%
+% Test for xfig text typesetting of transfig 2.1 output
+%
+
+
+\input ../xfig.tex
+
+$$
+\hbox{\input text-2.1.latex }
+$$
+
+
+
+\bye
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+Local Variables:
+mode: plain-TeX
+TeX-parse-self: nil
+TeX-auto-save: nil
+TeX-master: t
+End:
diff --git a/macros/plain/contrib/js-misc/xfig/text-2.1.fig b/macros/plain/contrib/js-misc/xfig/text-2.1.fig
new file mode 100644
index 0000000000..21c740e067
--- /dev/null
+++ b/macros/plain/contrib/js-misc/xfig/text-2.1.fig
@@ -0,0 +1,3 @@
+#FIG 2.1
+80 2
+4 0 0 10 0 -1 0 0.00000 2 13 58 26 29 Hello, World
diff --git a/macros/plain/contrib/js-misc/xfig/text-2.1.latex b/macros/plain/contrib/js-misc/xfig/text-2.1.latex
new file mode 100644
index 0000000000..9eccd773f8
--- /dev/null
+++ b/macros/plain/contrib/js-misc/xfig/text-2.1.latex
@@ -0,0 +1,26 @@
+\setlength{\unitlength}{0.012500in}%
+%
+\begingroup\makeatletter\ifx\SetFigFont\undefined
+% extract first six characters in \fmtname
+\def\x#1#2#3#4#5#6#7\relax{\def\x{#1#2#3#4#5#6}}%
+\expandafter\x\fmtname xxxxxx\relax \def\y{splain}%
+\ifx\x\y % LaTeX or SliTeX?
+\gdef\SetFigFont#1#2#3{%
+ \ifnum #1<17\tiny\else \ifnum #1<20\small\else
+ \ifnum #1<24\normalsize\else \ifnum #1<29\large\else
+ \ifnum #1<34\Large\else \ifnum #1<41\LARGE\else
+ \huge\fi\fi\fi\fi\fi\fi
+ \csname #3\endcsname}%
+\else
+\gdef\SetFigFont#1#2#3{\begingroup
+ \count@#1\relax \ifnum 25<\count@\count@25\fi
+ \def\x{\endgroup\@setsize\SetFigFont{#2pt}}%
+ \expandafter\x
+ \csname \romannumeral\the\count@ pt\expandafter\endcsname
+ \csname @\romannumeral\the\count@ pt\endcsname
+ \csname #3\endcsname}%
+\fi
+\fi\endgroup
+\begin{picture}(0,13)(27,810)
+\put( 27,810){\makebox(0,0)[lb]{\smash{\SetFigFont{10}{12.0}{rm}Hello, World}}}
+\end{picture}
diff --git a/macros/plain/contrib/js-misc/xfig/text-3.1-doc.tex b/macros/plain/contrib/js-misc/xfig/text-3.1-doc.tex
new file mode 100644
index 0000000000..2bde7ee926
--- /dev/null
+++ b/macros/plain/contrib/js-misc/xfig/text-3.1-doc.tex
@@ -0,0 +1,27 @@
+% $Id: text-3.1-doc.tex,v 1.1 1995/05/07 16:52:38 schrod Exp $
+%------------------------------------------------------------
+
+%
+% Test for xfig text typesetting of transfig 3.1 output
+%
+
+
+\input ../xfig.tex
+
+$$
+\hbox{\input text-3.1.latex }
+$$
+
+
+
+\bye
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+Local Variables:
+mode: plain-TeX
+TeX-parse-self: nil
+TeX-auto-save: nil
+TeX-master: t
+End:
diff --git a/macros/plain/contrib/js-misc/xfig/text-3.1.latex b/macros/plain/contrib/js-misc/xfig/text-3.1.latex
new file mode 100644
index 0000000000..c35c42a91a
--- /dev/null
+++ b/macros/plain/contrib/js-misc/xfig/text-3.1.latex
@@ -0,0 +1,11 @@
+\setlength{\unitlength}{0.01250000in}%
+%
+\begingroup\makeatletter\ifx\SetFigFont\undefined%
+\gdef\SetFigFont#1#2#3#4#5{%
+ \reset@font\fontsize{#1}{#2pt}%
+ \fontfamily{#3}\fontseries{#4}\fontshape{#5}%
+ \selectfont}%
+\fi\endgroup%
+\begin{picture}(0,13)(27,808)
+\put( 27,810){\makebox(0,0)[lb]{\smash{\SetFigFont{10}{12.0}{\familydefault}{\mddefault}{\updefault}Hello, World}}}
+\end{picture}