Archive-Date: Sun, 02 Jul 1995 17:22:17 CDT
Sender: owner-litprog@SHSU.edu
From: "Carlos L. Camacho" <luisp@netcom.com>
Reply-To: LitProg@SHSU.edu, luisp@NETCOM.COM
Subject: Looking for NEW WinWordWeb or Equivalent
Content-Type: text/plain; charset=us-ascii
Message-ID: <netnewsDAyrot.2wr@netcom.com>
Content-Transfer-Encoding: 7bit
MIME-Version: 1.0
Date: Fri, 30 Jun 1995 02:17:17 GMT
To: LitProg@SHSU.EDU

I'm desperate to find something better than winwordweb2 or 
dosnoweb. Neither of these seem to support multiple output 
files. winwordweb2 has the 64k byte chunk limitation. dosnoweb 
doesn't generate anything but tex and html.
My ideal would be something to run over a word file coalescing 
the chunks into multiple files a la unix noweb.
This would allow word graphics etc in my lit. prog. document. 
If you don't know of anything meeting my requirements please 
write it tonight and let me know!
thanks!


================================================================================
Archive-Date: Sun, 02 Jul 1995 21:53:59 CDT
Sender: owner-litprog@SHSU.edu
From: avs@daimi.aau.dk (Alexandre Valente Sousa)
Reply-To: LitProg@SHSU.edu, avs@DAIMI.AAU.DK
Subject: Re: Looking for NEW WinWordWeb or Equivalent
Date: 30 Jun 1995 12:41:50 GMT
Message-ID: <3t0ree$27o@belfort.daimi.aau.dk>
To: LitProg@SHSU.EDU

Thus spake "Carlos L. Camacho" <luisp@netcom.com>:

>I'm desperate to find something better than winwordweb2 or 
>dosnoweb. Neither of these seem to support multiple output 
>files. winwordweb2 has the 64k byte chunk limitation. dosnoweb 
>doesn't generate anything but tex and html.
>My ideal would be something to run over a word file coalescing 
>the chunks into multiple files a la unix noweb.
>This would allow word graphics etc in my lit. prog. document. 
>If you don't know of anything meeting my requirements please 
>write it tonight and let me know!
>thanks!

If you don't really need Winword text but all you need is 
"a la unix noweb" under Dos/Win then here is a suggestion:

a) you need a PC386 (or preferably a 486 or at least a coprocessor),
b) I ported the last version of noweb (2.7a) to run under Dos
c) I have a script which automatically patches and compiles the noweb
   distribution, provided that you have the Mortice Kern Systems MKS 
   toolkit (version 4.2 or above), and that you download and install
   GNU DJGPP, Icon for PC386, and emTeX LaTeX2e including dvips (in the
   script I provide ftp addresses and installations instructions for all 
   that)
d) If you don't have MKS, then you can use a free Unix shell, but as I
   am not yet finished with the script for that, you will have to get the 
   binaries from me (instead of just a patch)
e) I use Adobe Illustrator to get EPS graphics, but any EPS Windows
   program will be OK. Of course you can also use a non EPS windows
   graphics program and then install a windows PS printer driver and
   print to a file, but this has some limitations as the bounding box
   is wrong (a full page) and cannot be fixed, this means that you have
   to make graphics that have a vertical/horizontal ratio equal to a page
   (US letter or A4) and then to resize them in epsfig under LaTeX.
   You can save Winword graphics in EPS format
f) In short, I can show you how to get noweb 2.7a under Dos as if it was 
   under Unix (noweb+EPS graphics->latex->dvi->dvips->ghostscript->printer)
g) the html stuff of noweb under Dos is not 100% (the problem is that I don't
   care, I mean when I use html it is under Linux, not under Dos)

Mail me if you want it

/avs

================================================================================
Archive-Date: Mon, 03 Jul 1995 17:38:31 CDT
Sender: owner-litprog@SHSU.edu
From: esj@harvee.billerica.ma.us (Eric S. Johansson)
Reply-To: LitProg@SHSU.edu, esj@HARVEE.BILLERICA.MA.US
Subject: Re: Q: FWEB --- HTML and verbatim
Date: 3 Jul 1995 09:15:16 -0400
Message-ID: <3t8qh4$qjv@harvee.billerica.ma.us>
To: LitProg@SHSU.EDU

jacob@dannug.dk wrote:
: BTW, The HyperTeX system is not intended for online access via WWW.

Technically speaking, I believe that one could define a .hdvi as a
mime document type with an external viewer and view these documents
via the web but realistically I don't think Netscape will ever support
this document type directly.  Not proprietary enough :-)

--- eric
-- 
Eric S. Johansson	ka1eec		esj@harvee.billerica.ma.us
This message was composed almost entirely by DragonDictate. 
================================================================================
Archive-Date: Tue, 04 Jul 1995 01:06:39 CDT
Sender: owner-litprog@SHSU.edu
From: "Eric W. van Ammers" <ammers@rcl.wau.nl>
Reply-To: LitProg@SHSU.edu, ammers@RCL.WAU.NL
Subject: Re: Looking for NEW WinWordWeb or Equivalent
Date: 4 Jul 1995 05:58:38 GMT
Message-ID: <3talae$6ra@Trex.IenD.wau.nl>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
To: luisp@netcom.com
To: LitProg@SHSU.EDU

"Carlos L. Camacho" <luisp@netcom.com> wrote:

>I'm desperate to find something better than winwordweb2 or 
>dosnoweb. Neither of these seem to support multiple output 
>files. winwordweb2 has the 64k byte chunk limitation. dosnoweb 
>doesn't generate anything but tex and html.
>My ideal would be something to run over a word file coalescing 
>the chunks into multiple files a la unix noweb.
>This would allow word graphics etc in my lit. prog. document. 
>If you don't know of anything meeting my requirements please 
>write it tonight and let me know!
>thanks!

CLiP should solve your problem. Start at
       ftp://sun01.info.wau.nl/clip
for documentation in postscript format. The directories ms_dos, unix 
and vax_vms contain the respective systems.

Success, Eric van Ammers

================================================================================
Archive-Date: Tue, 04 Jul 1995 14:16:58 CDT
Sender: owner-litprog@SHSU.edu
From: imarkows@escape.ca (Irek Markowski)
Reply-To: LitProg@SHSU.edu, imarkows@ESCAPE.CA
Subject: << Need help with TURBO C++ programming >>
Date: Sun, 2 Jul 1995 17:12:29 LOCAL
Message-ID: <imarkows.12.002EB220@escape.ca>
To: LitProg@SHSU.EDU

I need help with programming short program in TC++
================================================================================
Archive-Date: Wed, 05 Jul 1995 04:59:44 CDT
Sender: owner-litprog@SHSU.edu
From: Christer Engman <e94_cen@e.kth.se>
Reply-To: LitProg@SHSU.edu, e94_cen@E.KTH.SE
Subject: File Sharing
Date: 5 Jul 1995 07:41:42 GMT
Message-ID: <3tdfnm$rle@news.kth.se>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
X-MX-Warning:   Warning -- Invalid "To" header.
To: All
To: LitProg@SHSU.EDU

I've got a problem... I'm working for an office and have made a 
program where I have to lock files because it's supposed to be 
running in a network. How do I do? I'm working in Borland Pascal 
7 and the manual only says: Look in your DOS Reference manual for 
more information!!! What if you don't have the f*****g Reference? 

I suppose it's when you open a file you lock it. In BP7 you can 
choose between filemode 0: ReadOnly 1: WriteOnly and 2: 
ReadWrite. Then the manual says "In DOS 3.x and higher additional 
filemodes for sharing...    look in your DOS Reference Manual..."

Please help me!!!

/Christer Engman  SWEDEN!

================================================================================
Archive-Date: Wed, 05 Jul 1995 05:07:12 CDT
Sender: owner-litprog@SHSU.edu
From: Christer Engman <e94_cen@e.kth.se>
Reply-To: LitProg@SHSU.edu, e94_cen@E.KTH.SE
Subject: File Sharing
Date: 5 Jul 1995 07:42:12 GMT
Message-ID: <3tdfok$rle@news.kth.se>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
To: LitProg@SHSU.EDU

I've got a problem... I'm working for an office and have made a 
program where I have to lock files because it's supposed to be 
running in a network. How do I do? I'm working in Borland Pascal 
7 and the manual only says: Look in your DOS Reference manual for 
more information!!! What if you don't have the f*****g Reference? 

I suppose it's when you open a file you lock it. In BP7 you can 
choose between filemode 0: ReadOnly 1: WriteOnly and 2: 
ReadWrite. Then the manual says "In DOS 3.x and higher additional 
filemodes for sharing...    look in your DOS Reference Manual..."

Please help me!!!

/Christer Engman  SWEDEN!

================================================================================
Archive-Date: Wed, 05 Jul 1995 06:21:42 CDT
Sender: owner-litprog@SHSU.edu
From: marcel@wam.umd.edu (Leon Marcel Colaco)
Reply-To: LitProg@SHSU.edu, marcel@WAM.UMD.EDU
Subject: Live via satellite, a seminar on "Software Reuse, C++ and Object-oriened programming"
Date: 3 Jul 1995 18:09:16 GMT
Message-ID: <3t9boc$kat@cville-srv.wam.umd.edu>
To: LitProg@SHSU.EDU

You and members of your organization are invited
to participate in a live satellite broadcast titled:
Increasing Software Reuse by Switching to C++ and
Object-Oriented Programming

presented by the University of Maryland 
Instructional Television System on  July 13, July 20 and July 27, 1995

For information about this seminar, you can e-mail us at 
itv@jolt.eng.umd.edu  or call us at (301)-405-4905

ENROLLMENT:
This 3 day seminar will be broadcast live via satellite on
 the National Technological University (NTU) Network. 
 (Seminar Code MC95071301).
 To participate in this seminar your organization must be a
 member of NTU.  A list of NTU sites is included at the end 
of this post. If you have questions about NTU 
registration/membership, please call (303) 495-6400.

SEMINAR DESCRIPTION:  Nothing increases productivity like being
able to reuse previously written software.  Yet many times
software is unable to be reused in a practical way because of
the restrictions of conventional programming languages and
approaches.  One of the biggest payoffs in switching to
object-oriented approaches is that they are better suited to
the production of software that has the potential for high
reuse.  This allows one to move beyond the creation of
subroutine libraries and abstract data structure techniques
into code that embodies abstractions in a way that they can be
used repeatedly without recoding.
    This course addresses these possibilities by helping
the student with the shift from C to C++ and from functional
programming to object-oriented programming.  These topics are
examined in the light of the practical need to build abstract
data types that have a high degree of reusability.  With this
approach, C++ becomes not just a "better C," but the basis of
a paradigm that allows great productivity gains.  The course
will include practical examples based on classical data
structures as well as models of application-specific objects. 
A set of practice exercises will be given to the students. 
The course will be paced to give students time to work out the
problems and send them in to the instructor for comment.  An e-
mail address will be available to allow students to communicate
with the instructor for the duration of the course.

BENEFITS:  After completing this course you will:
*   Understand the differences between C and C++
*   Know how data abstractions and recursion are used to enhance
reuse
*   Learn the syntax and semantics of C++ classes and objects
*   Know how to use inheritance and polymorphism in C++
*   Understand how container classes are used to build
reusable software for such classical data structures as lists,
stacks, queues, trees, sets, dictionaries and files
*   Learn how to build application-specific objects that are easy
to reuse by drawing on data abstractions and inheritance
*   Learn the basics of object-oriented programming and how it
can be accomplished in both C and C++

INTENDED AUDIENCE:  Engineers, programmers, and software
designers who are considering switching from C to C++ to gain
productivity through software reuse

PREREQUISITES:  Some experience in writing programs is
necessary.  The ability to understand programming examples
written in C is assumed.  No knowledge of C++ is necessary.

PRESENTER:  Dr. C. Wrandle Barth is currently a senior computer
scientist at Hughes STX Corporation, and a visiting lecturer
at the University of Maryland.  He has been very active in
testing and troubleshooting the interoperability of VAX, Sun,
and PC workstations and servers.  He is a member of the ACM
and the IEEE Computer Society.  He is also published in
several journals.
    Dr. Barth received a B.A. in Mathematics from
University of South Florida, and a Ph.D. in Computer Science
from the University of Maryland.

ENROLLMENT:
This 3 day seminar will be broadcast live via satellite on 
the National Technological University (NTU) Network in the 
United States, Southern Canada and Northern Mexico.
(Seminar Code  MC95071301).
To participate in this seminar your organization must be a 
member of NTU.  A list of NTU sites is included with this 
post. If you have questions about NTU 
registration/membership, please call (303) 495-6400.

*If you live in the Baltimore or Washington DC Metropolitan area
you can view this conference at one of the following remote sites
 only if you are an employee of the organization:
Bureau of the Census
Department of Defense, Fort Meade/FANX
Fort Ritchie
General Accounting Office
Goddard Space Flight Center
Loral 
Naval Research Lab
Patuxant River Naval Air Station
SAIC (Science Applications International Corporation)
Social Security Admn.

*If you are an employee or member of the following
organizations, you are member of the NTU Network, 
and your organization has the capability to receive this 
broadcast, then contact your training office and ask for the 
NTU Site Coordinator or call NTU at (303)495-6400.

Participating Organizations:

Advanced Micro Devices, Inc
Aeroquip Corporation
Air Products and Chemicals, Inc.
ALCOA
Alliance for Higher Education
Allied Signal Aerospace Company
American Association of Retired Persons (AARP)
AMP Incorporated
Analog Devices, Inc.
Applied Research Laboratory
Argonne National Laboratory
ARINC
Armco Steel Co., L.P.
Army Research Laboratory
AT & T
AT & T Global Information Solutions
AXIOHM IPB
Bellcore
BNR Inc.
Boeing Defense and Space Group
Bull Electronics
Burle Industries Inc.
Burr-Brown Corporation
Colorado Memory Systems
Computing Devices International
datotek, An AT & T Company
David Sarnoff Research Center
Deere & Company
Detroit Diesel Corporation
Digital Communications Associates, Inc.
Digital Equipment Corporation
Eastman Chemical Company
Eastman Kodak Company
Eaton Corporation
Eaton Cutler-Hammer
EG & G Rocky Flats
E.I. du Pont de Nemours & Company
Electronic Data Systems Corporation
E-Systems, Inc.
Ericsson GE Mobile Communications
Evans & Sutherland
Extended Systems, Inc.
Exxon Corporation
GBCS Education & Training
General Electric Company
General Instrument Corporation
Glenayre Electronics Corporation
GM Saginaw Steering
Grass Valley Group
GTE Corporation
Hamilton Standard
Harris Corporation
Hewlett-Packard Company
Honeywell, Inc.
HRB Systems
Hughes Missile Systems Company
IBM
Integrated Device Technology, Inc.
Intel Corporation
Internal Revenue Service
IOMEGA Corporation
John Deere Dubuque Works
K & L Microwave
Knolls Atomic Power Laboratory
Lake Shore, Inc.
Lawrence Berkeley Laboratory
Lawrence Livermore National Laboratory
LEXIS-NEXIS
Lexmark International, Inc.
Lockheed Martin Corporation
Loral Federal Systems Company
Loral Space Information Systems Company
Los Alamos National Laboratory
Magnavox Electro-Optical Systems Company
Magnavox Electronic Systems Company
Mason & Hanger
McDonnell Douglas Aerospace-East
Metrum Information Storage
Michigan Information Technology Network, Inc.
Micron Technology, Inc.
Middle Georgia Technology Development Center
Milliken & Company
The MITRE Corporation
Motorola, Inc.
Naval Air Development Center
Naval Air Engineering Center
Naval Air Systems Command
Naval Air Warfare Center
Naval Research Laboratory
Naval Surface Warfare Center
NASA
National Semiconductor Corporation
Noise Cancellation Technologies
Occidental Chemical Corporation
Pacific Bell
Pacific Tustin
Polaroid Corporation
Prince Corporation
PSE & G Nuclear Training Center
Quantum Corporation
RDL Inc.
Rockwell International Corporation
ROLM Company
Sandia National Laboratories
Santa Barbara Research Center
Schuller International, Inc.
Siemens Medical Systems, Inc.
Symbios Logic, Inc.
Tektronics Consolidated
Texas Instruments, Inc.
3M Company
The Travelers Insurance Company
U.S. West Advanced Technologies, Inc.
U.S. Air Force
U.S. Air Force Academy
U.S. Army
U.S. Bureau of Mines
U.S. Department of Energy
U.S. Mine Safety & Health Admistration
U.S. Navy
US Signal Corporation
Westinghouse Electronic Corporation
Whirlpool Corporation
Xerox Corporation
Zenith Data Systems



================================================================================
Archive-Date: Wed, 05 Jul 1995 14:31:55 CDT
Sender: owner-litprog@SHSU.edu
Date: Wed, 5 Jul 95 15:29:51 EDT
From: Lee Wittenberg <leew@pilot.njin.net>
Reply-To: LitProg@SHSU.edu, leew@PILOT.NJIN.NET
To: LitProg@SHSU.edu, luisp@netcom.com
Subject: Re: Looking for NEW WinWordWeb or Equivalent
Message-ID: <CMM-RU.1.4.804972591.leew@pilot.njin.net>

luisp@netcom.com writes:

> I'm desperate to find something better than winwordweb2 or 
> dosnoweb. Neither of these seem to support multiple output 
> files. winwordweb2 has the 64k byte chunk limitation. dosnoweb 
> doesn't generate anything but tex and html.

dosnoweb supports multilple output files (it always has).  You have to
run notangle separately for each output file with the appropriate -R
option, but it works (I do this all the time).

WinWordWEB can support multiple output files with a minimal amount of
hacking.  The 64K limit is Microsoft's, not mine.

> My ideal would be something to run over a word file coalescing 
> the chunks into multiple files a la unix noweb.
> This would allow word graphics etc in my lit. prog. document. 
> If you don't know of anything meeting my requirements please 
> write it tonight and let me know!

I guess you don't know the story about belling the cat.  You'll
probably have to write your own tool to meet your own particular
requirements, or "make do" with what's available.

I am planning to try to finagle financing for a "production" version
of WinWordWEB from my administrators, but because of their schedule,
nothing will happen before next February, at the earliest.  Again, if
you'd like things done quickly, you'd best do it yourself ;-)

As the Bard says, in The Scottish Play:  "If 'twere done when 'tis
done, then 'twere well it done quickly."  But, of course, that only
applies when funding is available. :-(

		-- Lee

------------------------------------------------------------------------
Lee Wittenberg              | Everything was in the lap of the gods,
Computer Science Department | and there was no telling what would 
Kean College of New Jersey  | happen when they stood up.
Union, NJ   07083           | 
                            | -- Richard Armour
leew@pilot.njin.net         |    "It All Started With Europa" (1955)
------------------------------------------------------------------------
================================================================================
Archive-Date: Wed, 05 Jul 1995 17:46:47 CDT
Sender: owner-litprog@SHSU.edu
From: jacob@dannug.dk
Reply-To: LitProg@SHSU.edu, jacob@DANNUG.DK
Subject: Re: File Sharing
Date: Wed, 5 Jul 1995 21:13:54 GMT
Message-ID: <950705231354.202AAE+F.jacob@jnext>
MIME-Version: 1.0 (Generated by Eloquent)
Content-Type: text/plain; charset=US-ASCII
To: LitProg@SHSU.EDU

On 5 Jul 1995 07:42:12 GMT,  Christer Engman <e94_cen@e.kth.se> wrote:

>I've got a problem... I'm working for an office and have made a
>program where I have to lock files because it's supposed to be
>running in a network. How do I do? I'm working in Borland Pascal
>7 and the manual only says: Look in your DOS Reference manual for
>more information!!! What if you don't have the f*****g Reference?

Didn't they buy their DOS ? You can create a file (foo.lck) that signals
a lock on file bar.dat. Easy and portable.

PS: Please consider posting in some DOS/Borland specific group instead of
'comp.programming.literate'

    Jacob
--
Jacob Nielsen
jacob@dannug.dk
================================================================================
Archive-Date: Thu, 06 Jul 1995 15:29:11 CDT
Sender: owner-litprog@SHSU.edu
Subject: Re: << Need help with TURBO C++ programming >>
Message-ID: <3tc1ke$4fr@nntp.crl.com>
From: Weiqi Gao <weiqigao@crl.com>
Reply-To: LitProg@SHSU.edu, weiqigao@CRL.COM
Date: 4 Jul 1995 18:34:54 GMT
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
To: LitProg@SHSU.EDU

imarkows@escape.ca (Irek Markowski) wrote:
>I need help with programming short program in TC++

How much do you pay? :)

-- 
Weiqi Gao
weiqigao@crl.com

================================================================================
Archive-Date: Sun, 09 Jul 1995 15:40:53 CDT
Sender: owner-litprog@SHSU.edu
From: anarch1256@aol.com (Anarch1256)
Subject: Visual Basic 3.0
Date: 9 Jul 1995 16:35:01 -0400
Message-ID: <3tpehl$aob@newsbf02.news.aol.com>
Reply-To: LitProg@SHSU.edu, anarch1256@aol.com (Anarch1256)
To: LitProg@SHSU.EDU

Hello,   

    I am looking to buy a used copy of Visual Basic 3.0 w/ manuals. I am
willing to pay $20- 30 for it, since a new copy only costs $100.          
    E-Mail me ASAP if you are willing to sell.                            
                                      ]



                                                                   F
================================================================================
Archive-Date: Sun, 09 Jul 1995 21:28:59 CDT
Sender: owner-litprog@SHSU.edu
From: sriram@glock.tcs.com (Sriram Srinivasan)
Reply-To: LitProg@SHSU.edu, sriram@GLOCK.TCS.COM
Subject: ANNOUNCE : fmweb v1.0 (BIG)
Date: 10 Jul 1995 01:46:17 GMT
Message-ID: <3tq0p9$7of@tcsi.tcs.com>
To: LitProg@SHSU.EDU

Apologies in advance for the big post, but my efforts to upload this
distribution onto the CTAN sites weren't successful. I would appreciate
any pointers from people who have done this before.

From the README:

fmweb is an attempt to do literate programming  using FrameMaker.
(The term web does not indicate any connection to the World Wide Web - 
please see the comp.programming.literate FAQ for details on "web" tools.)

The fundamental problem I have with traditional web tools is that
the web text looks like a mess, because  it has code as well as
documentation with formatting data all in the soup. I prefer WYSIWIG 
documentation systems over TeX, where formatting meta-information does 
not clutter up your thinking.

fmweb allows you to write your code in a way that it looks exactly like
the WEB system's output from the outset. It supports output to multiple files,
is language independent, and doesn't care how many  figures or fonts you
use. 

The three files in this distribution are -
    fmweb.mif - a FrameMaker 4 document containing everything - including
                a perl5 fmweb script.
    fmweb.ps  - a postscript print of this document for those who don't
                have Frame, but want to have a look at the approach.
    fmweb.README - this file.


Please send comments/ideas/flames to sriram@tcs.com. I am exploring usage
of such an approach for largish systems. I would like to know what
people who use the traditional WEB approach think of the workability of
this approach.

Sriram Srinivasan
July 9, 1995
(sriram@tcs.com)
----------------------------------------------------------------------
export PATH || exec /bin/sh $0 $*
: :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :
: This is a shell archive, meaning:
: 1. Remove everything above the 'export PATH' line.
: 2. Save the resulting text in a file.
: 3. Execute the file with /bin/sh, NOT csh, to create the files:
:	'fmweb.README'
:	'fmweb.mif'
:	'fmweb.ps'
: This archive created: Sun Jul  9 18:44:19 PDT 1995
: :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :
PATH="/bin:/usr/bin:/usr/ucb:$PATH"
if test -f 'fmweb.README'
then
	echo 'shar: "fmweb.README" exists; NOT overwritten'
else
echo 'x fmweb.README, 1352 bytes'
sed 's/^X//' << 'EOF fmweb.README' > 'fmweb.README'
Xfmweb is an attempt to do literate programming  using FrameMaker.
X(The term web does not indicate any connection to the World Wide Web -
Xplease see the comp.programming.literate FAQ for details on "web" tools.)
X
XThe fundamental problem I have with traditional web tools is that
Xthe web text looks like a mess, because  it has code as well as
Xdocumentation with formatting data all in the soup. I prefer WYSIWIG 
Xdocumentation systems over TeX, where formatting meta-information does 
Xnot clutter up your thinking.
X
Xfmweb allows you to write your code in a way that it looks exactly like
Xthe WEB system's output from the outset. It supports output to multiple files,
Xis language independent, and doesn't care how many  figures or fonts you
Xuse. 
X
XThe three files in this distribution are -
X    fmweb.mif - a FrameMaker 4 document containing everything - including
X                a perl5 fmweb script.
X    fmweb.ps  - a postscript print of this document for those who don't
X                have Frame, but want to have a look at the approach.
X    fmweb.README - this file.
X
X
XPlease send comments/ideas/flames to sriram@tcs.com. I am exploring usage
Xof such an approach for largish systems. I would like to know what
Xpeople who use the traditional WEB approach think of the workability of
Xthis approach.
X
XSriram Srinivasan
XJuly 9, 1995
X(sriram@tcs.com)
X
EOF fmweb.README
if test 1352 -ne "`wc -c < 'fmweb.README'`"
then
	echo 'shar: "fmweb.README" CORRUPTED (not 1352 bytes)'
fi
fi ; : End of overwrite check
if test -f 'fmweb.mif'
then
	echo 'shar: "fmweb.mif" exists; NOT overwritten'
else
echo 'x fmweb.mif, 200789 bytes'
sed 's/^X//' << 'EOF fmweb.mif' > 'fmweb.mif'
X<MIFFile 4.00> # Generated by FrameMaker xm4.0.1P1m
X# Options:
X#    Paragraph Text
X#    Paragraph Tags
X#    Paragraph Formats
X#    Font Information
X#    Markers
X#    Anchored Frames
X#    Tables
X#    Graphics and TextRect Layout
X#    Master Page Items
X#    Condition Catalog
X#    Table Catalogs
X#    Font Catalog
X#    Paragraph Catalog
X#    Document Template
X#    Document Dictionary
X#    Variables
X#    Element Definitions
X#    Elements
X#
X<Units Uin >
X<ColorCatalog 
X <Color 
X  <ColorTag `Black'>
X  <ColorCyan  0.000000>
X  <ColorMagenta  0.000000>
X  <ColorYellow  0.000000>
X  <ColorBlack  100.000000>
X  <ColorAttribute ColorIsBlack >
X  <ColorAttribute ColorIsReserved >
X > # end of Color
X <Color 
X  <ColorTag `White'>
X  <ColorCyan  0.000000>
X  <ColorMagenta  0.000000>
X  <ColorYellow  0.000000>
X  <ColorBlack  0.000000>
X  <ColorAttribute ColorIsWhite >
X  <ColorAttribute ColorIsReserved >
X > # end of Color
X <Color 
X  <ColorTag `Red'>
X  <ColorCyan  0.000000>
X  <ColorMagenta  100.000000>
X  <ColorYellow  100.000000>
X  <ColorBlack  0.000000>
X  <ColorAttribute ColorIsRed >
X  <ColorAttribute ColorIsReserved >
X > # end of Color
X <Color 
X  <ColorTag `Green'>
X  <ColorCyan  100.000000>
X  <ColorMagenta  0.000000>
X  <ColorYellow  100.000000>
X  <ColorBlack  0.000000>
X  <ColorAttribute ColorIsGreen >
X  <ColorAttribute ColorIsReserved >
X > # end of Color
X <Color 
X  <ColorTag `Blue'>
X  <ColorCyan  100.000000>
X  <ColorMagenta  100.000000>
X  <ColorYellow  0.000000>
X  <ColorBlack  0.000000>
X  <ColorAttribute ColorIsBlue >
X  <ColorAttribute ColorIsReserved >
X > # end of Color
X <Color 
X  <ColorTag `Cyan'>
X  <ColorCyan  100.000000>
X  <ColorMagenta  0.000000>
X  <ColorYellow  0.000000>
X  <ColorBlack  0.000000>
X  <ColorAttribute ColorIsCyan >
X  <ColorAttribute ColorIsReserved >
X > # end of Color
X <Color 
X  <ColorTag `Magenta'>
X  <ColorCyan  0.000000>
X  <ColorMagenta  100.000000>
X  <ColorYellow  0.000000>
X  <ColorBlack  0.000000>
X  <ColorAttribute ColorIsMagenta >
X  <ColorAttribute ColorIsReserved >
X > # end of Color
X <Color 
X  <ColorTag `Yellow'>
X  <ColorCyan  0.000000>
X  <ColorMagenta  0.000000>
X  <ColorYellow  100.000000>
X  <ColorBlack  0.000000>
X  <ColorAttribute ColorIsYellow >
X  <ColorAttribute ColorIsReserved >
X > # end of Color
X> # end of ColorCatalog
X<ConditionCatalog 
X <Condition 
X  <CTag `Fluff'>
X  <CState CShown >
X  <CStyle CAsIs >
X > # end of Condition
X> # end of ConditionCatalog
X<PgfCatalog 
X <Pgf 
X  <PgfTag `Body'>
X  <PgfUseNextTag No >
X  <PgfNextTag `'>
X  <PgfAlignment LeftRight >
X  <PgfFIndent  0.0">
X  <PgfLIndent  0.0">
X  <PgfRIndent  0.0">
X  <PgfTopSeparator `'>
X  <PgfBotSeparator `'>
X  <PgfPlacement Anywhere >
X  <PgfPlacementStyle Normal >
X  <PgfRunInDefaultPunct `. '>
X  <PgfSpBefore  5.0 pt>
X  <PgfSpAfter  0.0 pt>
X  <PgfWithPrev No >
X  <PgfWithNext No >
X  <PgfBlockSize 1>
X  <PgfFont 
X   <FTag `'>
X   <FFamily `Helvetica'>
X   <FVar `Regular'>
X   <FWeight `Regular'>
X   <FAngle `Regular'>
X   <FPostScriptName `Helvetica'>
X   <FSize  10.0 pt>
X   <FUnderlining FNoUnderlining >
X   <FUnderline No >
X   <FDoubleUnderline No >
X   <FNumericUnderline No >
X   <FOverline No >
X   <FStrike No >
X   <FChangeBar No >
X   <FOutline No >
X   <FShadow No >
X   <FPairKern Yes >
X   <FCase FAsTyped >
X   <FPosition FNormal >
X   <FSupScript No >
X   <FSubScript No >
X   <FDX  0.0 pt>
X   <FDY  0.0 pt>
X   <FDW  0.0 pt>
X   <FSeparation 0>
X   <FColor `Black'>
X  > # end of PgfFont
X  <PgfLineSpacing Proportional >
X  <PgfLeading  2.0 pt>
X  <PgfAutoNum No >
X  <PgfNumTabs 0>
X  <PgfHyphenate Yes >
X  <HyphenMaxLines 2>
X  <HyphenMinPrefix 3>
X  <HyphenMinSuffix 3>
X  <HyphenMinWord 5>
X  <PgfLetterSpace No >
X  <PgfMinWordSpace 90>
X  <PgfOptWordSpace 100>
X  <PgfMaxWordSpace 110>
X  <PgfLanguage USEnglish >
X  <PgfCellAlignment Top >
X  <PgfCellMargins  0.0 pt 0.0 pt 0.0 pt 0.0 pt>
X  <PgfCellLMarginFixed No >
X  <PgfCellTMarginFixed No >
X  <PgfCellRMarginFixed No >
X  <PgfCellBMarginFixed No >
X > # end of Pgf
X <Pgf 
X  <PgfTag `Bulleted'>
X  <PgfUseNextTag No >
X  <PgfNextTag `'>
X  <PgfAlignment Left >
X  <PgfFIndent  0.0">
X  <PgfLIndent  0.25">
X  <PgfRIndent  0.0">
X  <PgfTopSeparator `'>
X  <PgfBotSeparator `'>
X  <PgfPlacement Anywhere >
X  <PgfPlacementStyle Normal >
X  <PgfRunInDefaultPunct `. '>
X  <PgfSpBefore  5.0 pt>
X  <PgfSpAfter  0.0 pt>
X  <PgfWithPrev No >
X  <PgfWithNext No >
X  <PgfBlockSize 1>
X  <PgfFont 
X   <FTag `'>
X   <FFamily `Helvetica'>
X   <FVar `Regular'>
X   <FWeight `Regular'>
X   <FAngle `Regular'>
X   <FPostScriptName `Helvetica'>
X   <FSize  10.0 pt>
X   <FUnderlining FNoUnderlining >
X   <FUnderline No >
X   <FDoubleUnderline No >
X   <FNumericUnderline No >
X   <FOverline No >
X   <FStrike No >
X   <FChangeBar No >
X   <FOutline No >
X   <FShadow No >
X   <FPairKern Yes >
X   <FCase FAsTyped >
X   <FPosition FNormal >
X   <FSupScript No >
X   <FSubScript No >
X   <FDX  0.0 pt>
X   <FDY  0.0 pt>
X   <FDW  0.0 pt>
X   <FSeparation 0>
X   <FColor `Black'>
X  > # end of PgfFont
X  <PgfLineSpacing Proportional >
X  <PgfLeading  2.0 pt>
X  <PgfAutoNum Yes >
X  <PgfNumFormat `\xa5 \\t'>
X  <PgfNumberFont `'>
X  <PgfNumAtEnd No >
X  <PgfNumTabs 1>
X  <TabStop 
X   <TSX  0.25">
X   <TSType Left >
X   <TSLeaderStr ` '>
X  > # end of TabStop
X  <PgfHyphenate Yes >
X  <HyphenMaxLines 2>
X  <HyphenMinPrefix 3>
X  <HyphenMinSuffix 3>
X  <HyphenMinWord 5>
X  <PgfLetterSpace No >
X  <PgfMinWordSpace 90>
X  <PgfOptWordSpace 100>
X  <PgfMaxWordSpace 110>
X  <PgfLanguage USEnglish >
X  <PgfCellAlignment Top >
X  <PgfCellMargins  0.0 pt 0.0 pt 0.0 pt 0.0 pt>
X  <PgfCellLMarginFixed No >
X  <PgfCellTMarginFixed No >
X  <PgfCellRMarginFixed No >
X  <PgfCellBMarginFixed No >
X > # end of Pgf
X <Pgf 
X  <PgfTag `CellBody'>
X  <PgfUseNextTag No >
X  <PgfNextTag `'>
X  <PgfAlignment Left >
X  <PgfFIndent  0.0">
X  <PgfLIndent  0.0">
X  <PgfRIndent  0.0">
X  <PgfTopSeparator `'>
X  <PgfBotSeparator `'>
X  <PgfPlacement Anywhere >
X  <PgfPlacementStyle Normal >
X  <PgfRunInDefaultPunct `. '>
X  <PgfSpBefore  0.0 pt>
X  <PgfSpAfter  0.0 pt>
X  <PgfWithPrev No >
X  <PgfWithNext No >
X  <PgfBlockSize 1>
X  <PgfFont 
X   <FTag `'>
X   <FFamily `Helvetica'>
X   <FVar `Regular'>
X   <FWeight `Regular'>
X   <FAngle `Regular'>
X   <FPostScriptName `Helvetica'>
X   <FSize  10.0 pt>
X   <FUnderlining FNoUnderlining >
X   <FUnderline No >
X   <FDoubleUnderline No >
X   <FNumericUnderline No >
X   <FOverline No >
X   <FStrike No >
X   <FChangeBar No >
X   <FOutline No >
X   <FShadow No >
X   <FPairKern Yes >
X   <FCase FAsTyped >
X   <FPosition FNormal >
X   <FSupScript No >
X   <FSubScript No >
X   <FDX  0.0 pt>
X   <FDY  0.0 pt>
X   <FDW  0.0 pt>
X   <FSeparation 0>
X   <FColor `Black'>
X  > # end of PgfFont
X  <PgfLineSpacing Proportional >
X  <PgfLeading  2.0 pt>
X  <PgfAutoNum No >
X  <PgfNumTabs 0>
X  <PgfHyphenate Yes >
X  <HyphenMaxLines 2>
X  <HyphenMinPrefix 3>
X  <HyphenMinSuffix 3>
X  <HyphenMinWord 5>
X  <PgfLetterSpace No >
X  <PgfMinWordSpace 90>
X  <PgfOptWordSpace 100>
X  <PgfMaxWordSpace 110>
X  <PgfLanguage USEnglish >
X  <PgfCellAlignment Top >
X  <PgfCellMargins  0.0 pt 0.0 pt 0.0 pt 0.0 pt>
X  <PgfCellLMarginFixed No >
X  <PgfCellTMarginFixed No >
X  <PgfCellRMarginFixed No >
X  <PgfCellBMarginFixed No >
X > # end of Pgf
X <Pgf 
X  <PgfTag `CellHeading'>
X  <PgfUseNextTag No >
X  <PgfNextTag `'>
X  <PgfAlignment Center >
X  <PgfFIndent  0.0">
X  <PgfLIndent  0.0">
X  <PgfRIndent  0.0">
X  <PgfTopSeparator `'>
X  <PgfBotSeparator `'>
X  <PgfPlacement Anywhere >
X  <PgfPlacementStyle Normal >
X  <PgfRunInDefaultPunct `. '>
X  <PgfSpBefore  0.0 pt>
X  <PgfSpAfter  0.0 pt>
X  <PgfWithPrev No >
X  <PgfWithNext No >
X  <PgfBlockSize 1>
X  <PgfFont 
X   <FTag `'>
X   <FFamily `Helvetica'>
X   <FVar `Regular'>
X   <FWeight `Regular'>
X   <FAngle `Regular'>
X   <FPostScriptName `Helvetica'>
X   <FSize  10.0 pt>
X   <FUnderlining FNoUnderlining >
X   <FUnderline No >
X   <FDoubleUnderline No >
X   <FNumericUnderline No >
X   <FOverline No >
X   <FStrike No >
X   <FChangeBar No >
X   <FOutline No >
X   <FShadow No >
X   <FPairKern Yes >
X   <FCase FAsTyped >
X   <FPosition FNormal >
X   <FSupScript No >
X   <FSubScript No >
X   <FDX  0.0 pt>
X   <FDY  0.0 pt>
X   <FDW  0.0 pt>
X   <FSeparation 0>
X   <FColor `Black'>
X  > # end of PgfFont
X  <PgfLineSpacing Proportional >
X  <PgfLeading  2.0 pt>
X  <PgfAutoNum No >
X  <PgfNumTabs 0>
X  <PgfHyphenate No >
X  <HyphenMaxLines 2>
X  <HyphenMinPrefix 3>
X  <HyphenMinSuffix 3>
X  <HyphenMinWord 5>
X  <PgfLetterSpace No >
X  <PgfMinWordSpace 90>
X  <PgfOptWordSpace 100>
X  <PgfMaxWordSpace 110>
X  <PgfLanguage USEnglish >
X  <PgfCellAlignment Middle >
X  <PgfCellMargins  0.0 pt 2.0 pt 0.0 pt 2.0 pt>
X  <PgfCellLMarginFixed No >
X  <PgfCellTMarginFixed No >
X  <PgfCellRMarginFixed No >
X  <PgfCellBMarginFixed No >
X > # end of Pgf
X <Pgf 
X  <PgfTag `chunk'>
X  <PgfUseNextTag Yes >
X  <PgfNextTag `code'>
X  <PgfAlignment Left >
X  <PgfFIndent  0.0">
X  <PgfLIndent  0.0">
X  <PgfRIndent  0.0">
X  <PgfTopSeparator `'>
X  <PgfBotSeparator `'>
X  <PgfPlacement Anywhere >
X  <PgfPlacementStyle Normal >
X  <PgfRunInDefaultPunct `. '>
X  <PgfSpBefore  10.0 pt>
X  <PgfSpAfter  5.0 pt>
X  <PgfWithPrev No >
X  <PgfWithNext No >
X  <PgfBlockSize 1>
X  <PgfFont 
X   <FTag `'>
X   <FFamily `AvantGarde'>
X   <FVar `Regular'>
X   <FWeight `DemiBold'>
X   <FAngle `Regular'>
X   <FPostScriptName `AvantGarde-Demi'>
X   <FSize  12.0 pt>
X   <FUnderlining FSingle >
X   <FUnderline Yes >
X   <FDoubleUnderline No >
X   <FNumericUnderline No >
X   <FOverline No >
X   <FStrike No >
X   <FChangeBar No >
X   <FOutline No >
X   <FShadow No >
X   <FPairKern Yes >
X   <FCase FAsTyped >
X   <FPosition FNormal >
X   <FSupScript No >
X   <FSubScript No >
X   <FDX  0.0 pt>
X   <FDY  0.0 pt>
X   <FDW  0.0 pt>
X   <FSeparation 0>
X   <FColor `Black'>
X  > # end of PgfFont
X  <PgfLineSpacing Proportional >
X  <PgfLeading  2.0 pt>
X  <PgfAutoNum Yes >
X  <PgfNumFormat `C:<n+\>:\\t'>
X  <PgfNumberFont `'>
X  <PgfNumAtEnd No >
X  <PgfNumTabs 1>
X  <TabStop 
X   <TSX  0.25">
X   <TSType Left >
X   <TSLeaderStr ` '>
X  > # end of TabStop
X  <PgfHyphenate Yes >
X  <HyphenMaxLines 2>
X  <HyphenMinPrefix 3>
X  <HyphenMinSuffix 3>
X  <HyphenMinWord 5>
X  <PgfLetterSpace No >
X  <PgfMinWordSpace 90>
X  <PgfOptWordSpace 100>
X  <PgfMaxWordSpace 110>
X  <PgfLanguage USEnglish >
X  <PgfCellAlignment Top >
X  <PgfCellMargins  0.0 pt 0.0 pt 0.0 pt 0.0 pt>
X  <PgfCellLMarginFixed No >
X  <PgfCellTMarginFixed No >
X  <PgfCellRMarginFixed No >
X  <PgfCellBMarginFixed No >
X > # end of Pgf
X <Pgf 
X  <PgfTag `chunkTOC'>
X  <PgfUseNextTag No >
X  <PgfNextTag `'>
X  <PgfAlignment LeftRight >
X  <PgfFIndent  0.0">
X  <PgfLIndent  0.0">
X  <PgfRIndent  0.0">
X  <PgfTopSeparator `'>
X  <PgfBotSeparator `'>
X  <PgfPlacement Anywhere >
X  <PgfPlacementStyle Normal >
X  <PgfRunInDefaultPunct `. '>
X  <PgfSpBefore  5.0 pt>
X  <PgfSpAfter  0.0 pt>
X  <PgfWithPrev No >
X  <PgfWithNext No >
X  <PgfBlockSize 1>
X  <PgfFont 
X   <FTag `'>
X   <FFamily `Helvetica'>
X   <FVar `Regular'>
X   <FWeight `Regular'>
X   <FAngle `Regular'>
X   <FPostScriptName `Helvetica'>
X   <FSize  10.0 pt>
X   <FUnderlining FNoUnderlining >
X   <FUnderline No >
X   <FDoubleUnderline No >
X   <FNumericUnderline No >
X   <FOverline No >
X   <FStrike No >
X   <FChangeBar No >
X   <FOutline No >
X   <FShadow No >
X   <FPairKern Yes >
X   <FCase FAsTyped >
X   <FPosition FNormal >
X   <FSupScript No >
X   <FSubScript No >
X   <FDX  0.0 pt>
X   <FDY  0.0 pt>
X   <FDW  0.0 pt>
X   <FSeparation 0>
X   <FColor `Black'>
X  > # end of PgfFont
X  <PgfLineSpacing Proportional >
X  <PgfLeading  2.0 pt>
X  <PgfAutoNum No >
X  <PgfNumTabs 2>
X  <TabStop 
X   <TSX  0.41667">
X   <TSType Left >
X   <TSLeaderStr `.'>
X  > # end of TabStop
X  <TabStop 
X   <TSX  5.80556">
X   <TSType Left >
X   <TSLeaderStr ` '>
X  > # end of TabStop
X  <PgfHyphenate Yes >
X  <HyphenMaxLines 2>
X  <HyphenMinPrefix 3>
X  <HyphenMinSuffix 3>
X  <HyphenMinWord 5>
X  <PgfLetterSpace No >
X  <PgfMinWordSpace 90>
X  <PgfOptWordSpace 100>
X  <PgfMaxWordSpace 110>
X  <PgfLanguage USEnglish >
X  <PgfCellAlignment Top >
X  <PgfCellMargins  0.0 pt 0.0 pt 0.0 pt 0.0 pt>
X  <PgfCellLMarginFixed No >
X  <PgfCellTMarginFixed No >
X  <PgfCellRMarginFixed No >
X  <PgfCellBMarginFixed No >
X > # end of Pgf
X <Pgf 
X  <PgfTag `code'>
X  <PgfUseNextTag No >
X  <PgfNextTag `'>
X  <PgfAlignment Left >
X  <PgfFIndent  0.25">
X  <PgfLIndent  0.25">
X  <PgfRIndent  0.0">
X  <PgfTopSeparator `'>
X  <PgfBotSeparator `'>
X  <PgfPlacement Anywhere >
X  <PgfPlacementStyle Normal >
X  <PgfRunInDefaultPunct `. '>
X  <PgfSpBefore  2.0 pt>
X  <PgfSpAfter  0.0 pt>
X  <PgfWithPrev No >
X  <PgfWithNext No >
X  <PgfBlockSize 1>
X  <PgfFont 
X   <FTag `'>
X   <FFamily `AvantGarde'>
X   <FVar `Regular'>
X   <FWeight `Book'>
X   <FAngle `Regular'>
X   <FPostScriptName `AvantGarde-Book'>
X   <FSize  10.0 pt>
X   <FUnderlining FNoUnderlining >
X   <FUnderline No >
X   <FDoubleUnderline No >
X   <FNumericUnderline No >
X   <FOverline No >
X   <FStrike No >
X   <FChangeBar No >
X   <FOutline No >
X   <FShadow No >
X   <FPairKern Yes >
X   <FCase FAsTyped >
X   <FPosition FNormal >
X   <FSupScript No >
X   <FSubScript No >
X   <FDX  0.0 pt>
X   <FDY  0.0 pt>
X   <FDW  0.0 pt>
X   <FSeparation 0>
X   <FColor `Black'>
X  > # end of PgfFont
X  <PgfLineSpacing Proportional >
X  <PgfLeading  2.0 pt>
X  <PgfAutoNum No >
X  <PgfNumTabs 25>
X  <TabStop 
X   <TSX  0.5">
X   <TSType Left >
X   <TSLeaderStr ` '>
X  > # end of TabStop
X  <TabStop 
X   <TSX  0.75">
X   <TSType Left >
X   <TSLeaderStr ` '>
X  > # end of TabStop
X  <TabStop 
X   <TSX  1.0">
X   <TSType Left >
X   <TSLeaderStr ` '>
X  > # end of TabStop
X  <TabStop 
X   <TSX  1.25">
X   <TSType Left >
X   <TSLeaderStr ` '>
X  > # end of TabStop
X  <TabStop 
X   <TSX  1.5">
X   <TSType Left >
X   <TSLeaderStr ` '>
X  > # end of TabStop
X  <TabStop 
X   <TSX  1.75">
X   <TSType Left >
X   <TSLeaderStr ` '>
X  > # end of TabStop
X  <TabStop 
X   <TSX  2.0">
X   <TSType Left >
X   <TSLeaderStr ` '>
X  > # end of TabStop
X  <TabStop 
X   <TSX  2.25">
X   <TSType Left >
X   <TSLeaderStr ` '>
X  > # end of TabStop
X  <TabStop 
X   <TSX  2.5">
X   <TSType Left >
X   <TSLeaderStr ` '>
X  > # end of TabStop
X  <TabStop 
X   <TSX  2.75">
X   <TSType Left >
X   <TSLeaderStr ` '>
X  > # end of TabStop
X  <TabStop 
X   <TSX  3.0">
X   <TSType Left >
X   <TSLeaderStr ` '>
X  > # end of TabStop
X  <TabStop 
X   <TSX  3.25">
X   <TSType Left >
X   <TSLeaderStr ` '>
X  > # end of TabStop
X  <TabStop 
X   <TSX  3.5">
X   <TSType Left >
X   <TSLeaderStr ` '>
X  > # end of TabStop
X  <TabStop 
X   <TSX  3.75">
X   <TSType Left >
X   <TSLeaderStr ` '>
X  > # end of TabStop
X  <TabStop 
X   <TSX  4.0">
X   <TSType Left >
X   <TSLeaderStr ` '>
X  > # end of TabStop
X  <TabStop 
X   <TSX  4.25">
X   <TSType Left >
X   <TSLeaderStr ` '>
X  > # end of TabStop
X  <TabStop 
X   <TSX  4.5">
X   <TSType Left >
X   <TSLeaderStr ` '>
X  > # end of TabStop
X  <TabStop 
X   <TSX  4.75">
X   <TSType Left >
X   <TSLeaderStr ` '>
X  > # end of TabStop
X  <TabStop 
X   <TSX  5.0">
X   <TSType Left >
X   <TSLeaderStr ` '>
X  > # end of TabStop
X  <TabStop 
X   <TSX  5.25">
X   <TSType Left >
X   <TSLeaderStr ` '>
X  > # end of TabStop
X  <TabStop 
X   <TSX  5.5">
X   <TSType Left >
X   <TSLeaderStr ` '>
X  > # end of TabStop
X  <TabStop 
X   <TSX  5.75">
X   <TSType Left >
X   <TSLeaderStr ` '>
X  > # end of TabStop
X  <TabStop 
X   <TSX  6.0">
X   <TSType Left >
X   <TSLeaderStr ` '>
X  > # end of TabStop
X  <TabStop 
X   <TSX  6.25">
X   <TSType Left >
X   <TSLeaderStr ` '>
X  > # end of TabStop
X  <TabStop 
X   <TSX  6.5">
X   <TSType Left >
X   <TSLeaderStr ` '>
X  > # end of TabStop
X  <PgfHyphenate Yes >
X  <HyphenMaxLines 2>
X  <HyphenMinPrefix 3>
X  <HyphenMinSuffix 3>
X  <HyphenMinWord 5>
X  <PgfLetterSpace No >
X  <PgfMinWordSpace 90>
X  <PgfOptWordSpace 100>
X  <PgfMaxWordSpace 110>
X  <PgfLanguage USEnglish >
X  <PgfCellAlignment Top >
X  <PgfCellMargins  0.0 pt 0.0 pt 0.0 pt 0.0 pt>
X  <PgfCellLMarginFixed No >
X  <PgfCellTMarginFixed No >
X  <PgfCellRMarginFixed No >
X  <PgfCellBMarginFixed No >
X > # end of Pgf
X <Pgf 
X  <PgfTag `exchunk'>
X  <PgfUseNextTag Yes >
X  <PgfNextTag `code'>
X  <PgfAlignment Left >
X  <PgfFIndent  0.0">
X  <PgfLIndent  0.0">
X  <PgfRIndent  0.0">
X  <PgfTopSeparator `'>
X  <PgfBotSeparator `'>
X  <PgfPlacement Anywhere >
X  <PgfPlacementStyle Normal >
X  <PgfRunInDefaultPunct `. '>
X  <PgfSpBefore  10.0 pt>
X  <PgfSpAfter  5.0 pt>
X  <PgfWithPrev No >
X  <PgfWithNext No >
X  <PgfBlockSize 1>
X  <PgfFont 
X   <FTag `'>
X   <FFamily `AvantGarde'>
X   <FVar `Regular'>
X   <FWeight `DemiBold'>
X   <FAngle `Regular'>
X   <FPostScriptName `AvantGarde-Demi'>
X   <FSize  12.0 pt>
X   <FUnderlining FSingle >
X   <FUnderline Yes >
X   <FDoubleUnderline No >
X   <FNumericUnderline No >
X   <FOverline No >
X   <FStrike No >
X   <FChangeBar No >
X   <FOutline No >
X   <FShadow No >
X   <FPairKern Yes >
X   <FCase FAsTyped >
X   <FPosition FNormal >
X   <FSupScript No >
X   <FSubScript No >
X   <FDX  0.0 pt>
X   <FDY  0.0 pt>
X   <FDW  0.0 pt>
X   <FSeparation 0>
X   <FColor `Black'>
X  > # end of PgfFont
X  <PgfLineSpacing Proportional >
X  <PgfLeading  2.0 pt>
X  <PgfAutoNum Yes >
X  <PgfNumFormat `C:<n+\>:\\t'>
X  <PgfNumberFont `'>
X  <PgfNumAtEnd No >
X  <PgfNumTabs 1>
X  <TabStop 
X   <TSX  0.25">
X   <TSType Left >
X   <TSLeaderStr ` '>
X  > # end of TabStop
X  <PgfHyphenate Yes >
X  <HyphenMaxLines 2>
X  <HyphenMinPrefix 3>
X  <HyphenMinSuffix 3>
X  <HyphenMinWord 5>
X  <PgfLetterSpace No >
X  <PgfMinWordSpace 90>
X  <PgfOptWordSpace 100>
X  <PgfMaxWordSpace 110>
X  <PgfLanguage USEnglish >
X  <PgfCellAlignment Top >
X  <PgfCellMargins  0.0 pt 0.0 pt 0.0 pt 0.0 pt>
X  <PgfCellLMarginFixed No >
X  <PgfCellTMarginFixed No >
X  <PgfCellRMarginFixed No >
X  <PgfCellBMarginFixed No >
X > # end of Pgf
X <Pgf 
X  <PgfTag `File'>
X  <PgfUseNextTag Yes >
X  <PgfNextTag `code'>
X  <PgfAlignment Left >
X  <PgfFIndent  0.0">
X  <PgfLIndent  0.0">
X  <PgfRIndent  0.0">
X  <PgfTopSeparator `'>
X  <PgfBotSeparator `'>
X  <PgfPlacement Anywhere >
X  <PgfPlacementStyle Normal >
X  <PgfRunInDefaultPunct `. '>
X  <PgfSpBefore  7.0 pt>
X  <PgfSpAfter  7.0 pt>
X  <PgfWithPrev No >
X  <PgfWithNext No >
X  <PgfBlockSize 1>
X  <PgfFont 
X   <FTag `'>
X   <FFamily `Times'>
X   <FVar `Regular'>
X   <FWeight `Bold'>
X   <FAngle `Regular'>
X   <FPostScriptName `Times-Bold'>
X   <FSize  18.0 pt>
X   <FUnderlining FSingle >
X   <FUnderline Yes >
X   <FDoubleUnderline No >
X   <FNumericUnderline No >
X   <FOverline No >
X   <FStrike No >
X   <FChangeBar No >
X   <FOutline No >
X   <FShadow No >
X   <FPairKern Yes >
X   <FCase FAsTyped >
X   <FPosition FNormal >
X   <FSupScript No >
X   <FSubScript No >
X   <FDX  0.0 pt>
X   <FDY  0.0 pt>
X   <FDW  0.0 pt>
X   <FSeparation 2>
X   <FColor `Red'>
X  > # end of PgfFont
X  <PgfLineSpacing Proportional >
X  <PgfLeading  4.0 pt>
X  <PgfAutoNum Yes >
X  <PgfNumFormat `File: '>
X  <PgfNumberFont `'>
X  <PgfNumAtEnd No >
X  <PgfNumTabs 1>
X  <TabStop 
X   <TSX  0.25">
X   <TSType Left >
X   <TSLeaderStr ` '>
X  > # end of TabStop
X  <PgfHyphenate Yes >
X  <HyphenMaxLines 2>
X  <HyphenMinPrefix 3>
X  <HyphenMinSuffix 3>
X  <HyphenMinWord 5>
X  <PgfLetterSpace No >
X  <PgfMinWordSpace 90>
X  <PgfOptWordSpace 100>
X  <PgfMaxWordSpace 110>
X  <PgfLanguage USEnglish >
X  <PgfCellAlignment Top >
X  <PgfCellMargins  0.0 pt 0.0 pt 0.0 pt 0.0 pt>
X  <PgfCellLMarginFixed No >
X  <PgfCellTMarginFixed No >
X  <PgfCellRMarginFixed No >
X  <PgfCellBMarginFixed No >
X > # end of Pgf
X <Pgf 
X  <PgfTag `Footnote'>
X  <PgfUseNextTag No >
X  <PgfNextTag `'>
X  <PgfAlignment Left >
X  <PgfFIndent  0.25">
X  <PgfLIndent  0.41667">
X  <PgfRIndent  0.25">
X  <PgfTopSeparator `'>
X  <PgfBotSeparator `'>
X  <PgfPlacement Anywhere >
X  <PgfPlacementStyle Normal >
X  <PgfRunInDefaultPunct `. '>
X  <PgfSpBefore  0.0 pt>
X  <PgfSpAfter  0.0 pt>
X  <PgfWithPrev No >
X  <PgfWithNext No >
X  <PgfBlockSize 1>
X  <PgfFont 
X   <FTag `'>
X   <FFamily `Times'>
X   <FVar `Regular'>
X   <FWeight `Regular'>
X   <FAngle `Regular'>
X   <FPostScriptName `Times-Roman'>
X   <FSize  10.0 pt>
X   <FUnderlining FNoUnderlining >
X   <FUnderline No >
X   <FDoubleUnderline No >
X   <FNumericUnderline No >
X   <FOverline No >
X   <FStrike No >
X   <FChangeBar No >
X   <FOutline No >
X   <FShadow No >
X   <FPairKern Yes >
X   <FCase FAsTyped >
X   <FPosition FNormal >
X   <FSupScript No >
X   <FSubScript No >
X   <FDX  0.0 pt>
X   <FDY  0.0 pt>
X   <FDW  0.0 pt>
X   <FSeparation 0>
X   <FColor `Black'>
X  > # end of PgfFont
X  <PgfLineSpacing Proportional >
X  <PgfLeading  2.0 pt>
X  <PgfAutoNum No >
X  <PgfNumTabs 1>
X  <TabStop 
X   <TSX  0.41667">
X   <TSType Left >
X   <TSLeaderStr ` '>
X  > # end of TabStop
X  <PgfHyphenate Yes >
X  <HyphenMaxLines 2>
X  <HyphenMinPrefix 3>
X  <HyphenMinSuffix 3>
X  <HyphenMinWord 5>
X  <PgfLetterSpace No >
X  <PgfMinWordSpace 90>
X  <PgfOptWordSpace 100>
X  <PgfMaxWordSpace 110>
X  <PgfLanguage USEnglish >
X  <PgfCellAlignment Top >
X  <PgfCellMargins  0.0 pt 0.0 pt 0.0 pt 0.0 pt>
X  <PgfCellLMarginFixed No >
X  <PgfCellTMarginFixed No >
X  <PgfCellRMarginFixed No >
X  <PgfCellBMarginFixed No >
X > # end of Pgf
X <Pgf 
X  <PgfTag `Heading1'>
X  <PgfUseNextTag Yes >
X  <PgfNextTag `Body'>
X  <PgfAlignment Left >
X  <PgfFIndent  0.0">
X  <PgfLIndent  0.0">
X  <PgfRIndent  0.0">
X  <PgfTopSeparator `'>
X  <PgfBotSeparator `Single Line'>
X  <PgfPlacement Anywhere >
X  <PgfPlacementStyle Normal >
X  <PgfRunInDefaultPunct `. '>
X  <PgfSpBefore  14.0 pt>
X  <PgfSpAfter  6.0 pt>
X  <PgfWithPrev No >
X  <PgfWithNext Yes >
X  <PgfBlockSize 1>
X  <PgfFont 
X   <FTag `'>
X   <FFamily `Helvetica'>
X   <FVar `Regular'>
X   <FWeight `Bold'>
X   <FAngle `Regular'>
X   <FPostScriptName `Helvetica-Bold'>
X   <FSize  14.0 pt>
X   <FUnderlining FNoUnderlining >
X   <FUnderline No >
X   <FDoubleUnderline No >
X   <FNumericUnderline No >
X   <FOverline No >
X   <FStrike No >
X   <FChangeBar No >
X   <FOutline No >
X   <FShadow No >
X   <FPairKern Yes >
X   <FCase FAsTyped >
X   <FPosition FNormal >
X   <FSupScript No >
X   <FSubScript No >
X   <FDX  0.0 pt>
X   <FDY  0.0 pt>
X   <FDW  0.0 pt>
X   <FSeparation 0>
X   <FColor `Black'>
X  > # end of PgfFont
X  <PgfLineSpacing Proportional >
X  <PgfLeading  2.0 pt>
X  <PgfAutoNum No >
X  <PgfNumTabs 0>
X  <PgfHyphenate Yes >
X  <HyphenMaxLines 2>
X  <HyphenMinPrefix 3>
X  <HyphenMinSuffix 3>
X  <HyphenMinWord 5>
X  <PgfLetterSpace No >
X  <PgfMinWordSpace 90>
X  <PgfOptWordSpace 100>
X  <PgfMaxWordSpace 110>
X  <PgfLanguage USEnglish >
X  <PgfCellAlignment Top >
X  <PgfCellMargins  0.0 pt 0.0 pt 0.0 pt 0.0 pt>
X  <PgfCellLMarginFixed No >
X  <PgfCellTMarginFixed No >
X  <PgfCellRMarginFixed No >
X  <PgfCellBMarginFixed No >
X > # end of Pgf
X <Pgf 
X  <PgfTag `Heading2'>
X  <PgfUseNextTag Yes >
X  <PgfNextTag `Body'>
X  <PgfAlignment Left >
X  <PgfFIndent  0.0">
X  <PgfLIndent  0.0">
X  <PgfRIndent  0.0">
X  <PgfTopSeparator `'>
X  <PgfBotSeparator `'>
X  <PgfPlacement Anywhere >
X  <PgfPlacementStyle Normal >
X  <PgfRunInDefaultPunct `. '>
X  <PgfSpBefore  14.0 pt>
X  <PgfSpAfter  4.0 pt>
X  <PgfWithPrev No >
X  <PgfWithNext Yes >
X  <PgfBlockSize 1>
X  <PgfFont 
X   <FTag `'>
X   <FFamily `Helvetica'>
X   <FVar `Regular'>
X   <FWeight `Regular'>
X   <FAngle `Regular'>
X   <FPostScriptName `Helvetica'>
X   <FSize  14.0 pt>
X   <FUnderlining FSingle >
X   <FUnderline Yes >
X   <FDoubleUnderline No >
X   <FNumericUnderline No >
X   <FOverline No >
X   <FStrike No >
X   <FChangeBar No >
X   <FOutline No >
X   <FShadow No >
X   <FPairKern Yes >
X   <FCase FAsTyped >
X   <FPosition FNormal >
X   <FSupScript No >
X   <FSubScript No >
X   <FDX  0.0 pt>
X   <FDY  0.0 pt>
X   <FDW  0.0 pt>
X   <FSeparation 0>
X   <FColor `Black'>
X  > # end of PgfFont
X  <PgfLineSpacing Proportional >
X  <PgfLeading  3.0 pt>
X  <PgfAutoNum No >
X  <PgfNumTabs 0>
X  <PgfHyphenate Yes >
X  <HyphenMaxLines 2>
X  <HyphenMinPrefix 3>
X  <HyphenMinSuffix 3>
X  <HyphenMinWord 5>
X  <PgfLetterSpace No >
X  <PgfMinWordSpace 90>
X  <PgfOptWordSpace 100>
X  <PgfMaxWordSpace 110>
X  <PgfLanguage USEnglish >
X  <PgfCellAlignment Top >
X  <PgfCellMargins  0.0 pt 0.0 pt 0.0 pt 0.0 pt>
X  <PgfCellLMarginFixed No >
X  <PgfCellTMarginFixed No >
X  <PgfCellRMarginFixed No >
X  <PgfCellBMarginFixed No >
X > # end of Pgf
X <Pgf 
X  <PgfTag `HeadingRunIn'>
X  <PgfUseNextTag Yes >
X  <PgfNextTag `Body'>
X  <PgfAlignment Left >
X  <PgfFIndent  0.0">
X  <PgfLIndent  0.0">
X  <PgfRIndent  0.0">
X  <PgfTopSeparator `'>
X  <PgfBotSeparator `'>
X  <PgfPlacement Anywhere >
X  <PgfPlacementStyle RunIn >
X  <PgfRunInDefaultPunct `. '>
X  <PgfSpBefore  6.0 pt>
X  <PgfSpAfter  0.0 pt>
X  <PgfWithPrev No >
X  <PgfWithNext Yes >
X  <PgfBlockSize 1>
X  <PgfFont 
X   <FTag `'>
X   <FFamily `Times'>
X   <FVar `Regular'>
X   <FWeight `Bold'>
X   <FAngle `Regular'>
X   <FPostScriptName `Times-Bold'>
X   <FSize  12.0 pt>
X   <FUnderlining FNoUnderlining >
X   <FUnderline No >
X   <FDoubleUnderline No >
X   <FNumericUnderline No >
X   <FOverline No >
X   <FStrike No >
X   <FChangeBar No >
X   <FOutline No >
X   <FShadow No >
X   <FPairKern Yes >
X   <FCase FAsTyped >
X   <FPosition FNormal >
X   <FSupScript No >
X   <FSubScript No >
X   <FDX  0.0 pt>
X   <FDY  0.0 pt>
X   <FDW  0.0 pt>
X   <FSeparation 0>
X   <FColor `Black'>
X  > # end of PgfFont
X  <PgfLineSpacing Proportional >
X  <PgfLeading  2.0 pt>
X  <PgfAutoNum No >
X  <PgfNumTabs 0>
X  <PgfHyphenate Yes >
X  <HyphenMaxLines 2>
X  <HyphenMinPrefix 3>
X  <HyphenMinSuffix 3>
X  <HyphenMinWord 5>
X  <PgfLetterSpace No >
X  <PgfMinWordSpace 90>
X  <PgfOptWordSpace 100>
X  <PgfMaxWordSpace 110>
X  <PgfLanguage USEnglish >
X  <PgfCellAlignment Top >
X  <PgfCellMargins  0.0 pt 0.0 pt 0.0 pt 0.0 pt>
X  <PgfCellLMarginFixed No >
X  <PgfCellTMarginFixed No >
X  <PgfCellRMarginFixed No >
X  <PgfCellBMarginFixed No >
X > # end of Pgf
X <Pgf 
X  <PgfTag `Indented'>
X  <PgfUseNextTag No >
X  <PgfNextTag `'>
X  <PgfAlignment Left >
X  <PgfFIndent  0.25">
X  <PgfLIndent  0.25">
X  <PgfRIndent  0.0">
X  <PgfTopSeparator `'>
X  <PgfBotSeparator `'>
X  <PgfPlacement Anywhere >
X  <PgfPlacementStyle Normal >
X  <PgfRunInDefaultPunct `. '>
X  <PgfSpBefore  0.0 pt>
X  <PgfSpAfter  0.0 pt>
X  <PgfWithPrev No >
X  <PgfWithNext No >
X  <PgfBlockSize 1>
X  <PgfFont 
X   <FTag `'>
X   <FFamily `Times'>
X   <FVar `Regular'>
X   <FWeight `Regular'>
X   <FAngle `Regular'>
X   <FPostScriptName `Times-Roman'>
X   <FSize  12.0 pt>
X   <FUnderlining FNoUnderlining >
X   <FUnderline No >
X   <FDoubleUnderline No >
X   <FNumericUnderline No >
X   <FOverline No >
X   <FStrike No >
X   <FChangeBar No >
X   <FOutline No >
X   <FShadow No >
X   <FPairKern Yes >
X   <FCase FAsTyped >
X   <FPosition FNormal >
X   <FSupScript No >
X   <FSubScript No >
X   <FDX  0.0 pt>
X   <FDY  0.0 pt>
X   <FDW  0.0 pt>
X   <FSeparation 0>
X   <FColor `Black'>
X  > # end of PgfFont
X  <PgfLineSpacing Proportional >
X  <PgfLeading  2.0 pt>
X  <PgfAutoNum No >
X  <PgfNumTabs 1>
X  <TabStop 
X   <TSX  0.25">
X   <TSType Left >
X   <TSLeaderStr ` '>
X  > # end of TabStop
X  <PgfHyphenate Yes >
X  <HyphenMaxLines 2>
X  <HyphenMinPrefix 3>
X  <HyphenMinSuffix 3>
X  <HyphenMinWord 5>
X  <PgfLetterSpace No >
X  <PgfMinWordSpace 90>
X  <PgfOptWordSpace 100>
X  <PgfMaxWordSpace 110>
X  <PgfLanguage USEnglish >
X  <PgfCellAlignment Top >
X  <PgfCellMargins  0.0 pt 0.0 pt 0.0 pt 0.0 pt>
X  <PgfCellLMarginFixed No >
X  <PgfCellTMarginFixed No >
X  <PgfCellRMarginFixed No >
X  <PgfCellBMarginFixed No >
X > # end of Pgf
X <Pgf 
X  <PgfTag `Numbered'>
X  <PgfUseNextTag No >
X  <PgfNextTag `'>
X  <PgfAlignment Left >
X  <PgfFIndent  0.0">
X  <PgfLIndent  0.25">
X  <PgfRIndent  0.0">
X  <PgfTopSeparator `'>
X  <PgfBotSeparator `'>
X  <PgfPlacement Anywhere >
X  <PgfPlacementStyle Normal >
X  <PgfRunInDefaultPunct `. '>
X  <PgfSpBefore  0.0 pt>
X  <PgfSpAfter  0.0 pt>
X  <PgfWithPrev No >
X  <PgfWithNext No >
X  <PgfBlockSize 1>
X  <PgfFont 
X   <FTag `'>
X   <FFamily `Times'>
X   <FVar `Regular'>
X   <FWeight `Regular'>
X   <FAngle `Regular'>
X   <FPostScriptName `Times-Roman'>
X   <FSize  12.0 pt>
X   <FUnderlining FNoUnderlining >
X   <FUnderline No >
X   <FDoubleUnderline No >
X   <FNumericUnderline No >
X   <FOverline No >
X   <FStrike No >
X   <FChangeBar No >
X   <FOutline No >
X   <FShadow No >
X   <FPairKern Yes >
X   <FCase FAsTyped >
X   <FPosition FNormal >
X   <FSupScript No >
X   <FSubScript No >
X   <FDX  0.0 pt>
X   <FDY  0.0 pt>
X   <FDW  0.0 pt>
X   <FSeparation 0>
X   <FColor `Black'>
X  > # end of PgfFont
X  <PgfLineSpacing Proportional >
X  <PgfLeading  2.0 pt>
X  <PgfAutoNum Yes >
X  <PgfNumFormat `<n+\>.\\t'>
X  <PgfNumberFont `'>
X  <PgfNumAtEnd No >
X  <PgfNumTabs 1>
X  <TabStop 
X   <TSX  0.25">
X   <TSType Left >
X   <TSLeaderStr ` '>
X  > # end of TabStop
X  <PgfHyphenate Yes >
X  <HyphenMaxLines 2>
X  <HyphenMinPrefix 3>
X  <HyphenMinSuffix 3>
X  <HyphenMinWord 5>
X  <PgfLetterSpace No >
X  <PgfMinWordSpace 90>
X  <PgfOptWordSpace 100>
X  <PgfMaxWordSpace 110>
X  <PgfLanguage USEnglish >
X  <PgfCellAlignment Top >
X  <PgfCellMargins  0.0 pt 0.0 pt 0.0 pt 0.0 pt>
X  <PgfCellLMarginFixed No >
X  <PgfCellTMarginFixed No >
X  <PgfCellRMarginFixed No >
X  <PgfCellBMarginFixed No >
X > # end of Pgf
X <Pgf 
X  <PgfTag `Numbered1'>
X  <PgfUseNextTag Yes >
X  <PgfNextTag `Numbered'>
X  <PgfAlignment Left >
X  <PgfFIndent  0.0">
X  <PgfLIndent  0.25">
X  <PgfRIndent  0.0">
X  <PgfTopSeparator `'>
X  <PgfBotSeparator `'>
X  <PgfPlacement Anywhere >
X  <PgfPlacementStyle Normal >
X  <PgfRunInDefaultPunct `. '>
X  <PgfSpBefore  0.0 pt>
X  <PgfSpAfter  0.0 pt>
X  <PgfWithPrev No >
X  <PgfWithNext No >
X  <PgfBlockSize 1>
X  <PgfFont 
X   <FTag `'>
X   <FFamily `Times'>
X   <FVar `Regular'>
X   <FWeight `Regular'>
X   <FAngle `Regular'>
X   <FPostScriptName `Times-Roman'>
X   <FSize  12.0 pt>
X   <FUnderlining FNoUnderlining >
X   <FUnderline No >
X   <FDoubleUnderline No >
X   <FNumericUnderline No >
X   <FOverline No >
X   <FStrike No >
X   <FChangeBar No >
X   <FOutline No >
X   <FShadow No >
X   <FPairKern Yes >
X   <FCase FAsTyped >
X   <FPosition FNormal >
X   <FSupScript No >
X   <FSubScript No >
X   <FDX  0.0 pt>
X   <FDY  0.0 pt>
X   <FDW  0.0 pt>
X   <FSeparation 0>
X   <FColor `Black'>
X  > # end of PgfFont
X  <PgfLineSpacing Proportional >
X  <PgfLeading  2.0 pt>
X  <PgfAutoNum Yes >
X  <PgfNumFormat `<n=1\>.\\t'>
X  <PgfNumberFont `'>
X  <PgfNumAtEnd No >
X  <PgfNumTabs 1>
X  <TabStop 
X   <TSX  0.25">
X   <TSType Left >
X   <TSLeaderStr ` '>
X  > # end of TabStop
X  <PgfHyphenate Yes >
X  <HyphenMaxLines 2>
X  <HyphenMinPrefix 3>
X  <HyphenMinSuffix 3>
X  <HyphenMinWord 5>
X  <PgfLetterSpace No >
X  <PgfMinWordSpace 90>
X  <PgfOptWordSpace 100>
X  <PgfMaxWordSpace 110>
X  <PgfLanguage USEnglish >
X  <PgfCellAlignment Top >
X  <PgfCellMargins  0.0 pt 0.0 pt 0.0 pt 0.0 pt>
X  <PgfCellLMarginFixed No >
X  <PgfCellTMarginFixed No >
X  <PgfCellRMarginFixed No >
X  <PgfCellBMarginFixed No >
X > # end of Pgf
X <Pgf 
X  <PgfTag `perlcode'>
X  <PgfUseNextTag No >
X  <PgfNextTag `'>
X  <PgfAlignment Left >
X  <PgfFIndent  0.25">
X  <PgfLIndent  0.25">
X  <PgfRIndent  0.0">
X  <PgfTopSeparator `'>
X  <PgfBotSeparator `'>
X  <PgfPlacement Anywhere >
X  <PgfPlacementStyle Normal >
X  <PgfRunInDefaultPunct `. '>
X  <PgfSpBefore  0.0 pt>
X  <PgfSpAfter  0.0 pt>
X  <PgfWithPrev No >
X  <PgfWithNext No >
X  <PgfBlockSize 1>
X  <PgfFont 
X   <FTag `'>
X   <FFamily `AvantGarde'>
X   <FVar `Regular'>
X   <FWeight `Book'>
X   <FAngle `Regular'>
X   <FPostScriptName `AvantGarde-Book'>
X   <FSize  10.0 pt>
X   <FUnderlining FNoUnderlining >
X   <FUnderline No >
X   <FDoubleUnderline No >
X   <FNumericUnderline No >
X   <FOverline No >
X   <FStrike No >
X   <FChangeBar No >
X   <FOutline No >
X   <FShadow No >
X   <FPairKern Yes >
X   <FCase FAsTyped >
X   <FPosition FNormal >
X   <FSupScript No >
X   <FSubScript No >
X   <FDX  0.0 pt>
X   <FDY  0.0 pt>
X   <FDW  0.0 pt>
X   <FSeparation 0>
X   <FColor `Black'>
X  > # end of PgfFont
X  <PgfLineSpacing Proportional >
X  <PgfLeading  2.0 pt>
X  <PgfAutoNum No >
X  <PgfNumTabs 21>
X  <TabStop 
X   <TSX  0.5">
X   <TSType Left >
X   <TSLeaderStr ` '>
X  > # end of TabStop
X  <TabStop 
X   <TSX  0.75">
X   <TSType Left >
X   <TSLeaderStr ` '>
X  > # end of TabStop
X  <TabStop 
X   <TSX  1.0">
X   <TSType Left >
X   <TSLeaderStr ` '>
X  > # end of TabStop
X  <TabStop 
X   <TSX  1.25">
X   <TSType Left >
X   <TSLeaderStr ` '>
X  > # end of TabStop
X  <TabStop 
X   <TSX  1.5">
X   <TSType Left >
X   <TSLeaderStr ` '>
X  > # end of TabStop
X  <TabStop 
X   <TSX  1.75">
X   <TSType Left >
X   <TSLeaderStr ` '>
X  > # end of TabStop
X  <TabStop 
X   <TSX  2.0">
X   <TSType Left >
X   <TSLeaderStr ` '>
X  > # end of TabStop
X  <TabStop 
X   <TSX  2.25">
X   <TSType Left >
X   <TSLeaderStr ` '>
X  > # end of TabStop
X  <TabStop 
X   <TSX  2.5">
X   <TSType Left >
X   <TSLeaderStr ` '>
X  > # end of TabStop
X  <TabStop 
X   <TSX  3.0">
X   <TSType Left >
X   <TSLeaderStr ` '>
X  > # end of TabStop
X  <TabStop 
X   <TSX  3.5">
X   <TSType Left >
X   <TSLeaderStr ` '>
X  > # end of TabStop
X  <TabStop 
X   <TSX  4.0">
X   <TSType Left >
X   <TSLeaderStr ` '>
X  > # end of TabStop
X  <TabStop 
X   <TSX  4.5">
X   <TSType Left >
X   <TSLeaderStr ` '>
X  > # end of TabStop
X  <TabStop 
X   <TSX  4.75">
X   <TSType Left >
X   <TSLeaderStr ` '>
X  > # end of TabStop
X  <TabStop 
X   <TSX  5.0">
X   <TSType Left >
X   <TSLeaderStr ` '>
X  > # end of TabStop
X  <TabStop 
X   <TSX  5.25">
X   <TSType Left >
X   <TSLeaderStr ` '>
X  > # end of TabStop
X  <TabStop 
X   <TSX  5.5">
X   <TSType Left >
X   <TSLeaderStr ` '>
X  > # end of TabStop
X  <TabStop 
X   <TSX  5.75">
X   <TSType Left >
X   <TSLeaderStr ` '>
X  > # end of TabStop
X  <TabStop 
X   <TSX  6.0">
X   <TSType Left >
X   <TSLeaderStr ` '>
X  > # end of TabStop
X  <TabStop 
X   <TSX  6.25">
X   <TSType Left >
X   <TSLeaderStr ` '>
X  > # end of TabStop
X  <TabStop 
X   <TSX  6.5">
X   <TSType Left >
X   <TSLeaderStr ` '>
X  > # end of TabStop
X  <PgfHyphenate Yes >
X  <HyphenMaxLines 2>
X  <HyphenMinPrefix 3>
X  <HyphenMinSuffix 3>
X  <HyphenMinWord 5>
X  <PgfLetterSpace No >
X  <PgfMinWordSpace 90>
X  <PgfOptWordSpace 100>
X  <PgfMaxWordSpace 110>
X  <PgfLanguage USEnglish >
X  <PgfCellAlignment Top >
X  <PgfCellMargins  0.0 pt 0.0 pt 0.0 pt 0.0 pt>
X  <PgfCellLMarginFixed No >
X  <PgfCellTMarginFixed No >
X  <PgfCellRMarginFixed No >
X  <PgfCellBMarginFixed No >
X > # end of Pgf
X <Pgf 
X  <PgfTag `Ref'>
X  <PgfUseNextTag No >
X  <PgfNextTag `'>
X  <PgfAlignment LeftRight >
X  <PgfFIndent  0.0">
X  <PgfLIndent  0.25">
X  <PgfRIndent  0.0">
X  <PgfTopSeparator `'>
X  <PgfBotSeparator `'>
X  <PgfPlacement Anywhere >
X  <PgfPlacementStyle Normal >
X  <PgfRunInDefaultPunct `. '>
X  <PgfSpBefore  2.0 pt>
X  <PgfSpAfter  0.0 pt>
X  <PgfWithPrev No >
X  <PgfWithNext No >
X  <PgfBlockSize 1>
X  <PgfFont 
X   <FTag `'>
X   <FFamily `Helvetica'>
X   <FVar `Regular'>
X   <FWeight `Regular'>
X   <FAngle `Regular'>
X   <FPostScriptName `Helvetica'>
X   <FSize  10.0 pt>
X   <FUnderlining FNoUnderlining >
X   <FUnderline No >
X   <FDoubleUnderline No >
X   <FNumericUnderline No >
X   <FOverline No >
X   <FStrike No >
X   <FChangeBar No >
X   <FOutline No >
X   <FShadow No >
X   <FPairKern Yes >
X   <FCase FAsTyped >
X   <FPosition FNormal >
X   <FSupScript No >
X   <FSubScript No >
X   <FDX  0.0 pt>
X   <FDY  0.0 pt>
X   <FDW  0.0 pt>
X   <FSeparation 0>
X   <FColor `Black'>
X  > # end of PgfFont
X  <PgfLineSpacing Proportional >
X  <PgfLeading  2.0 pt>
X  <PgfAutoNum Yes >
X  <PgfNumFormat `R:<n+\>.\\t'>
X  <PgfNumberFont `'>
X  <PgfNumAtEnd No >
X  <PgfNumTabs 1>
X  <TabStop 
X   <TSX  0.25">
X   <TSType Left >
X   <TSLeaderStr ` '>
X  > # end of TabStop
X  <PgfHyphenate Yes >
X  <HyphenMaxLines 2>
X  <HyphenMinPrefix 3>
X  <HyphenMinSuffix 3>
X  <HyphenMinWord 5>
X  <PgfLetterSpace No >
X  <PgfMinWordSpace 90>
X  <PgfOptWordSpace 100>
X  <PgfMaxWordSpace 110>
X  <PgfLanguage USEnglish >
X  <PgfCellAlignment Top >
X  <PgfCellMargins  0.0 pt 0.0 pt 0.0 pt 0.0 pt>
X  <PgfCellLMarginFixed No >
X  <PgfCellTMarginFixed No >
X  <PgfCellRMarginFixed No >
X  <PgfCellBMarginFixed No >
X > # end of Pgf
X <Pgf 
X  <PgfTag `refersTo'>
X  <PgfUseNextTag No >
X  <PgfNextTag `'>
X  <PgfAlignment Left >
X  <PgfFIndent  0.25">
X  <PgfLIndent  0.25">
X  <PgfRIndent  0.0">
X  <PgfTopSeparator `'>
X  <PgfBotSeparator `'>
X  <PgfPlacement Anywhere >
X  <PgfPlacementStyle Normal >
X  <PgfRunInDefaultPunct `. '>
X  <PgfSpBefore  2.0 pt>
X  <PgfSpAfter  0.0 pt>
X  <PgfWithPrev No >
X  <PgfWithNext No >
X  <PgfBlockSize 1>
X  <PgfFont 
X   <FTag `'>
X   <FFamily `AvantGarde'>
X   <FVar `Regular'>
X   <FWeight `Book'>
X   <FAngle `Regular'>
X   <FPostScriptName `AvantGarde-Book'>
X   <FSize  10.0 pt>
X   <FUnderlining FNoUnderlining >
X   <FUnderline No >
X   <FDoubleUnderline No >
X   <FNumericUnderline No >
X   <FOverline No >
X   <FStrike No >
X   <FChangeBar No >
X   <FOutline No >
X   <FShadow No >
X   <FPairKern Yes >
X   <FCase FAsTyped >
X   <FPosition FNormal >
X   <FSupScript No >
X   <FSubScript No >
X   <FDX  0.0 pt>
X   <FDY  0.0 pt>
X   <FDW  0.0 pt>
X   <FSeparation 0>
X   <FColor `Black'>
X  > # end of PgfFont
X  <PgfLineSpacing Proportional >
X  <PgfLeading  2.0 pt>
X  <PgfAutoNum No >
X  <PgfNumTabs 25>
X  <TabStop 
X   <TSX  0.5">
X   <TSType Left >
X   <TSLeaderStr ` '>
X  > # end of TabStop
X  <TabStop 
X   <TSX  0.75">
X   <TSType Left >
X   <TSLeaderStr ` '>
X  > # end of TabStop
X  <TabStop 
X   <TSX  1.0">
X   <TSType Left >
X   <TSLeaderStr ` '>
X  > # end of TabStop
X  <TabStop 
X   <TSX  1.25">
X   <TSType Left >
X   <TSLeaderStr ` '>
X  > # end of TabStop
X  <TabStop 
X   <TSX  1.5">
X   <TSType Left >
X   <TSLeaderStr ` '>
X  > # end of TabStop
X  <TabStop 
X   <TSX  1.75">
X   <TSType Left >
X   <TSLeaderStr ` '>
X  > # end of TabStop
X  <TabStop 
X   <TSX  2.0">
X   <TSType Left >
X   <TSLeaderStr ` '>
X  > # end of TabStop
X  <TabStop 
X   <TSX  2.25">
X   <TSType Left >
X   <TSLeaderStr ` '>
X  > # end of TabStop
X  <TabStop 
X   <TSX  2.5">
X   <TSType Left >
X   <TSLeaderStr ` '>
X  > # end of TabStop
X  <TabStop 
X   <TSX  2.75">
X   <TSType Left >
X   <TSLeaderStr ` '>
X  > # end of TabStop
X  <TabStop 
X   <TSX  3.0">
X   <TSType Left >
X   <TSLeaderStr ` '>
X  > # end of TabStop
X  <TabStop 
X   <TSX  3.25">
X   <TSType Left >
X   <TSLeaderStr ` '>
X  > # end of TabStop
X  <TabStop 
X   <TSX  3.5">
X   <TSType Left >
X   <TSLeaderStr ` '>
X  > # end of TabStop
X  <TabStop 
X   <TSX  3.75">
X   <TSType Left >
X   <TSLeaderStr ` '>
X  > # end of TabStop
X  <TabStop 
X   <TSX  4.0">
X   <TSType Left >
X   <TSLeaderStr ` '>
X  > # end of TabStop
X  <TabStop 
X   <TSX  4.25">
X   <TSType Left >
X   <TSLeaderStr ` '>
X  > # end of TabStop
X  <TabStop 
X   <TSX  4.5">
X   <TSType Left >
X   <TSLeaderStr ` '>
X  > # end of TabStop
X  <TabStop 
X   <TSX  4.75">
X   <TSType Left >
X   <TSLeaderStr ` '>
X  > # end of TabStop
X  <TabStop 
X   <TSX  5.0">
X   <TSType Left >
X   <TSLeaderStr ` '>
X  > # end of TabStop
X  <TabStop 
X   <TSX  5.25">
X   <TSType Left >
X   <TSLeaderStr ` '>
X  > # end of TabStop
X  <TabStop 
X   <TSX  5.5">
X   <TSType Left >
X   <TSLeaderStr ` '>
X  > # end of TabStop
X  <TabStop 
X   <TSX  5.75">
X   <TSType Left >
X   <TSLeaderStr ` '>
X  > # end of TabStop
X  <TabStop 
X   <TSX  6.0">
X   <TSType Left >
X   <TSLeaderStr ` '>
X  > # end of TabStop
X  <TabStop 
X   <TSX  6.25">
X   <TSType Left >
X   <TSLeaderStr ` '>
X  > # end of TabStop
X  <TabStop 
X   <TSX  6.5">
X   <TSType Left >
X   <TSLeaderStr ` '>
X  > # end of TabStop
X  <PgfHyphenate Yes >
X  <HyphenMaxLines 2>
X  <HyphenMinPrefix 3>
X  <HyphenMinSuffix 3>
X  <HyphenMinWord 5>
X  <PgfLetterSpace No >
X  <PgfMinWordSpace 90>
X  <PgfOptWordSpace 100>
X  <PgfMaxWordSpace 110>
X  <PgfLanguage USEnglish >
X  <PgfCellAlignment Top >
X  <PgfCellMargins  0.0 pt 0.0 pt 0.0 pt 0.0 pt>
X  <PgfCellLMarginFixed No >
X  <PgfCellTMarginFixed No >
X  <PgfCellRMarginFixed No >
X  <PgfCellBMarginFixed No >
X > # end of Pgf
X <Pgf 
X  <PgfTag `refersToTOC'>
X  <PgfUseNextTag No >
X  <PgfNextTag `'>
X  <PgfAlignment LeftRight >
X  <PgfFIndent  0.0">
X  <PgfLIndent  0.0">
X  <PgfRIndent  0.0">
X  <PgfTopSeparator `'>
X  <PgfBotSeparator `'>
X  <PgfPlacement Anywhere >
X  <PgfPlacementStyle Normal >
X  <PgfRunInDefaultPunct `. '>
X  <PgfSpBefore  5.0 pt>
X  <PgfSpAfter  0.0 pt>
X  <PgfWithPrev No >
X  <PgfWithNext No >
X  <PgfBlockSize 1>
X  <PgfFont 
X   <FTag `'>
X   <FFamily `Helvetica'>
X   <FVar `Regular'>
X   <FWeight `Regular'>
X   <FAngle `Regular'>
X   <FPostScriptName `Helvetica'>
X   <FSize  10.0 pt>
X   <FUnderlining FNoUnderlining >
X   <FUnderline No >
X   <FDoubleUnderline No >
X   <FNumericUnderline No >
X   <FOverline No >
X   <FStrike No >
X   <FChangeBar No >
X   <FOutline No >
X   <FShadow No >
X   <FPairKern Yes >
X   <FCase FAsTyped >
X   <FPosition FNormal >
X   <FSupScript No >
X   <FSubScript No >
X   <FDX  0.0 pt>
X   <FDY  0.0 pt>
X   <FDW  0.0 pt>
X   <FSeparation 0>
X   <FColor `Black'>
X  > # end of PgfFont
X  <PgfLineSpacing Proportional >
X  <PgfLeading  2.0 pt>
X  <PgfAutoNum No >
X  <PgfNumTabs 1>
X  <TabStop 
X   <TSX  0.18056">
X   <TSType Left >
X   <TSLeaderStr ` '>
X  > # end of TabStop
X  <PgfHyphenate Yes >
X  <HyphenMaxLines 2>
X  <HyphenMinPrefix 3>
X  <HyphenMinSuffix 3>
X  <HyphenMinWord 5>
X  <PgfLetterSpace No >
X  <PgfMinWordSpace 90>
X  <PgfOptWordSpace 100>
X  <PgfMaxWordSpace 110>
X  <PgfLanguage USEnglish >
X  <PgfCellAlignment Top >
X  <PgfCellMargins  0.0 pt 0.0 pt 0.0 pt 0.0 pt>
X  <PgfCellLMarginFixed No >
X  <PgfCellTMarginFixed No >
X  <PgfCellRMarginFixed No >
X  <PgfCellBMarginFixed No >
X > # end of Pgf
X <Pgf 
X  <PgfTag `TableFootnote'>
X  <PgfUseNextTag No >
X  <PgfNextTag `'>
X  <PgfAlignment Left >
X  <PgfFIndent  0.25">
X  <PgfLIndent  0.41667">
X  <PgfRIndent  0.25">
X  <PgfTopSeparator `'>
X  <PgfBotSeparator `'>
X  <PgfPlacement Anywhere >
X  <PgfPlacementStyle Normal >
X  <PgfRunInDefaultPunct `. '>
X  <PgfSpBefore  0.0 pt>
X  <PgfSpAfter  0.0 pt>
X  <PgfWithPrev No >
X  <PgfWithNext No >
X  <PgfBlockSize 1>
X  <PgfFont 
X   <FTag `'>
X   <FFamily `Times'>
X   <FVar `Regular'>
X   <FWeight `Regular'>
X   <FAngle `Regular'>
X   <FPostScriptName `Times-Roman'>
X   <FSize  10.0 pt>
X   <FUnderlining FNoUnderlining >
X   <FUnderline No >
X   <FDoubleUnderline No >
X   <FNumericUnderline No >
X   <FOverline No >
X   <FStrike No >
X   <FChangeBar No >
X   <FOutline No >
X   <FShadow No >
X   <FPairKern Yes >
X   <FCase FAsTyped >
X   <FPosition FNormal >
X   <FSupScript No >
X   <FSubScript No >
X   <FDX  0.0 pt>
X   <FDY  0.0 pt>
X   <FDW  0.0 pt>
X   <FSeparation 0>
X   <FColor `Black'>
X  > # end of PgfFont
X  <PgfLineSpacing Proportional >
X  <PgfLeading  2.0 pt>
X  <PgfAutoNum No >
X  <PgfNumTabs 1>
X  <TabStop 
X   <TSX  0.41667">
X   <TSType Left >
X   <TSLeaderStr ` '>
X  > # end of TabStop
X  <PgfHyphenate Yes >
X  <HyphenMaxLines 2>
X  <HyphenMinPrefix 3>
X  <HyphenMinSuffix 3>
X  <HyphenMinWord 5>
X  <PgfLetterSpace No >
X  <PgfMinWordSpace 90>
X  <PgfOptWordSpace 100>
X  <PgfMaxWordSpace 110>
X  <PgfLanguage USEnglish >
X  <PgfCellAlignment Top >
X  <PgfCellMargins  0.0 pt 0.0 pt 0.0 pt 0.0 pt>
X  <PgfCellLMarginFixed No >
X  <PgfCellTMarginFixed No >
X  <PgfCellRMarginFixed No >
X  <PgfCellBMarginFixed No >
X > # end of Pgf
X <Pgf 
X  <PgfTag `TableTitle'>
X  <PgfUseNextTag No >
X  <PgfNextTag `'>
X  <PgfAlignment Center >
X  <PgfFIndent  0.0">
X  <PgfLIndent  0.0">
X  <PgfRIndent  0.0">
X  <PgfTopSeparator `'>
X  <PgfBotSeparator `'>
X  <PgfPlacement Anywhere >
X  <PgfPlacementStyle Normal >
X  <PgfRunInDefaultPunct `. '>
X  <PgfSpBefore  0.0 pt>
X  <PgfSpAfter  0.0 pt>
X  <PgfWithPrev No >
X  <PgfWithNext No >
X  <PgfBlockSize 1>
X  <PgfFont 
X   <FTag `'>
X   <FFamily `Times'>
X   <FVar `Regular'>
X   <FWeight `Bold'>
X   <FAngle `Regular'>
X   <FPostScriptName `Times-Bold'>
X   <FSize  12.0 pt>
X   <FUnderlining FNoUnderlining >
X   <FUnderline No >
X   <FDoubleUnderline No >
X   <FNumericUnderline No >
X   <FOverline No >
X   <FStrike No >
X   <FChangeBar No >
X   <FOutline No >
X   <FShadow No >
X   <FPairKern Yes >
X   <FCase FAsTyped >
X   <FPosition FNormal >
X   <FSupScript No >
X   <FSubScript No >
X   <FDX  0.0 pt>
X   <FDY  0.0 pt>
X   <FDW  0.0 pt>
X   <FSeparation 0>
X   <FColor `Black'>
X  > # end of PgfFont
X  <PgfLineSpacing Proportional >
X  <PgfLeading  2.0 pt>
X  <PgfAutoNum Yes >
X  <PgfNumFormat `T:Table <n+\>: '>
X  <PgfNumberFont `'>
X  <PgfNumAtEnd No >
X  <PgfNumTabs 0>
X  <PgfHyphenate No >
X  <HyphenMaxLines 2>
X  <HyphenMinPrefix 3>
X  <HyphenMinSuffix 3>
X  <HyphenMinWord 5>
X  <PgfLetterSpace No >
X  <PgfMinWordSpace 90>
X  <PgfOptWordSpace 100>
X  <PgfMaxWordSpace 110>
X  <PgfLanguage USEnglish >
X  <PgfCellAlignment Top >
X  <PgfCellMargins  0.0 pt 0.0 pt 0.0 pt 0.0 pt>
X  <PgfCellLMarginFixed No >
X  <PgfCellTMarginFixed No >
X  <PgfCellRMarginFixed No >
X  <PgfCellBMarginFixed No >
X > # end of Pgf
X <Pgf 
X  <PgfTag `Title'>
X  <PgfUseNextTag Yes >
X  <PgfNextTag `Body'>
X  <PgfAlignment Center >
X  <PgfFIndent  0.0">
X  <PgfLIndent  0.0">
X  <PgfRIndent  0.0">
X  <PgfTopSeparator `'>
X  <PgfBotSeparator `'>
X  <PgfPlacement Anywhere >
X  <PgfPlacementStyle Normal >
X  <PgfRunInDefaultPunct `. '>
X  <PgfSpBefore  18.0 pt>
X  <PgfSpAfter  8.0 pt>
X  <PgfWithPrev No >
X  <PgfWithNext Yes >
X  <PgfBlockSize 1>
X  <PgfFont 
X   <FTag `'>
X   <FFamily `Helvetica'>
X   <FVar `Regular'>
X   <FWeight `Bold'>
X   <FAngle `Regular'>
X   <FPostScriptName `Helvetica-Bold'>
X   <FSize  18.0 pt>
X   <FUnderlining FNoUnderlining >
X   <FUnderline No >
X   <FDoubleUnderline No >
X   <FNumericUnderline No >
X   <FOverline No >
X   <FStrike No >
X   <FChangeBar No >
X   <FOutline No >
X   <FShadow No >
X   <FPairKern Yes >
X   <FCase FAsTyped >
X   <FPosition FNormal >
X   <FSupScript No >
X   <FSubScript No >
X   <FDX  0.0 pt>
X   <FDY  0.0 pt>
X   <FDW  0.0 pt>
X   <FSeparation 0>
X   <FColor `Black'>
X  > # end of PgfFont
X  <PgfLineSpacing Proportional >
X  <PgfLeading  3.0 pt>
X  <PgfAutoNum No >
X  <PgfNumTabs 0>
X  <PgfHyphenate Yes >
X  <HyphenMaxLines 2>
X  <HyphenMinPrefix 3>
X  <HyphenMinSuffix 3>
X  <HyphenMinWord 5>
X  <PgfLetterSpace No >
X  <PgfMinWordSpace 90>
X  <PgfOptWordSpace 100>
X  <PgfMaxWordSpace 110>
X  <PgfLanguage USEnglish >
X  <PgfCellAlignment Top >
X  <PgfCellMargins  0.0 pt 0.0 pt 0.0 pt 0.0 pt>
X  <PgfCellLMarginFixed No >
X  <PgfCellTMarginFixed No >
X  <PgfCellRMarginFixed No >
X  <PgfCellBMarginFixed No >
X > # end of Pgf
X> # end of PgfCatalog
X<ElementDefCatalog 
X> # end of ElementDefCatalog
X<FontCatalog 
X <Font 
X  <FTag `code'>
X  <FFamily `AvantGarde'>
X  <FVar `Regular'>
X  <FWeight `Book'>
X  <FAngle `Regular'>
X  <FPostScriptName `AvantGarde-Book'>
X  <FOverline No >
X  <FStrike No >
X  <FChangeBar No >
X  <FPairKern Yes >
X  <FCase FAsTyped >
X  <FPosition FNormal >
X  <FSupScript No >
X  <FSubScript No >
X  <FDW  0.0 pt>
X  <FSeparation 0>
X  <FColor `Black'>
X > # end of Font
X <Font 
X  <FTag `Emphasis'>
X  <FAngle `Italic'>
X > # end of Font
X <Font 
X  <FTag `EquationVariables'>
X  <FAngle `Italic'>
X > # end of Font
X <Font 
X  <FTag `Symbol'>
X  <FFamily `Symbol'>
X  <FDW  0.0 pt>
X > # end of Font
X> # end of FontCatalog
X<RulingCatalog 
X <Ruling 
X  <RulingTag `Thin'>
X  <RulingPenWidth  0.5 pt>
X  <RulingGap  0.0 pt>
X  <RulingSeparation 0>
X  <RulingColor `Black'>
X  <RulingPen 0>
X  <RulingLines 1>
X > # end of Ruling
X <Ruling 
X  <RulingTag `Medium'>
X  <RulingPenWidth  2.0 pt>
X  <RulingGap  0.0 pt>
X  <RulingSeparation 0>
X  <RulingColor `Black'>
X  <RulingPen 0>
X  <RulingLines 1>
X > # end of Ruling
X <Ruling 
X  <RulingTag `Double'>
X  <RulingPenWidth  0.5 pt>
X  <RulingGap  2.0 pt>
X  <RulingSeparation 0>
X  <RulingColor `Black'>
X  <RulingPen 0>
X  <RulingLines 2>
X > # end of Ruling
X <Ruling 
X  <RulingTag `Thick'>
X  <RulingPenWidth  3.0 pt>
X  <RulingGap  0.0 pt>
X  <RulingSeparation 0>
X  <RulingColor `Black'>
X  <RulingPen 0>
X  <RulingLines 1>
X > # end of Ruling
X <Ruling 
X  <RulingTag `Very Thin'>
X  <RulingPenWidth  0.25 pt>
X  <RulingGap  0.0 pt>
X  <RulingSeparation 0>
X  <RulingColor `Black'>
X  <RulingPen 0>
X  <RulingLines 1>
X > # end of Ruling
X> # end of RulingCatalog
X<TblCatalog 
X <TblFormat 
X  <TblTag `Format A'>
X  <TblColumn 
X   <TblColumnNum 0>
X   <TblColumnWidth  1.0">
X   <TblColumnH 
X    <PgfTag `CellHeading'>
X   > # end of TblColumnH
X   <TblColumnBody 
X    <PgfTag `CellBody'>
X   > # end of TblColumnBody
X   <TblColumnF 
X    <Pgf 
X     <PgfTag `CellFooting'>
X     <PgfAlignment Center >
X     <PgfFont 
X      <FTag `'>
X      <FFamily `Times'>
X      <FVar `Regular'>
X      <FWeight `Regular'>
X      <FAngle `Regular'>
X      <FPostScriptName `Times-Roman'>
X      <FSize  12.0 pt>
X      <FUnderlining FNoUnderlining >
X      <FUnderline No >
X      <FDoubleUnderline No >
X      <FNumericUnderline No >
X      <FOverline No >
X      <FStrike No >
X      <FChangeBar No >
X      <FOutline No >
X      <FShadow No >
X      <FPairKern Yes >
X      <FCase FAsTyped >
X      <FPosition FNormal >
X      <FSupScript No >
X      <FSubScript No >
X      <FDX  0.0 pt>
X      <FDY  0.0 pt>
X      <FDW  0.0 pt>
X      <FSeparation 0>
X      <FColor `Black'>
X     > # end of PgfFont
X     <PgfHyphenate No >
X     <PgfCellAlignment Middle >
X     <PgfCellMargins  0.0 pt 2.0 pt 0.0 pt 2.0 pt>
X    > # end of Pgf
X   > # end of TblColumnF
X  > # end of TblColumn
X  <TblColumn 
X   <TblColumnNum 1>
X   <TblColumnWidth  1.0">
X   <TblColumnH 
X    <PgfTag `CellHeading'>
X   > # end of TblColumnH
X   <TblColumnBody 
X    <PgfTag `CellBody'>
X   > # end of TblColumnBody
X   <TblColumnF 
X    <Pgf 
X     <PgfTag `CellFooting'>
X     <PgfAlignment Center >
X     <PgfFont 
X      <FTag `'>
X      <FFamily `Times'>
X      <FVar `Regular'>
X      <FWeight `Regular'>
X      <FAngle `Regular'>
X      <FPostScriptName `Times-Roman'>
X      <FSize  12.0 pt>
X      <FUnderlining FNoUnderlining >
X      <FUnderline No >
X      <FDoubleUnderline No >
X      <FNumericUnderline No >
X      <FOverline No >
X      <FStrike No >
X      <FChangeBar No >
X      <FOutline No >
X      <FShadow No >
X      <FPairKern Yes >
X      <FCase FAsTyped >
X      <FPosition FNormal >
X      <FSupScript No >
X      <FSubScript No >
X      <FDX  0.0 pt>
X      <FDY  0.0 pt>
X      <FDW  0.0 pt>
X      <FSeparation 0>
X      <FColor `Black'>
X     > # end of PgfFont
X     <PgfHyphenate No >
X     <PgfCellAlignment Middle >
X     <PgfCellMargins  0.0 pt 2.0 pt 0.0 pt 2.0 pt>
X    > # end of Pgf
X   > # end of TblColumnF
X  > # end of TblColumn
X  <TblColumn 
X   <TblColumnNum 2>
X   <TblColumnWidth  1.0">
X   <TblColumnH 
X    <PgfTag `CellHeading'>
X   > # end of TblColumnH
X   <TblColumnBody 
X    <PgfTag `CellBody'>
X   > # end of TblColumnBody
X   <TblColumnF 
X    <Pgf 
X     <PgfTag `CellFooting'>
X     <PgfAlignment Center >
X     <PgfFont 
X      <FTag `'>
X      <FFamily `Times'>
X      <FVar `Regular'>
X      <FWeight `Regular'>
X      <FAngle `Regular'>
X      <FPostScriptName `Times-Roman'>
X      <FSize  12.0 pt>
X      <FUnderlining FNoUnderlining >
X      <FUnderline No >
X      <FDoubleUnderline No >
X      <FNumericUnderline No >
X      <FOverline No >
X      <FStrike No >
X      <FChangeBar No >
X      <FOutline No >
X      <FShadow No >
X      <FPairKern Yes >
X      <FCase FAsTyped >
X      <FPosition FNormal >
X      <FSupScript No >
X      <FSubScript No >
X      <FDX  0.0 pt>
X      <FDY  0.0 pt>
X      <FDW  0.0 pt>
X      <FSeparation 0>
X      <FColor `Black'>
X     > # end of PgfFont
X     <PgfHyphenate No >
X     <PgfCellAlignment Middle >
X     <PgfCellMargins  0.0 pt 2.0 pt 0.0 pt 2.0 pt>
X    > # end of Pgf
X   > # end of TblColumnF
X  > # end of TblColumn
X  <TblColumn 
X   <TblColumnNum 3>
X   <TblColumnWidth  1.0">
X   <TblColumnH 
X    <PgfTag `CellHeading'>
X   > # end of TblColumnH
X   <TblColumnBody 
X    <PgfTag `CellBody'>
X   > # end of TblColumnBody
X   <TblColumnF 
X    <Pgf 
X     <PgfTag `CellFooting'>
X     <PgfAlignment Center >
X     <PgfFont 
X      <FTag `'>
X      <FFamily `Times'>
X      <FVar `Regular'>
X      <FWeight `Regular'>
X      <FAngle `Regular'>
X      <FPostScriptName `Times-Roman'>
X      <FSize  12.0 pt>
X      <FUnderlining FNoUnderlining >
X      <FUnderline No >
X      <FDoubleUnderline No >
X      <FNumericUnderline No >
X      <FOverline No >
X      <FStrike No >
X      <FChangeBar No >
X      <FOutline No >
X      <FShadow No >
X      <FPairKern Yes >
X      <FCase FAsTyped >
X      <FPosition FNormal >
X      <FSupScript No >
X      <FSubScript No >
X      <FDX  0.0 pt>
X      <FDY  0.0 pt>
X      <FDW  0.0 pt>
X      <FSeparation 0>
X      <FColor `Black'>
X     > # end of PgfFont
X     <PgfHyphenate No >
X     <PgfCellAlignment Middle >
X     <PgfCellMargins  0.0 pt 2.0 pt 0.0 pt 2.0 pt>
X    > # end of Pgf
X   > # end of TblColumnF
X  > # end of TblColumn
X  <TblColumn 
X   <TblColumnNum 4>
X   <TblColumnWidth  1.0">
X   <TblColumnH 
X    <PgfTag `CellHeading'>
X   > # end of TblColumnH
X   <TblColumnBody 
X    <PgfTag `CellBody'>
X   > # end of TblColumnBody
X   <TblColumnF 
X    <Pgf 
X     <PgfTag `CellFooting'>
X     <PgfAlignment Center >
X     <PgfFont 
X      <FTag `'>
X      <FFamily `Times'>
X      <FVar `Regular'>
X      <FWeight `Regular'>
X      <FAngle `Regular'>
X      <FPostScriptName `Times-Roman'>
X      <FSize  12.0 pt>
X      <FUnderlining FNoUnderlining >
X      <FUnderline No >
X      <FDoubleUnderline No >
X      <FNumericUnderline No >
X      <FOverline No >
X      <FStrike No >
X      <FChangeBar No >
X      <FOutline No >
X      <FShadow No >
X      <FPairKern Yes >
X      <FCase FAsTyped >
X      <FPosition FNormal >
X      <FSupScript No >
X      <FSubScript No >
X      <FDX  0.0 pt>
X      <FDY  0.0 pt>
X      <FDW  0.0 pt>
X      <FSeparation 0>
X      <FColor `Black'>
X     > # end of PgfFont
X     <PgfHyphenate No >
X     <PgfCellAlignment Middle >
X     <PgfCellMargins  0.0 pt 2.0 pt 0.0 pt 2.0 pt>
X    > # end of Pgf
X   > # end of TblColumnF
X  > # end of TblColumn
X  <TblCellMargins  6.0 pt 6.0 pt 6.0 pt 4.0 pt>
X  <TblLIndent  0.0">
X  <TblRIndent  0.0">
X  <TblAlignment Left >
X  <TblPlacement Anywhere >
X  <TblSpBefore  12.0 pt>
X  <TblSpAfter  12.0 pt>
X  <TblBlockSize 1>
X  <TblHFFill 15>
X  <TblHFSeparation 0>
X  <TblHFColor `Black'>
X  <TblBodyFill 15>
X  <TblBodySeparation 0>
X  <TblBodyColor `Black'>
X  <TblShadeByColumn No >
X  <TblShadePeriod 2>
X  <TblXFill 15>
X  <TblXSeparation 0>
X  <TblXColor `Black'>
X  <TblAltShadePeriod 2>
X  <TblLRuling `Thin'>
X  <TblBRuling `Thin'>
X  <TblRRuling `Thin'>
X  <TblTRuling `Thin'>
X  <TblColumnRuling `Thin'>
X  <TblXColumnRuling `Thin'>
X  <TblBodyRowRuling `Thin'>
X  <TblXRowRuling `Thin'>
X  <TblHFRowRuling `Thin'>
X  <TblSeparatorRuling `Double'>
X  <TblXColumnNum 1>
X  <TblRulingPeriod 4>
X  <TblLastBRuling No >
X  <TblTitlePlacement InHeader >
X  <TblTitlePgf1 
X   <PgfTag `TableTitle'>
X  > # end of TblTitlePgf1
X  <TblTitleGap  6.0 pt>
X  <TblInitNumColumns 5>
X  <TblInitNumHRows 1>
X  <TblInitNumBodyRows 8>
X  <TblInitNumFRows 0>
X  <TblNumByColumn No >
X > # end of TblFormat
X <TblFormat 
X  <TblTag `Format B'>
X  <TblColumn 
X   <TblColumnNum 0>
X   <TblColumnWidth  1.0">
X   <TblColumnH 
X    <PgfTag `CellHeading'>
X   > # end of TblColumnH
X   <TblColumnBody 
X    <PgfTag `CellBody'>
X   > # end of TblColumnBody
X   <TblColumnF 
X    <Pgf 
X     <PgfTag `CellFooting'>
X     <PgfAlignment Center >
X     <PgfFont 
X      <FTag `'>
X      <FFamily `Times'>
X      <FVar `Regular'>
X      <FWeight `Regular'>
X      <FAngle `Regular'>
X      <FPostScriptName `Times-Roman'>
X      <FSize  12.0 pt>
X      <FUnderlining FNoUnderlining >
X      <FUnderline No >
X      <FDoubleUnderline No >
X      <FNumericUnderline No >
X      <FOverline No >
X      <FStrike No >
X      <FChangeBar No >
X      <FOutline No >
X      <FShadow No >
X      <FPairKern Yes >
X      <FCase FAsTyped >
X      <FPosition FNormal >
X      <FSupScript No >
X      <FSubScript No >
X      <FDX  0.0 pt>
X      <FDY  0.0 pt>
X      <FDW  0.0 pt>
X      <FSeparation 0>
X      <FColor `Black'>
X     > # end of PgfFont
X     <PgfHyphenate No >
X     <PgfCellAlignment Middle >
X     <PgfCellMargins  0.0 pt 2.0 pt 0.0 pt 2.0 pt>
X    > # end of Pgf
X   > # end of TblColumnF
X  > # end of TblColumn
X  <TblColumn 
X   <TblColumnNum 1>
X   <TblColumnWidth  1.0">
X   <TblColumnH 
X    <PgfTag `CellHeading'>
X   > # end of TblColumnH
X   <TblColumnBody 
X    <PgfTag `CellBody'>
X   > # end of TblColumnBody
X   <TblColumnF 
X    <Pgf 
X     <PgfTag `CellFooting'>
X     <PgfAlignment Center >
X     <PgfFont 
X      <FTag `'>
X      <FFamily `Times'>
X      <FVar `Regular'>
X      <FWeight `Regular'>
X      <FAngle `Regular'>
X      <FPostScriptName `Times-Roman'>
X      <FSize  12.0 pt>
X      <FUnderlining FNoUnderlining >
X      <FUnderline No >
X      <FDoubleUnderline No >
X      <FNumericUnderline No >
X      <FOverline No >
X      <FStrike No >
X      <FChangeBar No >
X      <FOutline No >
X      <FShadow No >
X      <FPairKern Yes >
X      <FCase FAsTyped >
X      <FPosition FNormal >
X      <FSupScript No >
X      <FSubScript No >
X      <FDX  0.0 pt>
X      <FDY  0.0 pt>
X      <FDW  0.0 pt>
X      <FSeparation 0>
X      <FColor `Black'>
X     > # end of PgfFont
X     <PgfHyphenate No >
X     <PgfCellAlignment Middle >
X     <PgfCellMargins  0.0 pt 2.0 pt 0.0 pt 2.0 pt>
X    > # end of Pgf
X   > # end of TblColumnF
X  > # end of TblColumn
X  <TblColumn 
X   <TblColumnNum 2>
X   <TblColumnWidth  1.0">
X   <TblColumnH 
X    <PgfTag `CellHeading'>
X   > # end of TblColumnH
X   <TblColumnBody 
X    <PgfTag `CellBody'>
X   > # end of TblColumnBody
X   <TblColumnF 
X    <Pgf 
X     <PgfTag `CellFooting'>
X     <PgfAlignment Center >
X     <PgfFont 
X      <FTag `'>
X      <FFamily `Times'>
X      <FVar `Regular'>
X      <FWeight `Regular'>
X      <FAngle `Regular'>
X      <FPostScriptName `Times-Roman'>
X      <FSize  12.0 pt>
X      <FUnderlining FNoUnderlining >
X      <FUnderline No >
X      <FDoubleUnderline No >
X      <FNumericUnderline No >
X      <FOverline No >
X      <FStrike No >
X      <FChangeBar No >
X      <FOutline No >
X      <FShadow No >
X      <FPairKern Yes >
X      <FCase FAsTyped >
X      <FPosition FNormal >
X      <FSupScript No >
X      <FSubScript No >
X      <FDX  0.0 pt>
X      <FDY  0.0 pt>
X      <FDW  0.0 pt>
X      <FSeparation 0>
X      <FColor `Black'>
X     > # end of PgfFont
X     <PgfHyphenate No >
X     <PgfCellAlignment Middle >
X     <PgfCellMargins  0.0 pt 2.0 pt 0.0 pt 2.0 pt>
X    > # end of Pgf
X   > # end of TblColumnF
X  > # end of TblColumn
X  <TblColumn 
X   <TblColumnNum 3>
X   <TblColumnWidth  1.0">
X   <TblColumnH 
X    <PgfTag `CellHeading'>
X   > # end of TblColumnH
X   <TblColumnBody 
X    <PgfTag `CellBody'>
X   > # end of TblColumnBody
X   <TblColumnF 
X    <Pgf 
X     <PgfTag `CellFooting'>
X     <PgfAlignment Center >
X     <PgfFont 
X      <FTag `'>
X      <FFamily `Times'>
X      <FVar `Regular'>
X      <FWeight `Regular'>
X      <FAngle `Regular'>
X      <FPostScriptName `Times-Roman'>
X      <FSize  12.0 pt>
X      <FUnderlining FNoUnderlining >
X      <FUnderline No >
X      <FDoubleUnderline No >
X      <FNumericUnderline No >
X      <FOverline No >
X      <FStrike No >
X      <FChangeBar No >
X      <FOutline No >
X      <FShadow No >
X      <FPairKern Yes >
X      <FCase FAsTyped >
X      <FPosition FNormal >
X      <FSupScript No >
X      <FSubScript No >
X      <FDX  0.0 pt>
X      <FDY  0.0 pt>
X      <FDW  0.0 pt>
X      <FSeparation 0>
X      <FColor `Black'>
X     > # end of PgfFont
X     <PgfHyphenate No >
X     <PgfCellAlignment Middle >
X     <PgfCellMargins  0.0 pt 2.0 pt 0.0 pt 2.0 pt>
X    > # end of Pgf
X   > # end of TblColumnF
X  > # end of TblColumn
X  <TblColumn 
X   <TblColumnNum 4>
X   <TblColumnWidth  1.0">
X   <TblColumnH 
X    <PgfTag `CellHeading'>
X   > # end of TblColumnH
X   <TblColumnBody 
X    <PgfTag `CellBody'>
X   > # end of TblColumnBody
X   <TblColumnF 
X    <Pgf 
X     <PgfTag `CellFooting'>
X     <PgfAlignment Center >
X     <PgfFont 
X      <FTag `'>
X      <FFamily `Times'>
X      <FVar `Regular'>
X      <FWeight `Regular'>
X      <FAngle `Regular'>
X      <FPostScriptName `Times-Roman'>
X      <FSize  12.0 pt>
X      <FUnderlining FNoUnderlining >
X      <FUnderline No >
X      <FDoubleUnderline No >
X      <FNumericUnderline No >
X      <FOverline No >
X      <FStrike No >
X      <FChangeBar No >
X      <FOutline No >
X      <FShadow No >
X      <FPairKern Yes >
X      <FCase FAsTyped >
X      <FPosition FNormal >
X      <FSupScript No >
X      <FSubScript No >
X      <FDX  0.0 pt>
X      <FDY  0.0 pt>
X      <FDW  0.0 pt>
X      <FSeparation 0>
X      <FColor `Black'>
X     > # end of PgfFont
X     <PgfHyphenate No >
X     <PgfCellAlignment Middle >
X     <PgfCellMargins  0.0 pt 2.0 pt 0.0 pt 2.0 pt>
X    > # end of Pgf
X   > # end of TblColumnF
X  > # end of TblColumn
X  <TblCellMargins  6.0 pt 6.0 pt 6.0 pt 4.0 pt>
X  <TblLIndent  0.0">
X  <TblRIndent  0.0">
X  <TblAlignment Center >
X  <TblPlacement Anywhere >
X  <TblSpBefore  12.0 pt>
X  <TblSpAfter  12.0 pt>
X  <TblBlockSize 1>
X  <TblHFFill 15>
X  <TblHFSeparation 0>
X  <TblHFColor `Black'>
X  <TblBodyFill 15>
X  <TblBodySeparation 0>
X  <TblBodyColor `Black'>
X  <TblShadeByColumn No >
X  <TblShadePeriod 2>
X  <TblXFill 15>
X  <TblXSeparation 0>
X  <TblXColor `Black'>
X  <TblAltShadePeriod 2>
X  <TblLRuling `'>
X  <TblBRuling `Thin'>
X  <TblRRuling `'>
X  <TblTRuling `Medium'>
X  <TblColumnRuling `Thin'>
X  <TblXColumnRuling `Thin'>
X  <TblBodyRowRuling `Thin'>
X  <TblXRowRuling `Thin'>
X  <TblHFRowRuling `Thin'>
X  <TblSeparatorRuling `Medium'>
X  <TblXColumnNum 1>
X  <TblRulingPeriod 4>
X  <TblLastBRuling No >
X  <TblTitlePlacement InHeader >
X  <TblTitlePgf1 
X   <PgfTag `TableTitle'>
X  > # end of TblTitlePgf1
X  <TblTitleGap  6.0 pt>
X  <TblInitNumColumns 5>
X  <TblInitNumHRows 1>
X  <TblInitNumBodyRows 8>
X  <TblInitNumFRows 0>
X  <TblNumByColumn No >
X > # end of TblFormat
X> # end of TblCatalog
X<Views 
X <View 
X  <ViewNumber 1>
X  <ViewCutout `White'>
X > # end of View
X <View 
X  <ViewNumber 2>
X  <ViewCutout `White'>
X  <ViewInvisible `Red'>
X  <ViewInvisible `Green'>
X  <ViewInvisible `Blue'>
X  <ViewInvisible `Cyan'>
X  <ViewInvisible `Magenta'>
X > # end of View
X <View 
X  <ViewNumber 3>
X  <ViewInvisible `Black'>
X  <ViewCutout `White'>
X > # end of View
X <View 
X  <ViewNumber 4>
X  <ViewCutout `White'>
X > # end of View
X <View 
X  <ViewNumber 5>
X  <ViewCutout `White'>
X > # end of View
X <View 
X  <ViewNumber 6>
X  <ViewCutout `White'>
X > # end of View
X> # end of Views
X<VariableFormats 
X <VariableFormat 
X  <VariableName `Page Count'>
X  <VariableDef `<$lastpagenum\>'>
X > # end of VariableFormat
X <VariableFormat 
X  <VariableName `Current Date (Long)'>
X  <VariableDef `<$monthname\> <$daynum\>, <$year\>'>
X > # end of VariableFormat
X <VariableFormat 
X  <VariableName `Current Date (Short)'>
X  <VariableDef `<$monthnum\>/<$daynum\>/<$shortyear\>'>
X > # end of VariableFormat
X <VariableFormat 
X  <VariableName `Modification Date (Long)'>
X  <VariableDef `<$monthname\> <$daynum\>, <$year\> <$hour\>:<$minute00\> <$ampm\>'>
X > # end of VariableFormat
X <VariableFormat 
X  <VariableName `Modification Date (Short)'>
X  <VariableDef `<$monthnum\>/<$daynum\>/<$shortyear\>'>
X > # end of VariableFormat
X <VariableFormat 
X  <VariableName `Creation Date (Long)'>
X  <VariableDef `<$monthname\> <$daynum\>, <$year\>'>
X > # end of VariableFormat
X <VariableFormat 
X  <VariableName `Creation Date (Short)'>
X  <VariableDef `<$monthnum\>/<$daynum\>/<$shortyear\>'>
X > # end of VariableFormat
X <VariableFormat 
X  <VariableName `Filename (Long)'>
X  <VariableDef `<$fullfilename\>'>
X > # end of VariableFormat
X <VariableFormat 
X  <VariableName `Filename (Short)'>
X  <VariableDef `<$filename\>'>
X > # end of VariableFormat
X <VariableFormat 
X  <VariableName `Running H/F 1'>
X  <VariableDef `<$paratext[Title]\>'>
X > # end of VariableFormat
X <VariableFormat 
X  <VariableName `Running H/F 2'>
X  <VariableDef `<$paratext[Heading1]\>'>
X > # end of VariableFormat
X <VariableFormat 
X  <VariableName `Current Page #'>
X  <VariableDef `<$curpagenum\>'>
X > # end of VariableFormat
X <VariableFormat 
X  <VariableName `Running H/F 3'>
X  <VariableDef `<$marker1\>'>
X > # end of VariableFormat
X <VariableFormat 
X  <VariableName `Running H/F 4'>
X  <VariableDef `<$marker2\>'>
X > # end of VariableFormat
X <VariableFormat 
X  <VariableName `Table Continuation'>
X  <VariableDef ` (Continued)'>
X > # end of VariableFormat
X <VariableFormat 
X  <VariableName `Table Sheet'>
X  <VariableDef ` (Sheet <$tblsheetnum\> of <$tblsheetcount\>)'>
X > # end of VariableFormat
X> # end of VariableFormats
X<XRefFormats 
X <XRefFormat 
X  <XRefName `Heading & Page'>
X  <XRefDef `\xd2 <$paratext\>\xd3  on page\x11 <$pagenum\>'>
X > # end of XRefFormat
X <XRefFormat 
X  <XRefName `Page'>
X  <XRefDef `page\x11 <$pagenum\>'>
X > # end of XRefFormat
X <XRefFormat 
X  <XRefName `See Heading & Page'>
X  <XRefDef `See \xd2 <$paratext\>\xd3  on page\x11 <$pagenum\>.'>
X > # end of XRefFormat
X <XRefFormat 
X  <XRefName `Table All'>
X  <XRefDef `Table\x11 <$paranumonly\>, \xd2 <$paratext\>,\xd3  on page\x11 <$pagenum\>'>
X > # end of XRefFormat
X <XRefFormat 
X  <XRefName `Table Number & Page'>
X  <XRefDef `Table\x11 <$paranumonly\> on page\x11 <$pagenum\>'>
X > # end of XRefFormat
X <XRefFormat 
X  <XRefName `chunkref'>
X  <XRefDef `<Emphasis\>\\<<$paratext\>\\\> , (<$paranum\>, p. <$pagenum\>)'>
X > # end of XRefFormat
X <XRefFormat 
X  <XRefName `Ref'>
X  <XRefDef `[<$paranumonly\>]'>
X > # end of XRefFormat
X> # end of XRefFormats
X<Document 
X <DViewRect 52 27 671 777 >
X <DWindowRect 28 1 715 855 >
X <DViewScale  100.0%>
X <DNextUnique 432950>
X <DPageSize  8.5" 11.0">
X <DStartPage 1>
X <DPageNumStyle Arabic >
X <DPagePointStyle Arabic >
X <DTwoSides No >
X <DParity FirstRight >
X <DFrozenPages No >
X <DPageRounding DeleteEmptyPages >
X <DMaxInterLine  2.0 pt>
X <DMaxInterPgf  6.0 pt>
X <DFNoteMaxH  4.0">
X <FNoteStartNum 1>
X <DFNoteRestart PerPage >
X <DFNoteTag `Footnote'>
X <DFNoteLabels `*\xa0 \xe0 '>
X <DFNoteNumStyle Arabic >
X <DFNoteAnchorPos FNSuperscript >
X <DFNoteNumberPos FNBaseline >
X <DFNoteAnchorPrefix `'>
X <DFNoteAnchorSuffix `'>
X <DFNoteNumberPrefix `'>
X <DFNoteNumberSuffix `.\\t'>
X <DTblFNoteTag `TableFootnote'>
X <DTblFNoteLabels `*\xa0 \xe0 '>
X <DTblFNoteNumStyle LCAlpha >
X <DTblFNoteAnchorPos FNSuperscript >
X <DTblFNoteNumberPos FNBaseline >
X <DTblFNoteAnchorPrefix `'>
X <DTblFNoteAnchorSuffix `'>
X <DTblFNoteNumberPrefix `'>
X <DTblFNoteNumberSuffix `.\\t'>
X <DLinebreakChars `/ - \xd0  \xd1 '>
X <DPunctuationChars `:;,.\xc9 !?'>
X <DChBarGap  0.25">
X <DChBarWidth  2.0 pt>
X <DChBarPosition LeftOfCol >
X <DChBarColor `Black'>
X <DAutoChBars No >
X <DShowAllConditions No >
X <DDisplayOverrides No >
X <DViewOnly No >
X <DViewOnlyXRef GotoBehavior >
X <DViewOnlySelect Yes >
X <DViewOnlyWinBorders Yes >
X <DViewOnlyWinMenubar Yes >
X <DViewOnlyWinPopup Yes >
X <DViewOnlyWinPalette No >
X <DGridOn No >
X <DPageGrid  0.5">
X <DSnapGrid  0.125">
X <DSnapRotation  0.25>
X <DRulersOn Yes >
X <DFullRulers No >
X <DGraphicsOff No >
X <DCurrentView 1>
X <DBordersOn No >
X <DSymbolsOn No >
X <DElementBordersOn No >
X <DSmartQuotesOn No >
X <DSmartSpacesOn No >
X <DLanguage USEnglish >
X <DSuperscriptSize  80.0%>
X <DSubscriptSize  80.0%>
X <DSmallCapsSize  80.0%>
X <DSuperscriptShift  40.0%>
X <DSubscriptShift  25.0%>
X <DMathAlphaCharFontFamily `Times'>
X <DMathSmallIntegral  14.0 pt>
X <DMathMediumIntegral  18.0 pt>
X <DMathLargeIntegral  24.0 pt>
X <DMathSmallSigma  14.0 pt>
X <DMathMediumSigma  18.0 pt>
X <DMathLargeSigma  24.0 pt>
X <DMathSmallLevel1  9.0 pt>
X <DMathMediumLevel1  12.0 pt>
X <DMathLargeLevel1  14.0 pt>
X <DMathSmallLevel2  7.0 pt>
X <DMathMediumLevel2  9.0 pt>
X <DMathLargeLevel2  12.0 pt>
X <DMathSmallLevel3  5.0 pt>
X <DMathMediumLevel3  6.0 pt>
X <DMathLargeLevel3  8.0 pt>
X <DMathSmallHoriz  0.0 pt>
X <DMathMediumHoriz  0.0 pt>
X <DMathLargeHoriz  0.0 pt>
X <DMathSmallVert  0.0 pt>
X <DMathMediumVert  0.0 pt>
X <DMathLargeVert  0.0 pt>
X <DMathShowCustom No >
X <DMathFunctions `'>
X <DMathNumbers `'>
X <DMathVariables `EquationVariables'>
X <DMathStrings `'>
X <DMathGreek `'>
X  <DMathCatalog >
X <DElementCatalogScope Strict >
X <DPrintSkipBlankPages Yes >
X <DPrintSeparations No >
X> # end of Document
X<BookComponent 
X <FileName `<c\>litTOC.doc'>
X <FileNameSuffix `TOC'>
X <DeriveLinks No >
X <DeriveType TOC >
X <DeriveTag `chunk'>
X <DeriveTag `refersTo'>
X> # end of BookComponent
X<InitialAutoNums 
X> # end of InitialAutoNums
X<Dictionary 
X<OKWord `ChunkMode'>
X<OKWord `CodeMode'>
X<OKWord `FileMode'>
X<OKWord `Knuth'>
X<OKWord `MText'>
X<OKWord `ParaMode'>
X<OKWord `TeX'>
X<OKWord `WYSIWIGness'>
X<OKWord `WasteMode'>
X<OKWord `WinWordWEB'>
X<OKWord `XrefSrcText'>
X<OKWord `bythe'>
X<OKWord `chunkHeadings'>
X<OKWord `chunkReferred'>
X<OKWord `chunkref'>
X<OKWord `chunksByName'>
X<OKWord `currChunkHeading'>
X<OKWord `currMarkerText'>
X<OKWord `currModeProc'>
X<OKWord `diff'>
X<OKWord `fmweb'>
X<OKWord `initializations'>
X<OKWord `lookFor'>
X<OKWord `lookahead'>
X<OKWord `markerReferred'>
X<OKWord `markerToHeading'>
X<OKWord `meta'>
X<OKWord `mif'>
X<OKWord `newline'>
X<OKWord `noweb'>
X<OKWord `stderr'>
X<OKWord `stdout'>
X<OKWord `wc'>
X> # end of Dictionary
X<AFrames 
X <Frame 
X  <ID 1>
X  <Unique 432614>
X  <Pen 15>
X  <Fill 15>
X  <PenWidth  1.0 pt>
X  <Separation 0>
X  <ObColor `Black'>
X  <DashedPattern 
X   <DashedStyle Solid >
X  > # end of DashedPattern
X  <Angle  360.0>
X  <Overprint No >
X  <ShapeRect  1.51562" 1.44444" 5.46875" 2.80556">
X  <BRect  1.51562" 1.44444" 5.46875" 2.80556">
X  <FrameType Below >
X  <Float No >
X  <NSOffset  0.0">
X  <BLOffset  -2.48611">
X  <AnchorAlign Center >
X  <Cropped Yes >
X  <Ellipse 
X   <Unique 432615>
X   <GroupID 2>
X   <Pen 0>
X   <Fill 7>
X   <PenWidth  0.5 pt>
X   <Overprint No >
X   <ShapeRect  2.93653" 1.99538" 0.61111" 0.52778">
X   <BRect  2.93653" 1.99538" 0.61111" 0.52778">
X  > # end of Ellipse
X  <Rectangle 
X   <Unique 432616>
X   <GroupID 2>
X   <Pen 7>
X   <Overprint No >
X   <ShapeRect  2.45042" 2.12038" 0.68056" 0.30556">
X   <BRect  2.45042" 2.12038" 0.68056" 0.30556">
X  > # end of Rectangle
X  <PolyLine 
X   <Unique 432617>
X   <GroupID 2>
X   <Pen 0>
X   <HeadCap Square >
X   <HeadCap ArrowHead >
X   <TailCap Square >
X   <ArrowStyle 
X    <TipAngle 16>
X    <BaseAngle 90>
X    <Length  12.0 pt>
X    <HeadType Filled >
X    <ScaleHead Yes >
X    <ScaleFactor  0.25 pt>
X   > # end of ArrowStyle
X   <Overprint No >
X   <NumPoints 2>
X   <Point  3.07546" 2.4738">
X   <Point  3.01373" 2.41978">
X  > # end of PolyLine
X  <Group 
X   <ID 2>
X   <Unique 432618>
X   <Overprint No >
X  > # end of Group
X  <Ellipse 
X   <Unique 432619>
X   <GroupID 3>
X   <Overprint No >
X   <ShapeRect  2.93653" 1.17748" 0.61111" 0.52778">
X   <BRect  2.93653" 1.17748" 0.61111" 0.52778">
X  > # end of Ellipse
X  <Rectangle 
X   <Unique 432620>
X   <GroupID 3>
X   <Pen 7>
X   <Overprint No >
X   <ShapeRect  2.45042" 1.30248" 0.68056" 0.30556">
X   <BRect  2.45042" 1.30248" 0.68056" 0.30556">
X  > # end of Rectangle
X  <PolyLine 
X   <Unique 432621>
X   <GroupID 3>
X   <Pen 0>
X   <Overprint No >
X   <NumPoints 2>
X   <Point  3.07546" 1.65589">
X   <Point  3.01373" 1.60188">
X  > # end of PolyLine
X  <Group 
X   <ID 3>
X   <Unique 432622>
X   <Overprint No >
X  > # end of Group
X  <Ellipse 
X   <Unique 432623>
X   <GroupID 4>
X   <Overprint No >
X   <ShapeRect  2.93653" 0.33642" 0.61111" 0.52778">
X   <BRect  2.93653" 0.33642" 0.61111" 0.52778">
X  > # end of Ellipse
X  <Rectangle 
X   <Unique 432624>
X   <GroupID 4>
X   <Pen 7>
X   <Overprint No >
X   <ShapeRect  2.45042" 0.46142" 0.68056" 0.30556">
X   <BRect  2.45042" 0.46142" 0.68056" 0.30556">
X  > # end of Rectangle
X  <PolyLine 
X   <Unique 432625>
X   <GroupID 4>
X   <Pen 0>
X   <Overprint No >
X   <NumPoints 2>
X   <Point  3.07546" 0.81484">
X   <Point  3.01373" 0.76082">
X  > # end of PolyLine
X  <Group 
X   <ID 4>
X   <Unique 432626>
X   <Overprint No >
X  > # end of Group
X  <TextLine 
X   <Unique 432627>
X   <Overprint No >
X   <TLOrigin  0.30358" 1.47986">
X   <TLAlignment Left >
X   <TLLanguage USEnglish >
X   <Font 
X    <FTag `'>
X    <FFamily `Helvetica'>
X    <FVar `Regular'>
X    <FWeight `Regular'>
X    <FAngle `Regular'>
X    <FPostScriptName `Helvetica'>
X    <FSize  10.0 pt>
X    <FUnderlining FNoUnderlining >
X    <FUnderline No >
X    <FDoubleUnderline No >
X    <FNumericUnderline No >
X    <FOverline No >
X    <FStrike No >
X    <FChangeBar No >
X    <FOutline No >
X    <FShadow No >
X    <FPairKern Yes >
X    <FCase FAsTyped >
X    <FPosition FNormal >
X    <FSupScript No >
X    <FSubScript No >
X    <FDX  0.0 pt>
X    <FDY  0.0 pt>
X    <FDW  0.0 pt>
X    <FSeparation 0>
X    <FColor `Black'>
X   > # end of Font
X   <String `Waste'>
X  > # end of TextLine
X  <TextLine 
X   <Unique 432628>
X   <Overprint No >
X   <TLOrigin  1.38096" 1.47986">
X   <TLAlignment Left >
X   <TLLanguage USEnglish >
X   <String `Para'>
X  > # end of TextLine
X  <TextLine 
X   <Unique 432629>
X   <Overprint No >
X   <TLOrigin  2.84861" 0.66403">
X   <TLAlignment Left >
X   <TLLanguage USEnglish >
X   <String `File'>
X  > # end of TextLine
X  <TextLine 
X   <Unique 432630>
X   <Overprint No >
X   <TLOrigin  2.84861" 1.47986">
X   <TLAlignment Left >
X   <TLLanguage USEnglish >
X   <String `Code'>
X  > # end of TextLine
X  <TextLine 
X   <Unique 432631>
X   <Overprint No >
X   <TLOrigin  2.84861" 2.29569">
X   <TLAlignment Left >
X   <TLLanguage USEnglish >
X   <String `Chunk'>
X  > # end of TextLine
X  <PolyLine 
X   <Unique 432632>
X   <Overprint No >
X   <NumPoints 2>
X   <Point  0.75" 1.44444">
X   <Point  1.25" 1.44444">
X  > # end of PolyLine
X  <TextLine 
X   <Unique 432633>
X   <Overprint No >
X   <TLOrigin  0.84722" 1.375">
X   <TLAlignment Left >
X   <TLLanguage USEnglish >
X   <Font 
X    <FTag `'>
X    <FFamily `AvantGarde'>
X    <FWeight `Book'>
X    <FPostScriptName `AvantGarde-Book'>
X    <FSize  7.0 pt>
X   > # end of Font
X   <String `Para'>
X  > # end of TextLine
X  <PolyLine 
X   <Unique 432634>
X   <Overprint No >
X   <NumPoints 2>
X   <Point  1.625" 1.31944">
X   <Point  2.75" 0.69444">
X  > # end of PolyLine
X  <PolyLine 
X   <Unique 432635>
X   <HeadCap Square >
X   <TailCap Square >
X   <TailCap ArrowHead >
X   <Overprint No >
X   <NumPoints 2>
X   <Point  0.75" 1.56944">
X   <Point  1.25" 1.56944">
X  > # end of PolyLine
X  <TextLine 
X   <Unique 432636>
X   <Overprint No >
X   <TLOrigin  0.61111" 1.70356">
X   <TLAlignment Left >
X   <TLLanguage USEnglish >
X   <String `All other pgf tags'>
X  > # end of TextLine
X  <TextLine 
X   <Unique 432637>
X   <Overprint No >
X   <TLOrigin  1.62713" 1.01629">
X   <TLAlignment Left >
X   <TLLanguage USEnglish >
X   <String `PgfTag File'>
X  > # end of TextLine
X  <TextLine 
X   <Unique 432638>
X   <Overprint No >
X   <TLOrigin  2.00213" 1.55796">
X   <TLAlignment Left >
X   <TLLanguage USEnglish >
X   <String `PgfTag code'>
X  > # end of TextLine
X  <PolyLine 
X   <Unique 432639>
X   <HeadCap Square >
X   <HeadCap ArrowHead >
X   <TailCap Square >
X   <Overprint No >
X   <NumPoints 2>
X   <Point  1.75" 1.44444">
X   <Point  2.75" 1.44444">
X  > # end of PolyLine
X  <PolyLine 
X   <Unique 432640>
X   <Overprint No >
X   <NumPoints 2>
X   <Point  1.625" 1.61111">
X   <Point  2.75" 2.23611">
X  > # end of PolyLine
X  <TextLine 
X   <Unique 432641>
X   <Overprint No >
X   <TLOrigin  1.62713" 2.05078">
X   <TLAlignment Left >
X   <TLLanguage USEnglish >
X   <String `PgfTag chunk'>
X  > # end of TextLine
X  <TextLine 
X   <Unique 432642>
X   <Overprint No >
X   <TLOrigin  3.12713" 0.26629">
X   <TLAlignment Left >
X   <TLLanguage USEnglish >
X   <String `String'>
X  > # end of TextLine
X  <TextLine 
X   <Unique 432643>
X   <Overprint No >
X   <TLOrigin  2.66879" 1.1274">
X   <TLAlignment Left >
X   <TLLanguage USEnglish >
X   <String `Char Tab, String, XrefSrcText'>
X  > # end of TextLine
X  <TextLine 
X   <Unique 432644>
X   <Overprint No >
X   <TLOrigin  2.91879" 1.96074">
X   <TLAlignment Left >
X   <TLLanguage USEnglish >
X   <String `MText , String'>
X  > # end of TextLine
X  <PolyLine 
X   <Unique 432645>
X   <Overprint No >
X   <NumPoints 2>
X   <Point  3.27604" 2.23611">
X   <Point  4.60937" 1.56944">
X  > # end of PolyLine
X  <PolyLine 
X   <Unique 432646>
X   <Overprint No >
X   <NumPoints 2>
X   <Point  3.15104" 0.61111">
X   <Point  4.59549" 1.29167">
X  > # end of PolyLine
X  <PolyLine 
X   <Unique 432647>
X   <Overprint No >
X   <NumPoints 2>
X   <Point  3.23437" 1.45833">
X   <Point  4.56771" 1.45833">
X  > # end of PolyLine
X  <TextLine 
X   <Unique 432648>
X   <Overprint No >
X   <TLOrigin  3.83546" 1.40518">
X   <TLAlignment Left >
X   <TLLanguage USEnglish >
X   <String `End of para'>
X  > # end of TextLine
X  <TextLine 
X   <Unique 432649>
X   <Overprint No >
X   <TLOrigin  4.64526" 1.47986">
X   <TLAlignment Left >
X   <TLLanguage USEnglish >
X   <Font 
X    <FTag `'>
X    <FFamily `Helvetica'>
X    <FWeight `Regular'>
X    <FPostScriptName `Helvetica'>
X    <FSize  10.0 pt>
X   > # end of Font
X   <String `Waste'>
X  > # end of TextLine
X > # end of Frame
X> # end of AFrames
X<Tbls 
X <Tbl 
X <TblID 5>
X <TblTag `Format A'>
X <TblFormat 
X  <TblColumn 
X   <TblColumnNum 0>
X   <TblColumnWidth  1.0">
X   <TblColumnH 
X    <PgfTag `CellHeading'>
X    <Pgf 
X     <PgfFont 
X      <FTag `'>
X      <FFamily `Times'>
X      <FVar `Regular'>
X      <FWeight `Regular'>
X      <FAngle `Regular'>
X      <FPostScriptName `Times-Roman'>
X      <FSize  12.0 pt>
X      <FUnderlining FNoUnderlining >
X      <FUnderline No >
X      <FDoubleUnderline No >
X      <FNumericUnderline No >
X      <FOverline No >
X      <FStrike No >
X      <FChangeBar No >
X      <FOutline No >
X      <FShadow No >
X      <FPairKern Yes >
X      <FCase FAsTyped >
X      <FPosition FNormal >
X      <FSupScript No >
X      <FSubScript No >
X      <FDX  0.0 pt>
X      <FDY  0.0 pt>
X      <FDW  0.0 pt>
X      <FSeparation 0>
X      <FColor `Black'>
X     > # end of PgfFont
X    > # end of Pgf
X   > # end of TblColumnH
X   <TblColumnBody 
X    <PgfTag `CellBody'>
X    <Pgf 
X     <PgfFont 
X      <FTag `'>
X      <FFamily `Times'>
X      <FVar `Regular'>
X      <FWeight `Regular'>
X      <FAngle `Regular'>
X      <FPostScriptName `Times-Roman'>
X      <FSize  12.0 pt>
X      <FUnderlining FNoUnderlining >
X      <FUnderline No >
X      <FDoubleUnderline No >
X      <FNumericUnderline No >
X      <FOverline No >
X      <FStrike No >
X      <FChangeBar No >
X      <FOutline No >
X      <FShadow No >
X      <FPairKern Yes >
X      <FCase FAsTyped >
X      <FPosition FNormal >
X      <FSupScript No >
X      <FSubScript No >
X      <FDX  0.0 pt>
X      <FDY  0.0 pt>
X      <FDW  0.0 pt>
X      <FSeparation 0>
X      <FColor `Black'>
X     > # end of PgfFont
X    > # end of Pgf
X   > # end of TblColumnBody
X   <TblColumnF 
X    <Pgf 
X     <PgfTag `CellFooting'>
X     <PgfAlignment Center >
X     <PgfHyphenate No >
X     <PgfCellAlignment Middle >
X     <PgfCellMargins  0.0 pt 2.0 pt 0.0 pt 2.0 pt>
X    > # end of Pgf
X   > # end of TblColumnF
X  > # end of TblColumn
X  <TblColumn 
X   <TblColumnNum 1>
X   <TblColumnWidth  1.0">
X   <TblColumnH 
X    <PgfTag `CellHeading'>
X    <Pgf 
X     <PgfFont 
X      <FTag `'>
X      <FFamily `Times'>
X      <FVar `Regular'>
X      <FWeight `Regular'>
X      <FAngle `Regular'>
X      <FPostScriptName `Times-Roman'>
X      <FSize  12.0 pt>
X      <FUnderlining FNoUnderlining >
X      <FUnderline No >
X      <FDoubleUnderline No >
X      <FNumericUnderline No >
X      <FOverline No >
X      <FStrike No >
X      <FChangeBar No >
X      <FOutline No >
X      <FShadow No >
X      <FPairKern Yes >
X      <FCase FAsTyped >
X      <FPosition FNormal >
X      <FSupScript No >
X      <FSubScript No >
X      <FDX  0.0 pt>
X      <FDY  0.0 pt>
X      <FDW  0.0 pt>
X      <FSeparation 0>
X      <FColor `Black'>
X     > # end of PgfFont
X    > # end of Pgf
X   > # end of TblColumnH
X   <TblColumnBody 
X    <PgfTag `CellBody'>
X    <Pgf 
X     <PgfFont 
X      <FTag `'>
X      <FFamily `Times'>
X      <FVar `Regular'>
X      <FWeight `Regular'>
X      <FAngle `Regular'>
X      <FPostScriptName `Times-Roman'>
X      <FSize  12.0 pt>
X      <FUnderlining FNoUnderlining >
X      <FUnderline No >
X      <FDoubleUnderline No >
X      <FNumericUnderline No >
X      <FOverline No >
X      <FStrike No >
X      <FChangeBar No >
X      <FOutline No >
X      <FShadow No >
X      <FPairKern Yes >
X      <FCase FAsTyped >
X      <FPosition FNormal >
X      <FSupScript No >
X      <FSubScript No >
X      <FDX  0.0 pt>
X      <FDY  0.0 pt>
X      <FDW  0.0 pt>
X      <FSeparation 0>
X      <FColor `Black'>
X     > # end of PgfFont
X    > # end of Pgf
X   > # end of TblColumnBody
X   <TblColumnF 
X    <Pgf 
X     <PgfTag `CellFooting'>
X     <PgfAlignment Center >
X     <PgfHyphenate No >
X     <PgfCellAlignment Middle >
X     <PgfCellMargins  0.0 pt 2.0 pt 0.0 pt 2.0 pt>
X    > # end of Pgf
X   > # end of TblColumnF
X  > # end of TblColumn
X  <TblColumn 
X   <TblColumnNum 2>
X   <TblColumnWidth  1.0">
X   <TblColumnH 
X    <PgfTag `CellHeading'>
X    <Pgf 
X     <PgfFont 
X      <FTag `'>
X      <FFamily `Times'>
X      <FVar `Regular'>
X      <FWeight `Regular'>
X      <FAngle `Regular'>
X      <FPostScriptName `Times-Roman'>
X      <FSize  12.0 pt>
X      <FUnderlining FNoUnderlining >
X      <FUnderline No >
X      <FDoubleUnderline No >
X      <FNumericUnderline No >
X      <FOverline No >
X      <FStrike No >
X      <FChangeBar No >
X      <FOutline No >
X      <FShadow No >
X      <FPairKern Yes >
X      <FCase FAsTyped >
X      <FPosition FNormal >
X      <FSupScript No >
X      <FSubScript No >
X      <FDX  0.0 pt>
X      <FDY  0.0 pt>
X      <FDW  0.0 pt>
X      <FSeparation 0>
X      <FColor `Black'>
X     > # end of PgfFont
X    > # end of Pgf
X   > # end of TblColumnH
X   <TblColumnBody 
X    <PgfTag `CellBody'>
X    <Pgf 
X     <PgfFont 
X      <FTag `'>
X      <FFamily `Times'>
X      <FVar `Regular'>
X      <FWeight `Regular'>
X      <FAngle `Regular'>
X      <FPostScriptName `Times-Roman'>
X      <FSize  12.0 pt>
X      <FUnderlining FNoUnderlining >
X      <FUnderline No >
X      <FDoubleUnderline No >
X      <FNumericUnderline No >
X      <FOverline No >
X      <FStrike No >
X      <FChangeBar No >
X      <FOutline No >
X      <FShadow No >
X      <FPairKern Yes >
X      <FCase FAsTyped >
X      <FPosition FNormal >
X      <FSupScript No >
X      <FSubScript No >
X      <FDX  0.0 pt>
X      <FDY  0.0 pt>
X      <FDW  0.0 pt>
X      <FSeparation 0>
X      <FColor `Black'>
X     > # end of PgfFont
X    > # end of Pgf
X   > # end of TblColumnBody
X   <TblColumnF 
X    <Pgf 
X     <PgfTag `CellFooting'>
X     <PgfAlignment Center >
X     <PgfHyphenate No >
X     <PgfCellAlignment Middle >
X     <PgfCellMargins  0.0 pt 2.0 pt 0.0 pt 2.0 pt>
X    > # end of Pgf
X   > # end of TblColumnF
X  > # end of TblColumn
X  <TblColumn 
X   <TblColumnNum 3>
X   <TblColumnWidth  1.0">
X   <TblColumnH 
X    <PgfTag `CellHeading'>
X    <Pgf 
X     <PgfFont 
X      <FTag `'>
X      <FFamily `Times'>
X      <FVar `Regular'>
X      <FWeight `Regular'>
X      <FAngle `Regular'>
X      <FPostScriptName `Times-Roman'>
X      <FSize  12.0 pt>
X      <FUnderlining FNoUnderlining >
X      <FUnderline No >
X      <FDoubleUnderline No >
X      <FNumericUnderline No >
X      <FOverline No >
X      <FStrike No >
X      <FChangeBar No >
X      <FOutline No >
X      <FShadow No >
X      <FPairKern Yes >
X      <FCase FAsTyped >
X      <FPosition FNormal >
X      <FSupScript No >
X      <FSubScript No >
X      <FDX  0.0 pt>
X      <FDY  0.0 pt>
X      <FDW  0.0 pt>
X      <FSeparation 0>
X      <FColor `Black'>
X     > # end of PgfFont
X    > # end of Pgf
X   > # end of TblColumnH
X   <TblColumnBody 
X    <PgfTag `CellBody'>
X    <Pgf 
X     <PgfFont 
X      <FTag `'>
X      <FFamily `Times'>
X      <FVar `Regular'>
X      <FWeight `Regular'>
X      <FAngle `Regular'>
X      <FPostScriptName `Times-Roman'>
X      <FSize  12.0 pt>
X      <FUnderlining FNoUnderlining >
X      <FUnderline No >
X      <FDoubleUnderline No >
X      <FNumericUnderline No >
X      <FOverline No >
X      <FStrike No >
X      <FChangeBar No >
X      <FOutline No >
X      <FShadow No >
X      <FPairKern Yes >
X      <FCase FAsTyped >
X      <FPosition FNormal >
X      <FSupScript No >
X      <FSubScript No >
X      <FDX  0.0 pt>
X      <FDY  0.0 pt>
X      <FDW  0.0 pt>
X      <FSeparation 0>
X      <FColor `Black'>
X     > # end of PgfFont
X    > # end of Pgf
X   > # end of TblColumnBody
X   <TblColumnF 
X    <Pgf 
X     <PgfTag `CellFooting'>
X     <PgfAlignment Center >
X     <PgfHyphenate No >
X     <PgfCellAlignment Middle >
X     <PgfCellMargins  0.0 pt 2.0 pt 0.0 pt 2.0 pt>
X    > # end of Pgf
X   > # end of TblColumnF
X  > # end of TblColumn
X  <TblColumn 
X   <TblColumnNum 4>
X   <TblColumnWidth  1.0">
X   <TblColumnH 
X    <PgfTag `CellHeading'>
X    <Pgf 
X     <PgfFont 
X      <FTag `'>
X      <FFamily `Times'>
X      <FVar `Regular'>
X      <FWeight `Regular'>
X      <FAngle `Regular'>
X      <FPostScriptName `Times-Roman'>
X      <FSize  12.0 pt>
X      <FUnderlining FNoUnderlining >
X      <FUnderline No >
X      <FDoubleUnderline No >
X      <FNumericUnderline No >
X      <FOverline No >
X      <FStrike No >
X      <FChangeBar No >
X      <FOutline No >
X      <FShadow No >
X      <FPairKern Yes >
X      <FCase FAsTyped >
X      <FPosition FNormal >
X      <FSupScript No >
X      <FSubScript No >
X      <FDX  0.0 pt>
X      <FDY  0.0 pt>
X      <FDW  0.0 pt>
X      <FSeparation 0>
X      <FColor `Black'>
X     > # end of PgfFont
X    > # end of Pgf
X   > # end of TblColumnH
X   <TblColumnBody 
X    <PgfTag `CellBody'>
X    <Pgf 
X     <PgfFont 
X      <FTag `'>
X      <FFamily `Times'>
X      <FVar `Regular'>
X      <FWeight `Regular'>
X      <FAngle `Regular'>
X      <FPostScriptName `Times-Roman'>
X      <FSize  12.0 pt>
X      <FUnderlining FNoUnderlining >
X      <FUnderline No >
X      <FDoubleUnderline No >
X      <FNumericUnderline No >
X      <FOverline No >
X      <FStrike No >
X      <FChangeBar No >
X      <FOutline No >
X      <FShadow No >
X      <FPairKern Yes >
X      <FCase FAsTyped >
X      <FPosition FNormal >
X      <FSupScript No >
X      <FSubScript No >
X      <FDX  0.0 pt>
X      <FDY  0.0 pt>
X      <FDW  0.0 pt>
X      <FSeparation 0>
X      <FColor `Black'>
X     > # end of PgfFont
X    > # end of Pgf
X   > # end of TblColumnBody
X   <TblColumnF 
X    <Pgf 
X     <PgfTag `CellFooting'>
X     <PgfAlignment Center >
X     <PgfHyphenate No >
X     <PgfCellAlignment Middle >
X     <PgfCellMargins  0.0 pt 2.0 pt 0.0 pt 2.0 pt>
X    > # end of Pgf
X   > # end of TblColumnF
X  > # end of TblColumn
X > # end of TblFormat
X <TblNumColumns 2>
X <Unique 432562>
X <TblColumnWidth  1.875">
X <TblColumnWidth  4.625">
X <TblTitleContent 
X  <Notes 
X  > # end of Notes
X  <Para 
X   <Unique 432564>
X   <PgfTag `TableTitle'>
X   <PgfNumString `Table 1: '>
X   <ParaLine 
X    <String `Important variables in fmweb'>
X   >
X  > # end of Para
X > # end of TblTitleContent
X <TblH 
X  <Row 
X   <RowMaxHeight  14.0">
X   <RowHeight  0.33333">
X   <Cell 
X    <CellContent 
X     <Notes 
X     > # end of Notes
X     <Para 
X      <Unique 432568>
X      <PgfTag `CellHeading'>
X      <ParaLine 
X       <String `name'>
X      >
X     > # end of Para
X    > # end of CellContent
X   > # end of Cell
X   <Cell 
X    <CellContent 
X     <Notes 
X     > # end of Notes
X     <Para 
X      <Unique 432570>
X      <PgfTag `CellHeading'>
X      <ParaLine 
X       <String `Description'>
X      >
X     > # end of Para
X    > # end of CellContent
X   > # end of Cell
X  > # end of Row
X > # end of TblH
X <TblBody 
X  <Row 
X   <RowMaxHeight  14.0">
X   <RowHeight  0.44444">
X   <Cell 
X    <CellContent 
X     <Notes 
X     > # end of Notes
X     <Para 
X      <Unique 432572>
X      <PgfTag `CellBody'>
X      <ParaLine 
X       <String `%chunksByName'>
X      >
X     > # end of Para
X    > # end of CellContent
X   > # end of Cell
X   <Cell 
X    <CellContent 
X     <Notes 
X     > # end of Notes
X     <Para 
X      <Unique 432574>
X      <PgfTag `CellBody'>
X      <ParaLine 
X       <String `An array of chunks, whose key is the heading of the chunk, and it\xd5 s value '>
X      >
X      <ParaLine 
X       <String `is the entire code in that section.'>
X      >
X     > # end of Para
X    > # end of CellContent
X   > # end of Cell
X  > # end of Row
X  <Row 
X   <RowMaxHeight  14.0">
X   <RowHeight  0.27778">
X   <Cell 
X    <CellContent 
X     <Notes 
X     > # end of Notes
X     <Para 
X      <Unique 432576>
X      <PgfTag `CellBody'>
X      <ParaLine 
X       <String `$currChunkHeading'>
X      >
X     > # end of Para
X    > # end of CellContent
X   > # end of Cell
X   <Cell 
X    <CellContent 
X     <Notes 
X     > # end of Notes
X     <Para 
X      <Unique 432578>
X      <PgfTag `CellBody'>
X      <ParaLine 
X       <String `The current chunk heading'>
X      >
X     > # end of Para
X    > # end of CellContent
X   > # end of Cell
X  > # end of Row
X  <Row 
X   <RowMaxHeight  14.0">
X   <RowHeight  0.44444">
X   <Cell 
X    <CellContent 
X     <Notes 
X     > # end of Notes
X     <Para 
X      <Unique 432580>
X      <PgfTag `CellBody'>
X      <ParaLine 
X       <String `@chunkHeadings'>
X      >
X     > # end of Para
X    > # end of CellContent
X   > # end of Cell
X   <Cell 
X    <CellContent 
X     <Notes 
X     > # end of Notes
X     <Para 
X      <Unique 432582>
X      <PgfTag `CellBody'>
X      <ParaLine 
X       <String `A list of all the chunk headings, in order of appearance. If a heading has '>
X      >
X      <ParaLine 
X       <String `been encountered before, it is not appended to this array.'>
X      >
X     > # end of Para
X    > # end of CellContent
X   > # end of Cell
X  > # end of Row
X  <Row 
X   <RowMaxHeight  14.0">
X   <RowHeight  0.44444">
X   <Cell 
X    <CellContent 
X     <Notes 
X     > # end of Notes
X     <Para 
X      <Unique 432584>
X      <PgfTag `CellBody'>
X      <ParaLine 
X       <String `%markerReferred'>
X      >
X     > # end of Para
X    > # end of CellContent
X   > # end of Cell
X   <Cell 
X    <CellContent 
X     <Notes 
X     > # end of Notes
X     <Para 
X      <Unique 432586>
X      <PgfTag `CellBody'>
X      <ParaLine 
X       <String `Keeps track of all those chunk headings that have been referred to (by a '>
X      >
X      <ParaLine 
X       <String `Frame cross reference).'>
X      >
X     > # end of Para
X    > # end of CellContent
X   > # end of Cell
X  > # end of Row
X  <Row 
X   <RowMaxHeight  14.0">
X   <RowHeight  1.11111">
X   <Cell 
X    <CellContent 
X     <Notes 
X     > # end of Notes
X     <Para 
X      <Unique 432588>
X      <PgfTag `CellBody'>
X      <ParaLine 
X       <String `%markerToHeading'>
X      >
X     > # end of Para
X    > # end of CellContent
X   > # end of Cell
X   <Cell 
X    <CellContent 
X     <Notes 
X     > # end of Notes
X     <Para 
X      <Unique 432590>
X      <PgfTag `CellBody'>
X      <ParaLine 
X       <String `A translation table - Each chunk heading has a text (the \xd2 heading\xd3 ) that is '>
X      >
X      <ParaLine 
X       <String `visible, and a marker text that Frame inserts. Unfortunately, these two '>
X      >
X      <ParaLine 
X       <String `are not necessarily identical. This translation is necessary since the '>
X      >
X      <ParaLine 
X       <String `script allows more than one chunk to have the same name (which is then '>
X      >
X      <ParaLine 
X       <String `concatenated), but a cross reference can be created to only of these '>
X      >
X      <ParaLine 
X       <String `paragraphs. '>
X      >
X     > # end of Para
X    > # end of CellContent
X   > # end of Cell
X  > # end of Row
X  <Row 
X   <RowMaxHeight  14.0">
X   <RowHeight  0.27778">
X   <Cell 
X    <CellContent 
X     <Notes 
X     > # end of Notes
X     <Para 
X      <Unique 432592>
X      <PgfTag `CellBody'>
X      <ParaLine 
X       <String `$line'>
X      >
X     > # end of Para
X    > # end of CellContent
X   > # end of Cell
X   <Cell 
X    <CellContent 
X     <Notes 
X     > # end of Notes
X     <Para 
X      <Unique 432594>
X      <PgfTag `CellBody'>
X      <ParaLine 
X       <String `Global var that contains the current line from the input MIF file.'>
X      >
X     > # end of Para
X    > # end of CellContent
X   > # end of Cell
X  > # end of Row
X  <Row 
X   <RowMaxHeight  14.0">
X   <RowHeight  0.61111">
X   <Cell 
X    <CellContent 
X     <Notes 
X     > # end of Notes
X     <Para 
X      <Unique 432596>
X      <PgfTag `CellBody'>
X      <ParaLine 
X       <String `$currMarkerText'>
X      >
X     > # end of Para
X    > # end of CellContent
X   > # end of Cell
X   <Cell 
X    <CellContent 
X     <Notes 
X     > # end of Notes
X     <Para 
X      <Unique 432598>
X      <PgfTag `CellBody'>
X      <ParaLine 
X       <String `While evaluating a chunk paragraph, this keeps track of the current '>
X      >
X      <ParaLine 
X       <String `marker text. Subsequently, the text of the paragraph and this marker text '>
X      >
X      <ParaLine 
X       <String `are related by %markerToHeading'>
X      >
X     > # end of Para
X    > # end of CellContent
X   > # end of Cell
X  > # end of Row
X  <Row 
X   <RowMaxHeight  14.0">
X   <RowHeight  0.44444">
X   <Cell 
X    <CellContent 
X     <Notes 
X     > # end of Notes
X     <Para 
X      <Unique 432600>
X      <PgfTag `CellBody'>
X      <ParaLine 
X       <String `$currModeProc'>
X      >
X     > # end of Para
X    > # end of CellContent
X   > # end of Cell
X   <Cell 
X    <CellContent 
X     <Notes 
X     > # end of Notes
X     <Para 
X      <Unique 432602>
X      <PgfTag `CellBody'>
X      <ParaLine 
X       <String `A reference to a mode subroutine. Each of these subroutines is part of a '>
X      >
X      <ParaLine 
X       <String `state diagram (shown below).'>
X      >
X     > # end of Para
X    > # end of CellContent
X   > # end of Cell
X  > # end of Row
X  <Row 
X   <RowMaxHeight  14.0">
X   <RowHeight  0.27778">
X   <Cell 
X    <CellContent 
X     <Notes 
X     > # end of Notes
X     <Para 
X      <Unique 432604>
X      <PgfTag `CellBody'>
X      <ParaLine 
X       <String `@lookFor'>
X      >
X     > # end of Para
X    > # end of CellContent
X   > # end of Cell
X   <Cell 
X    <CellContent 
X     <Notes 
X     > # end of Notes
X     <Para 
X      <Unique 432606>
X      <PgfTag `CellBody'>
X      <ParaLine 
X       <String `The set of tokens in which this state is interested.'>
X      >
X     > # end of Para
X    > # end of CellContent
X   > # end of Cell
X  > # end of Row
X  <Row 
X   <RowMaxHeight  14.0">
X   <RowHeight  0.61111">
X   <Cell 
X    <CellContent 
X     <Notes 
X     > # end of Notes
X     <Para 
X      <Unique 432608>
X      <PgfTag `CellBody'>
X      <ParaLine 
X       <String `%chunkReferred'>
X      >
X     > # end of Para
X    > # end of CellContent
X   > # end of Cell
X   <Cell 
X    <CellContent 
X     <Notes 
X     > # end of Notes
X     <Para 
X      <Unique 432610>
X      <PgfTag `CellBody'>
X      <ParaLine 
X       <String `This array (keyed by chunk heading) tracks all chunks that have been '>
X      >
X      <ParaLine 
X       <String `referred to, by other chunks. The chunks that don\xd5 t belong to this cate'>
X       <Char SoftHyphen >
X      >
X      <ParaLine 
X       <String `gory are the top-level chunks. '>
X      >
X     > # end of Para
X    > # end of CellContent
X   > # end of Cell
X  > # end of Row
X > # end of TblBody
X> # end of Tbl
X> # end of Tbls
X<Page 
X <Unique 94657>
X <PageType LeftMasterPage >
X <PageTag `Left'>
X <PageSize  8.5" 11.0">
X <PageOrientation Portrait >
X <PageAngle  0.0>
X <TextRect 
X  <ID 6>
X  <Unique 427029>
X  <Pen 15>
X  <Fill 15>
X  <PenWidth  1.0 pt>
X  <Separation 0>
X  <ObColor `Black'>
X  <DashedPattern 
X   <DashedStyle Solid >
X  > # end of DashedPattern
X  <Overprint No >
X  <ShapeRect  1.0" 0.5" 6.5" 0.13889">
X  <BRect  1.0" 0.5" 6.5" 0.13889">
X  <TRNext 0>
X > # end of TextRect
X <TextRect 
X  <ID 7>
X  <Unique 427027>
X  <Overprint No >
X  <ShapeRect  1.0" 10.40741" 6.5" 0.13889">
X  <BRect  1.0" 10.40741" 6.5" 0.13889">
X  <TRNext 0>
X > # end of TextRect
X <TextRect 
X  <ID 8>
X  <Unique 427019>
X  <Overprint No >
X  <ShapeRect  1.0" 1.0" 6.5" 9.0">
X  <BRect  1.0" 1.0" 6.5" 9.0">
X  <TRNext 0>
X > # end of TextRect
X> # end of Page
X<Page 
X <Unique 94658>
X <PageType RightMasterPage >
X <PageTag `Right'>
X <PageSize  8.5" 11.0">
X <PageOrientation Portrait >
X <PageAngle  0.0>
X <TextRect 
X  <ID 9>
X  <Unique 427025>
X  <Pen 15>
X  <Fill 15>
X  <PenWidth  1.0 pt>
X  <Separation 0>
X  <ObColor `Black'>
X  <DashedPattern 
X   <DashedStyle Solid >
X  > # end of DashedPattern
X  <Overprint No >
X  <ShapeRect  1.0" 0.5" 6.5" 0.13889">
X  <BRect  1.0" 0.5" 6.5" 0.13889">
X  <TRNext 0>
X > # end of TextRect
X <TextRect 
X  <ID 10>
X  <Unique 427023>
X  <Overprint No >
X  <ShapeRect  1.0" 10.40741" 6.5" 0.13889">
X  <BRect  1.0" 10.40741" 6.5" 0.13889">
X  <TRNext 0>
X > # end of TextRect
X <TextRect 
X  <ID 11>
X  <Unique 427021>
X  <Overprint No >
X  <ShapeRect  1.0" 1.0" 6.5" 9.0">
X  <BRect  1.0" 1.0" 6.5" 9.0">
X  <TRNext 0>
X > # end of TextRect
X <PolyLine 
X  <Unique 432750>
X  <Pen 4>
X  <PenWidth  3.0 pt>
X  <HeadCap Square >
X  <TailCap Square >
X  <Overprint No >
X  <NumPoints 2>
X  <Point  0.45833" 10.25">
X  <Point  8.29167" 10.25">
X > # end of PolyLine
X> # end of Page
X<Page 
X <Unique 94659>
X <PageType ReferencePage >
X <PageTag `Reference'>
X <PageSize  8.5" 11.0">
X <PageOrientation Portrait >
X <PageAngle  0.0>
X <TextLine 
X  <Unique 94660>
X  <Separation 0>
X  <ObColor `Black'>
X  <DashedPattern 
X   <DashedStyle Solid >
X  > # end of DashedPattern
X  <Overprint No >
X  <TLOrigin  1.0" 0.4489">
X  <TLAlignment Left >
X  <TLLanguage USEnglish >
X  <Font 
X   <FTag `'>
X   <FFamily `Helvetica'>
X   <FVar `Regular'>
X   <FWeight `Bold'>
X   <FAngle `Regular'>
X   <FPostScriptName `Helvetica-Bold'>
X   <FSize  12.0 pt>
X   <FUnderlining FNoUnderlining >
X   <FUnderline No >
X   <FDoubleUnderline No >
X   <FNumericUnderline No >
X   <FOverline No >
X   <FStrike No >
X   <FChangeBar No >
X   <FOutline No >
X   <FShadow No >
X   <FPairKern No >
X   <FCase FAsTyped >
X   <FPosition FNormal >
X   <FSupScript No >
X   <FSubScript No >
X   <FDX  0.0 pt>
X   <FDY  0.0 pt>
X   <FDW  0.0 pt>
X   <FSeparation 0>
X   <FColor `Black'>
X  > # end of Font
X  <String `Footnote'>
X > # end of TextLine
X <TextLine 
X  <Unique 94661>
X  <Overprint No >
X  <TLOrigin  1.0" 1.70441">
X  <TLAlignment Left >
X  <TLLanguage USEnglish >
X  <String `Single Line'>
X > # end of TextLine
X <Frame 
X  <Unique 94662>
X  <Pen 15>
X  <Fill 15>
X  <PenWidth  1.0 pt>
X  <Angle  360.0>
X  <Overprint No >
X  <ShapeRect  1.0" 0.54167" 2.5" 0.20833">
X  <BRect  1.0" 0.54167" 2.5" 0.20833">
X  <FrameType NotAnchored >
X  <Tag `Footnote'>
X  <PolyLine 
X   <Unique 427003>
X   <Pen 0>
X   <PenWidth  0.5 pt>
X   <HeadCap Square >
X   <TailCap Square >
X   <Overprint No >
X   <NumPoints 2>
X   <Point  0.125" 0.02778">
X   <Point  2.125" 0.02778">
X  > # end of PolyLine
X > # end of Frame
X <TextLine 
X  <Unique 94664>
X  <Overprint No >
X  <TLOrigin  1.0" 2.45441">
X  <TLAlignment Left >
X  <TLLanguage USEnglish >
X  <String `Double Line'>
X > # end of TextLine
X <Frame 
X  <Unique 94665>
X  <Pen 15>
X  <PenWidth  1.0 pt>
X  <Angle  360.0>
X  <Overprint No >
X  <ShapeRect  1.0" 2.58333" 6.5" 0.16667">
X  <BRect  1.0" 2.58333" 6.5" 0.16667">
X  <FrameType NotAnchored >
X  <Tag `Double Line'>
X  <PolyLine 
X   <Unique 427007>
X   <Pen 0>
X   <Overprint No >
X   <NumPoints 2>
X   <Point  0.0" 0.01389">
X   <Point  6.5" 0.01389">
X  > # end of PolyLine
X  <PolyLine 
X   <Unique 427009>
X   <Overprint No >
X   <NumPoints 2>
X   <Point  0.0" 0.05556">
X   <Point  6.5" 0.05556">
X  > # end of PolyLine
X > # end of Frame
X <Frame 
X  <Unique 94668>
X  <Pen 15>
X  <Angle  360.0>
X  <Overprint No >
X  <ShapeRect  1.0" 1.86111" 6.5" 0.13889">
X  <BRect  1.0" 1.86111" 6.5" 0.13889">
X  <FrameType NotAnchored >
X  <Tag `Single Line'>
X  <PolyLine 
X   <Unique 427012>
X   <Pen 0>
X   <Overprint No >
X   <NumPoints 2>
X   <Point  0.0" 0.01389">
X   <Point  6.5" 0.01389">
X  > # end of PolyLine
X > # end of Frame
X <Frame 
X  <Unique 94670>
X  <Pen 15>
X  <Angle  360.0>
X  <Overprint No >
X  <ShapeRect  1.0" 1.25" 2.5" 0.08333">
X  <BRect  1.0" 1.25" 2.5" 0.08333">
X  <FrameType NotAnchored >
X  <Tag `TableFootnote'>
X > # end of Frame
X <TextLine 
X  <Unique 94671>
X  <Overprint No >
X  <TLOrigin  0.96836" 1.11233">
X  <TLAlignment Left >
X  <TLLanguage USEnglish >
X  <String `TableFootnote'>
X > # end of TextLine
X> # end of Page
X<Page 
X <Unique 432787>
X <PageType ReferencePage >
X <PageTag `TOC'>
X <PageSize  8.5" 11.0">
X <PageOrientation Portrait >
X <PageAngle  0.0>
X <TextRect 
X  <ID 12>
X  <Unique 432816>
X  <Pen 15>
X  <Fill 7>
X  <PenWidth  0.5 pt>
X  <Separation 0>
X  <ObColor `Black'>
X  <DashedPattern 
X   <DashedStyle Solid >
X  > # end of DashedPattern
X  <Overprint No >
X  <ShapeRect  0.59722" 1.01389" 7.38889" 1.33333">
X  <BRect  0.59722" 1.01389" 7.38889" 1.33333">
X  <TRNext 0>
X > # end of TextRect
X> # end of Page
X<Page 
X <Unique 996720>
X <PageType BodyPage >
X <PageNum `1'>
X <PageSize  8.5" 11.0">
X <PageOrientation Portrait >
X <PageAngle  0.0>
X <PageBackground `Default'>
X <TextRect 
X  <ID 13>
X  <Unique 427031>
X  <Pen 15>
X  <Fill 15>
X  <PenWidth  1.0 pt>
X  <Separation 0>
X  <ObColor `Black'>
X  <DashedPattern 
X   <DashedStyle Solid >
X  > # end of DashedPattern
X  <Overprint No >
X  <ShapeRect  1.0" 1.0" 6.5" 9.0">
X  <BRect  1.0" 1.0" 6.5" 9.0">
X  <TRNext 14>
X > # end of TextRect
X> # end of Page
X<Page 
X <Unique 427187>
X <PageType BodyPage >
X <PageNum `2'>
X <PageSize  8.5" 11.0">
X <PageOrientation Portrait >
X <PageAngle  0.0>
X <PageBackground `Default'>
X <TextRect 
X  <ID 14>
X  <Unique 427188>
X  <Pen 15>
X  <Fill 15>
X  <PenWidth  1.0 pt>
X  <Separation 0>
X  <ObColor `Black'>
X  <DashedPattern 
X   <DashedStyle Solid >
X  > # end of DashedPattern
X  <Overprint No >
X  <ShapeRect  1.0" 1.0" 6.5" 9.0">
X  <BRect  1.0" 1.0" 6.5" 9.0">
X  <TRNext 15>
X > # end of TextRect
X> # end of Page
X<Page 
X <Unique 427260>
X <PageType BodyPage >
X <PageNum `3'>
X <PageSize  8.5" 11.0">
X <PageOrientation Portrait >
X <PageAngle  0.0>
X <PageBackground `Default'>
X <TextRect 
X  <ID 15>
X  <Unique 427261>
X  <Pen 15>
X  <Fill 15>
X  <PenWidth  1.0 pt>
X  <Separation 0>
X  <ObColor `Black'>
X  <DashedPattern 
X   <DashedStyle Solid >
X  > # end of DashedPattern
X  <Overprint No >
X  <ShapeRect  1.0" 1.0" 6.5" 9.0">
X  <BRect  1.0" 1.0" 6.5" 9.0">
X  <TRNext 16>
X > # end of TextRect
X> # end of Page
X<Page 
X <Unique 427334>
X <PageType BodyPage >
X <PageNum `4'>
X <PageSize  8.5" 11.0">
X <PageOrientation Portrait >
X <PageAngle  0.0>
X <PageBackground `Default'>
X <TextRect 
X  <ID 16>
X  <Unique 427335>
X  <Pen 15>
X  <Fill 15>
X  <PenWidth  1.0 pt>
X  <Separation 0>
X  <ObColor `Black'>
X  <DashedPattern 
X   <DashedStyle Solid >
X  > # end of DashedPattern
X  <Overprint No >
X  <ShapeRect  1.0" 1.0" 6.5" 9.0">
X  <BRect  1.0" 1.0" 6.5" 9.0">
X  <TRNext 17>
X > # end of TextRect
X> # end of Page
X<Page 
X <Unique 427586>
X <PageType BodyPage >
X <PageNum `5'>
X <PageSize  8.5" 11.0">
X <PageOrientation Portrait >
X <PageAngle  0.0>
X <PageBackground `Default'>
X <TextRect 
X  <ID 17>
X  <Unique 427587>
X  <Pen 15>
X  <Fill 15>
X  <PenWidth  1.0 pt>
X  <Separation 0>
X  <ObColor `Black'>
X  <DashedPattern 
X   <DashedStyle Solid >
X  > # end of DashedPattern
X  <Overprint No >
X  <ShapeRect  1.0" 1.0" 6.5" 9.0">
X  <BRect  1.0" 1.0" 6.5" 9.0">
X  <TRNext 18>
X > # end of TextRect
X> # end of Page
X<Page 
X <Unique 432656>
X <PageType BodyPage >
X <PageNum `6'>
X <PageSize  8.5" 11.0">
X <PageOrientation Portrait >
X <PageAngle  0.0>
X <PageBackground `Default'>
X <TextRect 
X  <ID 18>
X  <Unique 432657>
X  <Pen 15>
X  <Fill 15>
X  <PenWidth  1.0 pt>
X  <Separation 0>
X  <ObColor `Black'>
X  <DashedPattern 
X   <DashedStyle Solid >
X  > # end of DashedPattern
X  <Overprint No >
X  <ShapeRect  1.0" 1.0" 6.5" 9.0">
X  <BRect  1.0" 1.0" 6.5" 9.0">
X  <TRNext 19>
X > # end of TextRect
X> # end of Page
X<Page 
X <Unique 432659>
X <PageType BodyPage >
X <PageNum `7'>
X <PageSize  8.5" 11.0">
X <PageOrientation Portrait >
X <PageAngle  0.0>
X <PageBackground `Default'>
X <TextRect 
X  <ID 19>
X  <Unique 432660>
X  <Pen 15>
X  <Fill 15>
X  <PenWidth  1.0 pt>
X  <Separation 0>
X  <ObColor `Black'>
X  <DashedPattern 
X   <DashedStyle Solid >
X  > # end of DashedPattern
X  <Overprint No >
X  <ShapeRect  1.0" 1.0" 6.5" 9.0">
X  <BRect  1.0" 1.0" 6.5" 9.0">
X  <TRNext 20>
X > # end of TextRect
X> # end of Page
X<Page 
X <Unique 432662>
X <PageType BodyPage >
X <PageNum `8'>
X <PageSize  8.5" 11.0">
X <PageOrientation Portrait >
X <PageAngle  0.0>
X <PageBackground `Default'>
X <TextRect 
X  <ID 20>
X  <Unique 432663>
X  <Pen 15>
X  <Fill 15>
X  <PenWidth  1.0 pt>
X  <Separation 0>
X  <ObColor `Black'>
X  <DashedPattern 
X   <DashedStyle Solid >
X  > # end of DashedPattern
X  <Overprint No >
X  <ShapeRect  1.0" 1.0" 6.5" 9.0">
X  <BRect  1.0" 1.0" 6.5" 9.0">
X  <TRNext 21>
X > # end of TextRect
X> # end of Page
X<Page 
X <Unique 432665>
X <PageType BodyPage >
X <PageNum `9'>
X <PageSize  8.5" 11.0">
X <PageOrientation Portrait >
X <PageAngle  0.0>
X <PageBackground `Default'>
X <TextRect 
X  <ID 21>
X  <Unique 432666>
X  <Pen 15>
X  <Fill 15>
X  <PenWidth  1.0 pt>
X  <Separation 0>
X  <ObColor `Black'>
X  <DashedPattern 
X   <DashedStyle Solid >
X  > # end of DashedPattern
X  <Overprint No >
X  <ShapeRect  1.0" 1.0" 6.5" 9.0">
X  <BRect  1.0" 1.0" 6.5" 9.0">
X  <TRNext 22>
X > # end of TextRect
X> # end of Page
X<Page 
X <Unique 432668>
X <PageType BodyPage >
X <PageNum `10'>
X <PageSize  8.5" 11.0">
X <PageOrientation Portrait >
X <PageAngle  0.0>
X <PageBackground `Default'>
X <TextRect 
X  <ID 22>
X  <Unique 432669>
X  <Pen 15>
X  <Fill 15>
X  <PenWidth  1.0 pt>
X  <Separation 0>
X  <ObColor `Black'>
X  <DashedPattern 
X   <DashedStyle Solid >
X  > # end of DashedPattern
X  <Overprint No >
X  <ShapeRect  1.0" 1.0" 6.5" 9.0">
X  <BRect  1.0" 1.0" 6.5" 9.0">
X  <TRNext 23>
X > # end of TextRect
X> # end of Page
X<Page 
X <Unique 432671>
X <PageType BodyPage >
X <PageNum `11'>
X <PageSize  8.5" 11.0">
X <PageOrientation Portrait >
X <PageAngle  0.0>
X <PageBackground `Default'>
X <TextRect 
X  <ID 23>
X  <Unique 432672>
X  <Pen 15>
X  <Fill 15>
X  <PenWidth  1.0 pt>
X  <Separation 0>
X  <ObColor `Black'>
X  <DashedPattern 
X   <DashedStyle Solid >
X  > # end of DashedPattern
X  <Overprint No >
X  <ShapeRect  1.0" 1.0" 6.5" 9.0">
X  <BRect  1.0" 1.0" 6.5" 9.0">
X  <TRNext 24>
X > # end of TextRect
X> # end of Page
X<Page 
X <Unique 432674>
X <PageType BodyPage >
X <PageNum `12'>
X <PageSize  8.5" 11.0">
X <PageOrientation Portrait >
X <PageAngle  0.0>
X <PageBackground `Default'>
X <TextRect 
X  <ID 24>
X  <Unique 432675>
X  <Pen 15>
X  <Fill 15>
X  <PenWidth  1.0 pt>
X  <Separation 0>
X  <ObColor `Black'>
X  <DashedPattern 
X   <DashedStyle Solid >
X  > # end of DashedPattern
X  <Overprint No >
X  <ShapeRect  1.0" 1.0" 6.5" 9.0">
X  <BRect  1.0" 1.0" 6.5" 9.0">
X  <TRNext 25>
X > # end of TextRect
X> # end of Page
X<Page 
X <Unique 432677>
X <PageType BodyPage >
X <PageNum `13'>
X <PageSize  8.5" 11.0">
X <PageOrientation Portrait >
X <PageAngle  0.0>
X <PageBackground `Default'>
X <TextRect 
X  <ID 25>
X  <Unique 432678>
X  <Pen 15>
X  <Fill 15>
X  <PenWidth  1.0 pt>
X  <Separation 0>
X  <ObColor `Black'>
X  <DashedPattern 
X   <DashedStyle Solid >
X  > # end of DashedPattern
X  <Overprint No >
X  <ShapeRect  1.0" 1.0" 6.5" 9.0">
X  <BRect  1.0" 1.0" 6.5" 9.0">
X  <TRNext 26>
X > # end of TextRect
X> # end of Page
X<Page 
X <Unique 432680>
X <PageType BodyPage >
X <PageNum `14'>
X <PageSize  8.5" 11.0">
X <PageOrientation Portrait >
X <PageAngle  0.0>
X <PageBackground `Default'>
X <TextRect 
X  <ID 26>
X  <Unique 432681>
X  <Pen 15>
X  <Fill 15>
X  <PenWidth  1.0 pt>
X  <Separation 0>
X  <ObColor `Black'>
X  <DashedPattern 
X   <DashedStyle Solid >
X  > # end of DashedPattern
X  <Overprint No >
X  <ShapeRect  1.0" 1.0" 6.5" 9.0">
X  <BRect  1.0" 1.0" 6.5" 9.0">
X  <TRNext 0>
X > # end of TextRect
X> # end of Page
X<TextFlow 
X <TFTag `A'>
X <TFAutoConnect Yes >
X <Notes 
X > # end of Notes
X <Para 
X  <Unique 427020>
X  <Pgf 
X   <PgfTag `Body'>
X   <PgfUseNextTag No >
X   <PgfNextTag `'>
X   <PgfAlignment LeftRight >
X   <PgfFIndent  0.0">
X   <PgfLIndent  0.0">
X   <PgfRIndent  0.0">
X   <PgfTopSeparator `'>
X   <PgfBotSeparator `'>
X   <PgfPlacement Anywhere >
X   <PgfPlacementStyle Normal >
X   <PgfRunInDefaultPunct `. '>
X   <PgfSpBefore  5.0 pt>
X   <PgfSpAfter  0.0 pt>
X   <PgfWithPrev No >
X   <PgfWithNext No >
X   <PgfBlockSize 1>
X   <PgfFont 
X    <FTag `'>
X    <FFamily `Helvetica'>
X    <FVar `Regular'>
X    <FWeight `Regular'>
X    <FAngle `Regular'>
X    <FPostScriptName `Helvetica'>
X    <FSize  10.0 pt>
X    <FUnderlining FNoUnderlining >
X    <FUnderline No >
X    <FDoubleUnderline No >
X    <FNumericUnderline No >
X    <FOverline No >
X    <FStrike No >
X    <FChangeBar No >
X    <FOutline No >
X    <FShadow No >
X    <FPairKern Yes >
X    <FCase FAsTyped >
X    <FPosition FNormal >
X    <FSupScript No >
X    <FSubScript No >
X    <FDX  0.0 pt>
X    <FDY  0.0 pt>
X    <FDW  0.0 pt>
X    <FSeparation 0>
X    <FColor `Black'>
X   > # end of PgfFont
X   <PgfLineSpacing Proportional >
X   <PgfLeading  2.0 pt>
X   <PgfAutoNum No >
X   <PgfNumTabs 0>
X   <PgfHyphenate Yes >
X   <HyphenMaxLines 2>
X   <HyphenMinPrefix 3>
X   <HyphenMinSuffix 3>
X   <HyphenMinWord 5>
X   <PgfLetterSpace No >
X   <PgfMinWordSpace 90>
X   <PgfOptWordSpace 100>
X   <PgfMaxWordSpace 110>
X   <PgfLanguage USEnglish >
X   <PgfCellAlignment Top >
X   <PgfCellMargins  0.0 pt 0.0 pt 0.0 pt 0.0 pt>
X   <PgfCellLMarginFixed No >
X   <PgfCellTMarginFixed No >
X   <PgfCellRMarginFixed No >
X   <PgfCellBMarginFixed No >
X  > # end of Pgf
X  <ParaLine 
X   <TextRectID 8>
X  >
X > # end of Para
X> # end of TextFlow
X<TextFlow 
X <TFTag `A'>
X <TFAutoConnect Yes >
X <Notes 
X > # end of Notes
X <Para 
X  <Unique 427022>
X  <PgfTag `Body'>
X  <ParaLine 
X   <TextRectID 11>
X  >
X > # end of Para
X> # end of TextFlow
X<TextFlow 
X <Notes 
X > # end of Notes
X <Para 
X  <Unique 427024>
X  <Pgf 
X   <PgfTag `Footer'>
X   <PgfSpBefore  0.0 pt>
X   <PgfFont 
X    <FTag `'>
X    <FFamily `Times'>
X    <FVar `Regular'>
X    <FWeight `Regular'>
X    <FAngle `Regular'>
X    <FPostScriptName `Times-Roman'>
X    <FSize  10.0 pt>
X    <FUnderlining FNoUnderlining >
X    <FUnderline No >
X    <FDoubleUnderline No >
X    <FNumericUnderline No >
X    <FOverline No >
X    <FStrike No >
X    <FChangeBar No >
X    <FOutline No >
X    <FShadow No >
X    <FPairKern No >
X    <FCase FAsTyped >
X    <FPosition FNormal >
X    <FSupScript No >
X    <FSubScript No >
X    <FDX  0.0 pt>
X    <FDY  0.0 pt>
X    <FDW  0.0 pt>
X    <FSeparation 0>
X    <FColor `Black'>
X   > # end of PgfFont
X   <PgfLineSpacing Fixed >
X   <PgfNumTabs 2>
X   <TabStop 
X    <TSX  3.25">
X    <TSType Center >
X    <TSLeaderStr ` '>
X   > # end of TabStop
X   <TabStop 
X    <TSX  6.5">
X    <TSType Right >
X    <TSLeaderStr ` '>
X   > # end of TabStop
X   <HyphenMinPrefix 2>
X   <HyphenMinSuffix 2>
X   <PgfMinWordSpace 75>
X   <PgfMaxWordSpace 125>
X  > # end of Pgf
X  <ParaLine 
X   <TextRectID 10>
X   <Char Tab >
X   <Char Tab >
X   <String `.. '>
X   <Variable 
X    <VariableName `Current Page #'>
X    <Unique 432753>
X   > # end of Variable
X  >
X > # end of Para
X> # end of TextFlow
X<TextFlow 
X <Notes 
X > # end of Notes
X <Para 
X  <Unique 427026>
X  <Pgf 
X   <PgfTag `Header'>
X  > # end of Pgf
X  <ParaLine 
X   <TextRectID 9>
X  >
X > # end of Para
X> # end of TextFlow
X<TextFlow 
X <Notes 
X > # end of Notes
X <Para 
X  <Unique 427028>
X  <Pgf 
X   <PgfTag `Footer'>
X  > # end of Pgf
X  <ParaLine 
X   <TextRectID 7>
X  >
X > # end of Para
X> # end of TextFlow
X<TextFlow 
X <Notes 
X > # end of Notes
X <Para 
X  <Unique 427030>
X  <Pgf 
X   <PgfTag `Header'>
X  > # end of Pgf
X  <ParaLine 
X   <TextRectID 6>
X  >
X > # end of Para
X> # end of TextFlow
X<TextFlow 
X <TFTag `A'>
X <TFAutoConnect Yes >
X <Notes 
X > # end of Notes
X <Para 
X  <Unique 432250>
X  <PgfTag `Title'>
X  <Pgf 
X   <PgfBotSeparator `Double Line'>
X  > # end of Pgf
X  <ParaLine 
X   <TextRectID 13>
X   <Font 
X    <FTag `'>
X    <FFamily `AvantGarde'>
X    <FWeight `DemiBold'>
X    <FPostScriptName `AvantGarde-Demi'>
X   > # end of Font
X   <Conditional 
X    <InCondition `Fluff'>
X   > # end of Conditional
X   <String `fmweb'>
X   <Font 
X    <FTag `'>
X   > # end of Font
X   <String `: Literate Programming using FrameMaker'>
X  >
X > # end of Para
X <Para 
X  <Unique 432251>
X  <PgfTag `Body'>
X  <Pgf 
X   <PgfAlignment Center >
X   <PgfNumTabs 1>
X   <TabStop 
X    <TSX  6.5">
X    <TSType Right >
X    <TSLeaderStr ` '>
X   > # end of TabStop
X  > # end of Pgf
X  <ParaLine 
X   <String `Version 1.0'>
X   <Char HardReturn >
X  >
X  <ParaLine 
X   <Char Tab >
X   <String `Sriram Srinivasan'>
X   <Char HardReturn >
X  >
X  <ParaLine 
X   <Char Tab >
X   <String `('>
X   <Font 
X    <FTag `'>
X    <FAngle `Oblique'>
X    <FPostScriptName `Helvetica-Oblique'>
X   > # end of Font
X   <String `sriram@tcs.com'>
X   <Font 
X    <FTag `'>
X   > # end of Font
X   <String `)'>
X  >
X > # end of Para
X <Para 
X  <Unique 432252>
X  <PgfTag `Heading1'>
X  <ParaLine 
X   <String `Introduction'>
X  >
X > # end of Para
X <Para 
X  <Unique 432253>
X  <PgfTag `Body'>
X  <ParaLine 
X   <String `This document explains a simple approach for doing literate programming using FrameMaker, a word pro'>
X   <Char SoftHyphen >
X  >
X  <ParaLine 
X   <String `cessing system. It is almost identical to the approach taken by WinWordWEB '>
X   <XRef 
X    <XRefName `Ref'>
X    <XRefSrcText `32486: Ref: 1. WEB: http://info.desy.de/user/projects/LitProg/HTML.html'>
X    <XRefSrcFile `'>
X    <Unique 432255>
X   > # end of XRef
X   <String `[2]'>
X   <XRefEnd >
X   <String `, except that it can addi'>
X   <Char SoftHyphen >
X  >
X  <ParaLine 
X   <String `tionally be used in batch mode.'>
X  >
X > # end of Para
X <Para 
X  <Unique 432257>
X  <PgfTag `Body'>
X  <ParaLine 
X   <String `All implementations of literate programming provide facilities to break a piece of code into digestible '>
X  >
X  <ParaLine 
X   <String `chunks which can be documented individually, and explained in any order. The only difference is in the way '>
X  >
X  <ParaLine 
X   <String `the document should be written so that a tool can separate the code from the rest of the documentation. '>
X  >
X  <ParaLine 
X   <String `WEB and such other tools provide a way of doing \xd2 in-band signalling\xd3 , to borrow a term from communica'>
X   <Char SoftHyphen >
X  >
X  <ParaLine 
X   <String `tions. The programmer annotates different parts of a document by keywords, and a program such as '>
X  >
X  <ParaLine 
X   <String `weave or tangle recognizes these keywords. In addition, these programs provide features such as section '>
X  >
X  <ParaLine 
X   <String `numbering, indexing etc. and language specific features such as pretty-printing, macro expansion etc.'>
X  >
X > # end of Para
X <Para 
X  <Unique 432258>
X  <PgfTag `Body'>
X  <ParaLine 
X   <String `The other approach is to do \xd2 out-of-band signalling\xd3 , where the formatting information is essentially kept '>
X  >
X  <ParaLine 
X   <String `out of the documentation. This is the approach taken by fmweb and WinWordWEB. '>
X  >
X > # end of Para
X <Para 
X  <Unique 432259>
X  <PgfTag `Body'>
X  <ParaLine 
X   <String `There are a couple of reasons why I don\xd5 t use WEB based tools.'>
X  >
X > # end of Para
X <Para 
X  <Unique 432260>
X  <PgfTag `Bulleted'>
X  <PgfNumString `\xa5 \t'>
X  <ParaLine 
X   <String `It is always nice to see the output of a literate programming effort, but the input is rather messy. I dis'>
X   <Char SoftHyphen >
X  >
X  <ParaLine 
X   <String `like seeing a lot of meta characters (like @, <<, \\, [[ ) etc. The sections are not immediately visible - '>
X  >
X  <ParaLine 
X   <String `one goes around looking for \xd2 \\section\xd3 , for example. I do a fair amount of coding in '>
X   <Font 
X    <FTag `code'>
X   > # end of Font
X   <String `perl'>
X   <Font 
X    <FTag `'>
X   > # end of Font
X   <String `, and the two '>
X  >
X  <ParaLine 
X   <String `notational structures put together make my head swim, esp. when I need to alter the code a few '>
X  >
X  <ParaLine 
X   <String `months later. Having access to a WYSIWIG word processor such as FrameMaker means that I don\xd5 t '>
X  >
X  <ParaLine 
X   <String `use TeX, and it is too much of an effort to learn the intricacies of LaTex or TeX to be able to use the '>
X  >
X  <ParaLine 
X   <String `WEB based tools.'>
X  >
X > # end of Para
X <Para 
X  <Unique 432261>
X  <PgfTag `Bulleted'>
X  <PgfNumString `\xa5 \t'>
X  <ParaLine 
X   <String `A number of these tools are language specific. '>
X   <Font 
X    <FTag `code'>
X   > # end of Font
X   <String `noweb'>
X   <Font 
X    <FTag `'>
X   > # end of Font
X   <String ` is one exception to this rule, and I rather like '>
X  >
X  <ParaLine 
X   <String `the simplicity of noweb. I don\xd5 t use noweb because of the reason explained above. '>
X  >
X > # end of Para
X <Para 
X  <Unique 432262>
X  <PgfTag `Body'>
X  <ParaLine 
X   <String `FrameMaker, like other good word processors, has excellent document formatting capabilities, cross refer'>
X   <Char SoftHyphen >
X  >
X  <ParaLine 
X   <String `encing and indexing, table of contents, graphics, tables etc. What I see on the screen is the final output, '>
X  >
X  <ParaLine 
X   <String `uncluttered by meta-information. '>
X  >
X > # end of Para
X <Para 
X  <Unique 432263>
X  <PgfTag `Body'>
X  <ParaLine 
X   <String `One problem that I have with this approach is that I am used to a Unix like development environment and '>
X  >
X  <ParaLine 
X   <String `extensively use text based tools such as emacs/vi, perl, diff, sccs etc. For this reason, I have not tried this '>
X  >
X  <ParaLine 
X   <String `approach on medium or larger sized implementations, though I hope to do that in the near future. '>
X  >
X > # end of Para
X <Para 
X  <Unique 432264>
X  <PgfTag `Body'>
X  <ParaLine 
X   <String `In general, I am somewhat unclear on how the literate programming paradigm helps a developer to think. '>
X  >
X  <ParaLine 
X   <String `The prevailing wisdom is that this approach forces a lot more disciplined thinking on the part of the pro'>
X   <Char SoftHyphen >
X  >
X  <ParaLine 
X   <String `grammer, since (s)he is in a teaching mode. I find that this helps in structuring the program well, once one '>
X  >
X  <ParaLine 
X   <String `knows what one should be doing, but if I don\xd5 t have a top-down (step-wise refinement) solution in my mind, '>
X  >
X  <ParaLine 
X   <String `I am not entirely sure how to start from a blank page. I tend to do small sections of the code using my reg'>
X   <Char SoftHyphen >
X  >
X  <ParaLine 
X   <String `ular development environment, and once I have a reasonable top-down solution in mind, copy it all over to '>
X  >
X  <ParaLine 
X   <String `a FrameMaker file and start refining it. '>
X  >
X > # end of Para
X <Para 
X  <Unique 432265>
X  <PgfTag `Heading1'>
X  <ParaLine 
X   <String `The fmweb approach'>
X  >
X > # end of Para
X <Para 
X  <Unique 432266>
X  <PgfTag `Body'>
X  <ParaLine 
X   <String `To separate the code from the rest of the stuff, the developer uses three paragraph formats.'>
X  >
X > # end of Para
X <Para 
X  <Unique 432267>
X  <PgfTag `Bulleted'>
X  <PgfNumString `\xa5 \t'>
X  <ParaLine 
X   <TextRectID 14>
X   <String `\xd2 File\xd3 : The file name is mentioned in this paragraph, and all subsequent lines will eventually be '>
X  >
X  <ParaLine 
X   <String `dumped into this file. '>
X  >
X > # end of Para
X <Para 
X  <Unique 432268>
X  <PgfTag `Bulleted'>
X  <PgfNumString `\xa5 \t'>
X  <ParaLine 
X   <String `\xd2 chunk\xd3 : A chunk (or section) is a heading followed by a set of \xd2 code\xd3  paragraphs. The \xd2 chunk\xd3  para'>
X   <Char SoftHyphen >
X  >
X  <ParaLine 
X   <String `graph tag identifies the heading for that section. It is possible to have more than one chunk with the '>
X  >
X  <ParaLine 
X   <String `same name. '>
X  >
X > # end of Para
X <Para 
X  <Unique 432269>
X  <PgfTag `Bulleted'>
X  <PgfNumString `\xa5 \t'>
X  <ParaLine 
X   <String `\xd2 code\xd3 : The developer writes code (in any language) using this paragraph tag. The Frame Maker cross '>
X  >
X  <ParaLine 
X   <String `reference facility has to be used to refer to chunks. '>
X  >
X > # end of Para
X <Para 
X  <Unique 432270>
X  <PgfTag `Body'>
X  <ParaLine 
X   <Font 
X    <FTag `code'>
X   > # end of Font
X   <String `fmweb'>
X   <Font 
X    <FTag `'>
X   > # end of Font
X   <String ` is a perl script that needs the FrameMaker document in a MIF format - it extracts chunks and code '>
X  >
X  <ParaLine 
X   <String `paragraphs out, and does the requisite tangling (restoring the order of chunks). All chunks with the same '>
X  >
X  <ParaLine 
X   <String `name are concatenated in the order they appear in the document. '>
X   <Font 
X    <FTag `code'>
X   > # end of Font
X   <String `fmweb'>
X   <Font 
X    <FTag `'>
X   > # end of Font
X   <String ` ignores all formatting informa'>
X   <Char SoftHyphen >
X  >
X  <ParaLine 
X   <String `tion. Source line number information can be optionally output, in a format accepted by '>
X   <Font 
X    <FTag `code'>
X   > # end of Font
X   <String `cc'>
X   <Font 
X    <FTag `'>
X   > # end of Font
X   <String ` (#line).'>
X  >
X > # end of Para
X <Para 
X  <Unique 432271>
X  <PgfTag `Heading1'>
X  <ParaLine 
X   <String `References'>
X  >
X > # end of Para
X <Para 
X  <Unique 432272>
X  <PgfTag `Ref'>
X  <PgfNumString `1.\t'>
X  <ParaLine 
X   <String `\xd2 Literate Programming\xd3 , Donald Knuth, Center for the Study of Language and Information, Stanford '>
X  >
X  <ParaLine 
X   <String `University, ISBN 0-937073-80-6 '>
X  >
X > # end of Para
X <Para 
X  <Unique 432274>
X  <PgfTag `Ref'>
X  <PgfNumString `2.\t'>
X  <ParaLine 
X   <Marker 
X    <MType 9>
X    <MText `32486: Ref: 1. WEB: http://info.desy.de/user/projects/LitProg/HTML.html'>
X    <MCurrPage 1>
X    <Unique 432273>
X   > # end of Marker
X   <Char Tab >
X   <String `WEB: http://info.desy.de/user/projects/LitProg/HTML.html - A pointer to all the other good stuff avail'>
X   <Char SoftHyphen >
X  >
X  <ParaLine 
X   <String `able on the net.'>
X  >
X > # end of Para
X <Para 
X  <Unique 432695>
X  <PgfTag `Heading1'>
X  <ParaLine 
X   <Unconditional >
X   <String `Unpacking the distribution'>
X  >
X > # end of Para
X <Para 
X  <Unique 432692>
X  <PgfTag `Body'>
X  <ParaLine 
X   <String `This document contains an example program (wc.c) written in the format explained above, and the fmweb '>
X  >
X  <ParaLine 
X   <String `script, along with some internal documentation.'>
X  >
X > # end of Para
X <Para 
X  <Unique 432713>
X  <PgfTag `Body'>
X  <ParaLine 
X   <String `Save this file as wc.mif. This file will be used to test out the fmweb script.'>
X  >
X > # end of Para
X <Para 
X  <Unique 432726>
X  <PgfTag `Body'>
X  <ParaLine 
X   <String `To extract fmweb (a perl5 script), go to Special-\>Conditional Text -\> Show/Hide..., and hide the conditional '>
X  >
X  <ParaLine 
X   <String `tag called \xd2 Fluff\xd3 . Only the perl script should be remaining. Save this file as text only, and call it fmweb.'>
X  >
X > # end of Para
X <Para 
X  <Unique 432729>
X  <PgfTag `Body'>
X  <ParaLine 
X   <String `Run fmweb - \xd2 perl5 fmweb < wc.mif\xd3 . This should produce a file called wc.c in the local directory. Compile '>
X  >
X  <ParaLine 
X   <String `and execute wc, and compare against the system provided \xd2 wc\xd3 , if on a Unix system.'>
X  >
X > # end of Para
X <Para 
X  <Unique 432935>
X  <PgfTag `Heading1'>
X  <ParaLine 
X   <String `ToDo'>
X  >
X > # end of Para
X <Para 
X  <Unique 432936>
X  <PgfTag `Bulleted'>
X  <PgfNumString `\xa5 \t'>
X  <ParaLine 
X   <String `Support multiple files'>
X  >
X > # end of Para
X <Para 
X  <Unique 432937>
X  <PgfTag `Bulleted'>
X  <PgfNumString `\xa5 \t'>
X  <ParaLine 
X   <String `Largish example - map library'>
X  >
X > # end of Para
X <Para 
X  <Unique 432938>
X  <PgfTag `Bulleted'>
X  <PgfNumString `\xa5 \t'>
X  <ParaLine 
X   <String `Speed up '>
X  >
X > # end of Para
X <Para 
X  <Unique 432939>
X  <PgfTag `Bulleted'>
X  <PgfNumString `\xa5 \t'>
X  <ParaLine 
X   <String `Look at mml '>
X  >
X > # end of Para
X <Para 
X  <Unique 432940>
X  <PgfTag `Bulleted'>
X  <PgfNumString `\xa5 \t'>
X  <ParaLine 
X   <String `Accept filenames as arguments'>
X  >
X > # end of Para
X <Para 
X  <Unique 432721>
X  <PgfTag `Body'>
X  <ParaLine 
X  >
X > # end of Para
X <Para 
X  <Unique 432696>
X  <PgfTag `Body'>
X  <ParaLine 
X  >
X > # end of Para
X <Para 
X  <Unique 432275>
X  <PgfTag `Heading1'>
X  <Pgf 
X   <PgfPlacement PageTop >
X  > # end of Pgf
X  <ParaLine 
X   <TextRectID 15>
X   <Conditional 
X    <InCondition `Fluff'>
X   > # end of Conditional
X   <String `Appendix A: \xd4 wc\xd5 : A word count program'>
X  >
X > # end of Para
X <Para 
X  <Unique 432276>
X  <PgfTag `Body'>
X  <ParaLine 
X  >
X > # end of Para
X <Para 
X  <Unique 432277>
X  <PgfTag `Body'>
X  <ParaLine 
X   <String `This section demonstrates how one can do Literate Programming with FrameMaker. There are only three '>
X  >
X  <ParaLine 
X   <String `paragraph tags of interest - File (see \xd2 File:\xd3  below), \xd2 chunk\xd3  (all the numbered paragraphs) and \xd2 code\xd3 . Any '>
X  >
X  <ParaLine 
X   <String `cross reference format can be used - \xd2 chunkref\xd3  is the name of the format used in the example below. '>
X  >
X  <ParaLine 
X   <String `Apologies if the example looks like a ransom note - one does tend to get carried away by the availability of '>
X  >
X  <ParaLine 
X   <String `fonts, and the WYSIWIGness of it all.'>
X  >
X > # end of Para
X <Para 
X  <Unique 432278>
X  <PgfTag `Body'>
X  <ParaLine 
X   <String `The implementation and comments have been shamelessly lifted from Norman Ramsey\xd5 s noweb distribu'>
X   <Char SoftHyphen >
X  >
X  <ParaLine 
X   <String `tion (ftp://bellcore.com/pub/norman/www/noweb/intro.html). This is just to provide a comparison of the two '>
X  >
X  <ParaLine 
X   <String `approaches. I have modified some of the comments that do not apply to this approach.'>
X  >
X > # end of Para
X <Para 
X  <Unique 432279>
X  <PgfTag `Body'>
X  <ParaLine 
X   <String `Thanks, Norman.'>
X  >
X > # end of Para
X <Para 
X  <Unique 432280>
X  <PgfTag `Body'>
X  <ParaLine 
X  >
X > # end of Para
X <Para 
X  <Unique 432281>
X  <PgfTag `File'>
X  <PgfNumString `File: '>
X  <ParaLine 
X   <String `wc.c'>
X  >
X > # end of Para
X <Para 
X  <Unique 432282>
X  <PgfTag `Body'>
X  <ParaLine 
X   <String `The purpose of '>
X   <Font 
X    <FTag `'>
X    <FFamily `Courier'>
X    <FPostScriptName `Courier'>
X   > # end of Font
X   <String `wc'>
X   <Font 
X    <FTag `'>
X   > # end of Font
X   <String ` is to count lines, words, and/or characters in a list of files. The number of lines in a file '>
X  >
X  <ParaLine 
X   <String `is the number of newline characters it contains. The number of characters is the file length in bytes.'>
X  >
X > # end of Para
X <Para 
X  <Unique 432283>
X  <PgfTag `Body'>
X  <ParaLine 
X   <String `A \Q\Qword\xd5 \xd5  is a maximal sequence of consecutive characters other than newline, space, or tab, containing '>
X  >
X  <ParaLine 
X   <String `at least one visible ASCII code.'>
X  >
X > # end of Para
X <Para 
X  <Unique 432284>
X  <PgfTag `Body'>
X  <ParaLine 
X   <String `(We assume that the standard ASCII code is in use.)'>
X  >
X > # end of Para
X <Para 
X  <Unique 432285>
X  <PgfTag `Body'>
X  <ParaLine 
X   <String `Most literate C programs share a common structure.'>
X  >
X > # end of Para
X <Para 
X  <Unique 432286>
X  <PgfTag `Body'>
X  <ParaLine 
X   <String `It\xd5 s probably a good idea to state the overall structure explicitly at the outset. Here, then, is an overview of '>
X  >
X  <ParaLine 
X   <String `the file '>
X   <Font 
X    <FTag `code'>
X    <FSize  12.0 pt>
X   > # end of Font
X   <String `wc.c'>
X   <Font 
X    <FTag `'>
X   > # end of Font
X   <String ` that is defined by the '>
X   <Font 
X    <FTag `code'>
X    <FSize  12.0 pt>
X   > # end of Font
X   <String `noweb'>
X   <Font 
X    <FTag `'>
X   > # end of Font
X   <String ` program '>
X   <Font 
X    <FTag `code'>
X    <FSize  12.0 pt>
X   > # end of Font
X   <String `wc.fm'>
X  >
X > # end of Para
X <Para 
X  <Unique 432760>
X  <PgfTag `chunk'>
X  <PgfNumString `1:\t'>
X  <ParaLine 
X   <String `Outline'>
X  >
X > # end of Para
X <Para 
X  <Unique 432764>
X  <PgfTag `refersTo'>
X  <ParaLine 
X   <XRef 
X    <XRefName `chunkref'>
X    <XRefSrcText `81375: chunk: Header files to include'>
X    <XRefSrcFile `'>
X    <Unique 432762>
X   > # end of XRef
X   <Font 
X    <FTag `Emphasis'>
X   > # end of Font
X   <String `<Header files to include\> , (2:, p. 3)'>
X   <Font 
X    <FTag `'>
X   > # end of Font
X   <XRefEnd >
X  >
X > # end of Para
X <Para 
X  <Unique 432768>
X  <PgfTag `refersTo'>
X  <ParaLine 
X   <XRef 
X    <XRefName `chunkref'>
X    <XRefSrcText `52409: chunk: Definitions'>
X    <XRefSrcFile `'>
X    <Unique 432766>
X   > # end of XRef
X   <Font 
X    <FTag `Emphasis'>
X   > # end of Font
X   <String `<Definitions\> , (3:, p. 3)'>
X   <Font 
X    <FTag `'>
X   > # end of Font
X   <XRefEnd >
X  >
X > # end of Para
X <Para 
X  <Unique 432299>
X  <PgfTag `refersTo'>
X  <ParaLine 
X   <XRef 
X    <XRefName `chunkref'>
X    <XRefSrcText `67133: chunk: Global variables'>
X    <XRefSrcFile `'>
X    <Unique 432297>
X   > # end of XRef
X   <Font 
X    <FTag `Emphasis'>
X   > # end of Font
X   <String `<Global variables\> , (4:, p. 4)'>
X   <Font 
X    <FTag `'>
X   > # end of Font
X   <XRefEnd >
X  >
X > # end of Para
X <Para 
X  <Unique 432303>
X  <PgfTag `refersTo'>
X  <ParaLine 
X   <XRef 
X    <XRefName `chunkref'>
X    <XRefSrcText `56554: chunk: Functions'>
X    <XRefSrcFile `'>
X    <Unique 432301>
X   > # end of XRef
X   <Font 
X    <FTag `Emphasis'>
X   > # end of Font
X   <String `<Functions\> , (23:, p. 8)'>
X   <Font 
X    <FTag `'>
X   > # end of Font
X   <XRefEnd >
X  >
X > # end of Para
X <Para 
X  <Unique 432307>
X  <PgfTag `refersTo'>
X  <ParaLine 
X   <XRef 
X    <XRefName `chunkref'>
X    <XRefSrcText `19525: chunk: Main Program'>
X    <XRefSrcFile `'>
X    <Unique 432305>
X   > # end of XRef
X   <Font 
X    <FTag `Emphasis'>
X   > # end of Font
X   <String `<Main Program\> , (5:, p. 4)'>
X   <Font 
X    <FTag `'>
X   > # end of Font
X   <XRefEnd >
X  >
X > # end of Para
X <Para 
X  <Unique 432308>
X  <PgfTag `Body'>
X  <ParaLine 
X   <String `We must include the standard I/O definitions, since we want to send formatted output to '>
X   <Font 
X    <FTag `code'>
X   > # end of Font
X   <String `stdout'>
X   <Font 
X    <FTag `'>
X   > # end of Font
X   <String ` and '>
X   <Font 
X    <FTag `code'>
X   > # end of Font
X   <String `stderr'>
X  >
X > # end of Para
X <Para 
X  <Unique 432309>
X  <PgfTag `code'>
X  <ParaLine 
X  >
X > # end of Para
X <Para 
X  <Unique 432311>
X  <PgfTag `chunk'>
X  <PgfNumString `2:\t'>
X  <ParaLine 
X   <Marker 
X    <MType 9>
X    <MText `81375: chunk: Header files to include'>
X    <MCurrPage 2>
X    <Unique 432310>
X   > # end of Marker
X   <String `Header files to include'>
X  >
X > # end of Para
X <Para 
X  <Unique 432312>
X  <PgfTag `code'>
X  <ParaLine 
X   <String `#include <stdio.h\>'>
X  >
X > # end of Para
X <Para 
X  <Unique 432313>
X  <PgfTag `code'>
X  <ParaLine 
X  >
X > # end of Para
X <Para 
X  <Unique 432315>
X  <PgfTag `chunk'>
X  <PgfNumString `3:\t'>
X  <ParaLine 
X   <Marker 
X    <MType 9>
X    <MText `52409: chunk: Definitions'>
X    <MCurrPage 2>
X    <Unique 432314>
X   > # end of Marker
X   <String `Definitions'>
X  >
X > # end of Para
X <Para 
X  <Unique 432316>
X  <PgfTag `code'>
X  <ParaLine 
X   <String `#define OK               0'>
X  >
X > # end of Para
X <Para 
X  <Unique 432317>
X  <PgfTag `code'>
X  <ParaLine 
X   <String `  /* status code for successful run */'>
X  >
X > # end of Para
X <Para 
X  <Unique 432318>
X  <PgfTag `code'>
X  <ParaLine 
X   <String `#define usage_error      1'>
X  >
X > # end of Para
X <Para 
X  <Unique 432319>
X  <PgfTag `code'>
X  <ParaLine 
X   <String `  /* status code for improper syntax */'>
X  >
X > # end of Para
X <Para 
X  <Unique 432320>
X  <PgfTag `code'>
X  <ParaLine 
X   <String `#define cannot_open_file 2'>
X  >
X > # end of Para
X <Para 
X  <Unique 432321>
X  <PgfTag `code'>
X  <ParaLine 
X   <String `  /* status code for file access error */'>
X  >
X > # end of Para
X <Para 
X  <Unique 432322>
X  <PgfTag `code'>
X  <ParaLine 
X  >
X > # end of Para
X <Para 
X  <Unique 432324>
X  <PgfTag `chunk'>
X  <PgfNumString `4:\t'>
X  <ParaLine 
X   <TextRectID 16>
X   <Marker 
X    <MType 9>
X    <MText `67133: chunk: Global variables'>
X    <MCurrPage 3>
X    <Unique 432323>
X   > # end of Marker
X   <String `Global variables'>
X  >
X > # end of Para
X <Para 
X  <Unique 432325>
X  <PgfTag `Body'>
X  <ParaLine 
X   <String `The '>
X   <Font 
X    <FTag `code'>
X   > # end of Font
X   <String `status'>
X   <Font 
X    <FTag `'>
X   > # end of Font
X   <String ` variable will tell the operating system if the run was successful or not, and '>
X   <Font 
X    <FTag `code'>
X   > # end of Font
X   <String `prog_name'>
X   <Font 
X    <FTag `'>
X   > # end of Font
X   <String ` is used '>
X  >
X  <ParaLine 
X   <String `in case there\xd5 s an error message to be printed.'>
X  >
X > # end of Para
X <Para 
X  <Unique 432326>
X  <PgfTag `Body'>
X  <ParaLine 
X  >
X > # end of Para
X <Para 
X  <Unique 432327>
X  <PgfTag `code'>
X  <ParaLine 
X   <String `int status = OK;'>
X  >
X > # end of Para
X <Para 
X  <Unique 432328>
X  <PgfTag `code'>
X  <ParaLine 
X   <String `  /* exit status of command, initially OK */'>
X  >
X > # end of Para
X <Para 
X  <Unique 432329>
X  <PgfTag `code'>
X  <ParaLine 
X   <String `char *prog_name;'>
X  >
X > # end of Para
X <Para 
X  <Unique 432330>
X  <PgfTag `code'>
X  <ParaLine 
X   <String `  /* who we are */'>
X  >
X > # end of Para
X <Para 
X  <Unique 432331>
X  <PgfTag `code'>
X  <ParaLine 
X  >
X > # end of Para
X <Para 
X  <Unique 432332>
X  <PgfTag `Body'>
X  <ParaLine 
X   <String `Now we come to the general layout of the '>
X   <Font 
X    <FTag `code'>
X   > # end of Font
X   <String `main'>
X   <Font 
X    <FTag `'>
X   > # end of Font
X   <String ` function.'>
X  >
X > # end of Para
X <Para 
X  <Unique 432333>
X  <PgfTag `code'>
X  <ParaLine 
X  >
X > # end of Para
X <Para 
X  <Unique 432335>
X  <PgfTag `chunk'>
X  <PgfNumString `5:\t'>
X  <ParaLine 
X   <Marker 
X    <MType 9>
X    <MText `19525: chunk: Main Program'>
X    <MCurrPage 3>
X    <Unique 432334>
X   > # end of Marker
X   <String `Main Program'>
X  >
X > # end of Para
X <Para 
X  <Unique 432336>
X  <PgfTag `code'>
X  <ParaLine 
X   <String `main(argc, argv)'>
X  >
X > # end of Para
X <Para 
X  <Unique 432337>
X  <PgfTag `code'>
X  <ParaLine 
X   <String ` '>
X   <Char Tab >
X   <String `int argc;'>
X  >
X > # end of Para
X <Para 
X  <Unique 432338>
X  <PgfTag `code'>
X  <ParaLine 
X   <Char Tab >
X   <String `/* number of arguments on UNIX command line */'>
X  >
X > # end of Para
X <Para 
X  <Unique 432339>
X  <PgfTag `code'>
X  <ParaLine 
X   <Char Tab >
X   <String `  char **argv;'>
X  >
X > # end of Para
X <Para 
X  <Unique 432340>
X  <PgfTag `code'>
X  <ParaLine 
X   <Char Tab >
X   <String ` /* the arguments, an array of strings */'>
X  >
X > # end of Para
X <Para 
X  <Unique 432341>
X  <PgfTag `code'>
X  <ParaLine 
X   <String `{'>
X  >
X > # end of Para
X <Para 
X  <Unique 432345>
X  <PgfTag `refersTo'>
X  <ParaLine 
X   <Char Tab >
X   <String ` '>
X   <XRef 
X    <XRefName `chunkref'>
X    <XRefSrcText `40463: chunk: Variables local to main'>
X    <XRefSrcFile `'>
X    <Unique 432343>
X   > # end of XRef
X   <Font 
X    <FTag `Emphasis'>
X   > # end of Font
X   <String `<Variables local to main\> , (6:, p. 4)'>
X   <Font 
X    <FTag `'>
X   > # end of Font
X   <XRefEnd >
X  >
X > # end of Para
X <Para 
X  <Unique 432346>
X  <PgfTag `code'>
X  <ParaLine 
X   <Char Tab >
X   <String ` prog_name = argv[0];'>
X  >
X > # end of Para
X <Para 
X  <Unique 432350>
X  <PgfTag `refersTo'>
X  <ParaLine 
X   <Char Tab >
X   <String ` '>
X   <XRef 
X    <XRefName `chunkref'>
X    <XRefSrcText `33923: chunk: Set up option selection'>
X    <XRefSrcFile `'>
X    <Unique 432348>
X   > # end of XRef
X   <Font 
X    <FTag `Emphasis'>
X   > # end of Font
X   <String `<Set up option selection\> , (7:, p. 4)'>
X   <Font 
X    <FTag `'>
X   > # end of Font
X   <XRefEnd >
X  >
X > # end of Para
X <Para 
X  <Unique 432354>
X  <PgfTag `refersTo'>
X  <ParaLine 
X   <Char Tab >
X   <String ` '>
X   <XRef 
X    <XRefName `chunkref'>
X    <XRefSrcText `34861: chunk: Process all the files'>
X    <XRefSrcFile `'>
X    <Unique 432352>
X   > # end of XRef
X   <Font 
X    <FTag `Emphasis'>
X   > # end of Font
X   <String `<Process all the files\> , (8:, p. 5)'>
X   <Font 
X    <FTag `'>
X   > # end of Font
X   <XRefEnd >
X  >
X > # end of Para
X <Para 
X  <Unique 432358>
X  <PgfTag `refersTo'>
X  <ParaLine 
X   <Char Tab >
X   <String ` '>
X   <XRef 
X    <XRefName `chunkref'>
X    <XRefSrcText `69252: chunk: Print the grand totals if there were multiple files'>
X    <XRefSrcFile `'>
X    <Unique 432356>
X   > # end of XRef
X   <Font 
X    <FTag `Emphasis'>
X   > # end of Font
X   <String `<Print the grand totals if there were multiple files\> , (21:, p. 8)'>
X   <Font 
X    <FTag `'>
X   > # end of Font
X   <XRefEnd >
X  >
X > # end of Para
X <Para 
X  <Unique 432359>
X  <PgfTag `code'>
X  <ParaLine 
X   <Char Tab >
X   <String ` exit(status);'>
X  >
X > # end of Para
X <Para 
X  <Unique 432360>
X  <PgfTag `code'>
X  <ParaLine 
X   <String `}'>
X  >
X > # end of Para
X <Para 
X  <Unique 432361>
X  <PgfTag `code'>
X  <ParaLine 
X  >
X > # end of Para
X <Para 
X  <Unique 432362>
X  <PgfTag `Body'>
X  <ParaLine 
X   <String `If the first argument begins with a \xd4 -\xd5 , the user is choosing the desired counts and specifying the order in '>
X  >
X  <ParaLine 
X   <String `which they should be displayed. Each selection is given by the initial character (lines, words, or charac'>
X   <Char SoftHyphen >
X  >
X  <ParaLine 
X   <String `ters). For example, \Q-cl\xd5  would cause just the number of characters and the number of lines to be printed, in '>
X  >
X  <ParaLine 
X   <String `that order. '>
X  >
X > # end of Para
X <Para 
X  <Unique 432363>
X  <PgfTag `Body'>
X  <ParaLine 
X   <String `We do not process this string now; we simply remember where it is. It will be used to control the formatting '>
X  >
X  <ParaLine 
X   <String `at output time.'>
X  >
X > # end of Para
X <Para 
X  <Unique 432365>
X  <PgfTag `chunk'>
X  <PgfNumString `6:\t'>
X  <ParaLine 
X   <Marker 
X    <MType 9>
X    <MText `40463: chunk: Variables local to main'>
X    <MCurrPage 3>
X    <Unique 432364>
X   > # end of Marker
X   <String `Variables local to '>
X   <Font 
X    <FTag `code'>
X   > # end of Font
X   <String `main'>
X   <Font 
X    <FTag `'>
X   > # end of Font
X   <Char Tab >
X  >
X > # end of Para
X <Para 
X  <Unique 432366>
X  <PgfTag `code'>
X  <ParaLine 
X   <String `int file_count;'>
X  >
X > # end of Para
X <Para 
X  <Unique 432367>
X  <PgfTag `code'>
X  <ParaLine 
X   <String `  /* how many files there are */'>
X  >
X > # end of Para
X <Para 
X  <Unique 432368>
X  <PgfTag `code'>
X  <ParaLine 
X   <String `char *which;'>
X  >
X > # end of Para
X <Para 
X  <Unique 432369>
X  <PgfTag `code'>
X  <ParaLine 
X   <String `  /* which counts to print */'>
X  >
X > # end of Para
X <Para 
X  <Unique 432370>
X  <PgfTag `code'>
X  <ParaLine 
X  >
X > # end of Para
X <Para 
X  <Unique 432372>
X  <PgfTag `chunk'>
X  <PgfNumString `7:\t'>
X  <ParaLine 
X   <Marker 
X    <MType 9>
X    <MText `33923: chunk: Set up option selection'>
X    <MCurrPage 3>
X    <Unique 432371>
X   > # end of Marker
X   <String `Set up option selection'>
X  >
X > # end of Para
X <Para 
X  <Unique 432373>
X  <PgfTag `code'>
X  <ParaLine 
X   <String `which = \xd2 lwc\xd3 ;'>
X  >
X > # end of Para
X <Para 
X  <Unique 432374>
X  <PgfTag `code'>
X  <ParaLine 
X   <String `  /* if no option is given, print 3 values */'>
X  >
X > # end of Para
X <Para 
X  <Unique 432375>
X  <PgfTag `code'>
X  <ParaLine 
X   <String `if (argc \> 1 && *argv[1] == \xd4 -\xd5 ) {'>
X  >
X > # end of Para
X <Para 
X  <Unique 432376>
X  <PgfTag `code'>
X  <ParaLine 
X   <Char Tab >
X   <String `which = argv[1] + 1;'>
X  >
X > # end of Para
X <Para 
X  <Unique 432377>
X  <PgfTag `code'>
X  <ParaLine 
X   <TextRectID 17>
X   <Char Tab >
X   <String `argc--;'>
X  >
X > # end of Para
X <Para 
X  <Unique 432378>
X  <PgfTag `code'>
X  <ParaLine 
X   <Char Tab >
X   <String `argv++;'>
X  >
X > # end of Para
X <Para 
X  <Unique 432379>
X  <PgfTag `code'>
X  <ParaLine 
X   <String `}'>
X  >
X > # end of Para
X <Para 
X  <Unique 432380>
X  <PgfTag `code'>
X  <ParaLine 
X   <String `file_count = argc - 1;'>
X  >
X > # end of Para
X <Para 
X  <Unique 432381>
X  <PgfTag `Body'>
X  <ParaLine 
X  >
X > # end of Para
X <Para 
X  <Unique 432382>
X  <PgfTag `Body'>
X  <ParaLine 
X   <String `Now we scan the remaining arguments and try to open a file, if possible. The file is processed and its sta'>
X   <Char SoftHyphen >
X  >
X  <ParaLine 
X   <String `tistics are given.'>
X  >
X > # end of Para
X <Para 
X  <Unique 432383>
X  <PgfTag `Body'>
X  <ParaLine 
X   <String `We use a do ... while loop because we should read from the standard input if no file name is given.'>
X  >
X > # end of Para
X <Para 
X  <Unique 432384>
X  <PgfTag `Body'>
X  <ParaLine 
X  >
X > # end of Para
X <Para 
X  <Unique 432386>
X  <PgfTag `chunk'>
X  <PgfNumString `8:\t'>
X  <ParaLine 
X   <Marker 
X    <MType 9>
X    <MText `34861: chunk: Process all the files'>
X    <MCurrPage 4>
X    <Unique 432385>
X   > # end of Marker
X   <String `Process all the files'>
X  >
X > # end of Para
X <Para 
X  <Unique 432387>
X  <PgfTag `code'>
X  <ParaLine 
X   <String `argc--;'>
X  >
X > # end of Para
X <Para 
X  <Unique 432388>
X  <PgfTag `code'>
X  <ParaLine 
X   <String `do {'>
X  >
X > # end of Para
X <Para 
X  <Unique 432392>
X  <PgfTag `refersTo'>
X  <ParaLine 
X   <String ` '>
X   <Char Tab >
X   <String ` '>
X   <XRef 
X    <XRefName `chunkref'>
X    <XRefSrcText `41015: chunk: If a file is given, try to open *(++argv); continue if unsuccessful'>
X    <XRefSrcFile `'>
X    <Unique 432390>
X   > # end of XRef
X   <Font 
X    <FTag `Emphasis'>
X   > # end of Font
X   <String `<If a file is given, try to open *(++argv); continue if unsuccessful\> , (11:, p. 5)'>
X   <Font 
X    <FTag `'>
X   > # end of Font
X   <XRefEnd >
X  >
X > # end of Para
X <Para 
X  <Unique 432396>
X  <PgfTag `refersTo'>
X  <ParaLine 
X   <Char Tab >
X   <String `  '>
X   <XRef 
X    <XRefName `chunkref'>
X    <XRefSrcText `60827: chunk: Initialize pointers and counters'>
X    <XRefSrcFile `'>
X    <Unique 432394>
X   > # end of XRef
X   <Font 
X    <FTag `Emphasis'>
X   > # end of Font
X   <String `<Initialize pointers and counters\> , (15:, p. 6)'>
X   <Font 
X    <FTag `'>
X   > # end of Font
X   <XRefEnd >
X  >
X > # end of Para
X <Para 
X  <Unique 432400>
X  <PgfTag `refersTo'>
X  <ParaLine 
X   <Char Tab >
X   <String `  '>
X   <XRef 
X    <XRefName `chunkref'>
X    <XRefSrcText `29900: chunk: Scan file'>
X    <XRefSrcFile `'>
X    <Unique 432398>
X   > # end of XRef
X   <Font 
X    <FTag `Emphasis'>
X   > # end of Font
X   <String `<Scan file\> , (17:, p. 6)'>
X   <Font 
X    <FTag `'>
X   > # end of Font
X   <XRefEnd >
X  >
X > # end of Para
X <Para 
X  <Unique 432404>
X  <PgfTag `refersTo'>
X  <ParaLine 
X   <Char Tab >
X   <String `  '>
X   <XRef 
X    <XRefName `chunkref'>
X    <XRefSrcText `53529: chunk: Write statistics for file'>
X    <XRefSrcFile `'>
X    <Unique 432402>
X   > # end of XRef
X   <Font 
X    <FTag `Emphasis'>
X   > # end of Font
X   <String `<Write statistics for file\> , (19:, p. 7)'>
X   <Font 
X    <FTag `'>
X   > # end of Font
X   <XRefEnd >
X  >
X > # end of Para
X <Para 
X  <Unique 432408>
X  <PgfTag `refersTo'>
X  <ParaLine 
X   <String ` '>
X   <Char Tab >
X   <String ` '>
X   <XRef 
X    <XRefName `chunkref'>
X    <XRefSrcText `35599: chunk: Close file'>
X    <XRefSrcFile `'>
X    <Unique 432406>
X   > # end of XRef
X   <Font 
X    <FTag `Emphasis'>
X   > # end of Font
X   <String `<Close file\> , (12:, p. 6)'>
X   <Font 
X    <FTag `'>
X   > # end of Font
X   <XRefEnd >
X  >
X > # end of Para
X <Para 
X  <Unique 432412>
X  <PgfTag `refersTo'>
X  <ParaLine 
X   <Char Tab >
X   <String `  '>
X   <XRef 
X    <XRefName `chunkref'>
X    <XRefSrcText `14885: chunk: Update grand totals'>
X    <XRefSrcFile `'>
X    <Unique 432410>
X   > # end of XRef
X   <Font 
X    <FTag `Emphasis'>
X   > # end of Font
X   <String `<Update grand totals\> , (20:, p. 7)'>
X   <Font 
X    <FTag `'>
X   > # end of Font
X   <XRefEnd >
X  >
X > # end of Para
X <Para 
X  <Unique 432413>
X  <PgfTag `code'>
X  <ParaLine 
X   <String `   '>
X   <Char Tab >
X   <String ` /* even if there is only one file */'>
X  >
X > # end of Para
X <Para 
X  <Unique 432414>
X  <PgfTag `code'>
X  <ParaLine 
X   <String `} while (--argc \> 0);'>
X  >
X > # end of Para
X <Para 
X  <Unique 432415>
X  <PgfTag `code'>
X  <ParaLine 
X  >
X > # end of Para
X <Para 
X  <Unique 432416>
X  <PgfTag `Body'>
X  <ParaLine 
X   <String `Here\xd5 s the code to open the file.  A special trick allows us to handle input from '>
X   <Font 
X    <FTag `code'>
X   > # end of Font
X   <String `stdin'>
X   <Font 
X    <FTag `'>
X   > # end of Font
X   <String ` when no name is '>
X  >
X  <ParaLine 
X   <String `given.'>
X  >
X > # end of Para
X <Para 
X  <Unique 432417>
X  <PgfTag `Body'>
X  <ParaLine 
X   <String `Recall that the file descriptor to '>
X   <Font 
X    <FTag `code'>
X   > # end of Font
X   <String `stdin'>
X   <Font 
X    <FTag `'>
X   > # end of Font
X   <String ` is 0; that\xd5 s what we use as the default initial value.'>
X  >
X > # end of Para
X <Para 
X  <Unique 432418>
X  <PgfTag `Body'>
X  <ParaLine 
X  >
X > # end of Para
X <Para 
X  <Unique 432419>
X  <PgfTag `chunk'>
X  <PgfNumString `9:\t'>
X  <ParaLine 
X   <String `Variables local to main'>
X  >
X > # end of Para
X <Para 
X  <Unique 432420>
X  <PgfTag `code'>
X  <ParaLine 
X   <String `int fd = 0;'>
X  >
X > # end of Para
X <Para 
X  <Unique 432421>
X  <PgfTag `code'>
X  <ParaLine 
X   <String `  /* file descriptor, initialized to stdin */'>
X  >
X > # end of Para
X <Para 
X  <Unique 432422>
X  <PgfTag `code'>
X  <ParaLine 
X  >
X > # end of Para
X <Para 
X  <Unique 432423>
X  <PgfTag `chunk'>
X  <PgfNumString `10:\t'>
X  <ParaLine 
X   <String `Definitions'>
X  >
X > # end of Para
X <Para 
X  <Unique 432424>
X  <PgfTag `code'>
X  <ParaLine 
X   <String `#define READ_ONLY 0'>
X  >
X > # end of Para
X <Para 
X  <Unique 432425>
X  <PgfTag `code'>
X  <ParaLine 
X   <String `  /* read access code for system open */'>
X  >
X > # end of Para
X <Para 
X  <Unique 432426>
X  <PgfTag `code'>
X  <ParaLine 
X  >
X > # end of Para
X <Para 
X  <Unique 432428>
X  <PgfTag `chunk'>
X  <PgfNumString `11:\t'>
X  <ParaLine 
X   <Marker 
X    <MType 9>
X    <MText `41015: chunk: If a file is given, try to open *(++argv); continue if unsuccessful'>
X    <MCurrPage 4>
X    <Unique 432427>
X   > # end of Marker
X   <String `If a file is given, try to open '>
X   <Font 
X    <FTag `code'>
X   > # end of Font
X   <String `*(++argv)'>
X   <Font 
X    <FTag `'>
X   > # end of Font
X   <String `; '>
X   <Font 
X    <FTag `code'>
X   > # end of Font
X   <String `continue'>
X   <Font 
X    <FTag `'>
X   > # end of Font
X   <String ` if unsuccessful'>
X  >
X > # end of Para
X <Para 
X  <Unique 432429>
X  <PgfTag `code'>
X  <ParaLine 
X   <String `if (file_count \> 0 '>
X   <Char Tab >
X   <Char Tab >
X   <String `&& (fd = open(*(++argv), READ_ONLY)) < 0) {'>
X  >
X > # end of Para
X <Para 
X  <Unique 432430>
X  <PgfTag `code'>
X  <ParaLine 
X   <Char Tab >
X   <String `fprintf(stderr,  \xd2 %s: cannot open file %s\\n\xd3 ,    prog_name, *argv);'>
X  >
X > # end of Para
X <Para 
X  <Unique 432431>
X  <PgfTag `code'>
X  <ParaLine 
X   <Char Tab >
X   <String ` status |= cannot_open_file;'>
X  >
X > # end of Para
X <Para 
X  <Unique 432432>
X  <PgfTag `code'>
X  <ParaLine 
X   <Char Tab >
X   <String `file_count--;'>
X  >
X > # end of Para
X <Para 
X  <Unique 432433>
X  <PgfTag `code'>
X  <ParaLine 
X   <Char Tab >
X   <String `continue;'>
X  >
X > # end of Para
X <Para 
X  <Unique 432434>
X  <PgfTag `code'>
X  <ParaLine 
X   <String `}'>
X  >
X > # end of Para
X <Para 
X  <Unique 432435>
X  <PgfTag `code'>
X  <ParaLine 
X  >
X > # end of Para
X <Para 
X  <Unique 432437>
X  <PgfTag `chunk'>
X  <PgfNumString `12:\t'>
X  <ParaLine 
X   <TextRectID 18>
X   <Marker 
X    <MType 9>
X    <MText `35599: chunk: Close file'>
X    <MCurrPage 5>
X    <Unique 432436>
X   > # end of Marker
X   <String `Close file'>
X  >
X > # end of Para
X <Para 
X  <Unique 432438>
X  <PgfTag `code'>
X  <ParaLine 
X   <String `close(fd);'>
X  >
X > # end of Para
X <Para 
X  <Unique 432439>
X  <PgfTag `code'>
X  <ParaLine 
X  >
X > # end of Para
X <Para 
X  <Unique 432440>
X  <PgfTag `Body'>
X  <ParaLine 
X   <String `We will do some homemade buffering in order to speed things up: Characters will be read into the buffer '>
X  >
X  <ParaLine 
X   <String `array before we process them. To do this we set up appropriate pointers and counters.'>
X  >
X > # end of Para
X <Para 
X  <Unique 432441>
X  <PgfTag `Body'>
X  <ParaLine 
X  >
X > # end of Para
X <Para 
X  <Unique 432442>
X  <PgfTag `chunk'>
X  <PgfNumString `13:\t'>
X  <ParaLine 
X   <String `Definitions'>
X  >
X > # end of Para
X <Para 
X  <Unique 432443>
X  <PgfTag `code'>
X  <ParaLine 
X   <String `#define buf_size BUFSIZ'>
X  >
X > # end of Para
X <Para 
X  <Unique 432444>
X  <PgfTag `code'>
X  <ParaLine 
X   <String `  /* stdio.h BUFSIZ chosen for efficiency */'>
X  >
X > # end of Para
X <Para 
X  <Unique 432445>
X  <PgfTag `chunk'>
X  <PgfNumString `14:\t'>
X  <ParaLine 
X   <String `Variables local to '>
X   <Font 
X    <FTag `code'>
X   > # end of Font
X   <String `main'>
X  >
X > # end of Para
X <Para 
X  <Unique 432446>
X  <PgfTag `code'>
X  <ParaLine 
X   <String `char buffer[buf_size];'>
X  >
X > # end of Para
X <Para 
X  <Unique 432447>
X  <PgfTag `code'>
X  <ParaLine 
X   <String `  /* we read the input into this array */'>
X  >
X > # end of Para
X <Para 
X  <Unique 432448>
X  <PgfTag `code'>
X  <ParaLine 
X   <String `register char *ptr;'>
X  >
X > # end of Para
X <Para 
X  <Unique 432449>
X  <PgfTag `code'>
X  <ParaLine 
X   <String `  /* first unprocessed character in buffer */'>
X  >
X > # end of Para
X <Para 
X  <Unique 432450>
X  <PgfTag `code'>
X  <ParaLine 
X   <String `register char *buf_end;'>
X  >
X > # end of Para
X <Para 
X  <Unique 432451>
X  <PgfTag `code'>
X  <ParaLine 
X   <String `  /* the first unused position in buffer */'>
X  >
X > # end of Para
X <Para 
X  <Unique 432452>
X  <PgfTag `code'>
X  <ParaLine 
X   <String `register int c;'>
X  >
X > # end of Para
X <Para 
X  <Unique 432453>
X  <PgfTag `code'>
X  <ParaLine 
X   <String `  /* current char, or # of chars just read */'>
X  >
X > # end of Para
X <Para 
X  <Unique 432454>
X  <PgfTag `code'>
X  <ParaLine 
X   <String `int in_word;'>
X  >
X > # end of Para
X <Para 
X  <Unique 432455>
X  <PgfTag `code'>
X  <ParaLine 
X   <String `  /* are we within a word? */'>
X  >
X > # end of Para
X <Para 
X  <Unique 432456>
X  <PgfTag `code'>
X  <ParaLine 
X   <String `long word_count, line_count, char_count;'>
X  >
X > # end of Para
X <Para 
X  <Unique 432457>
X  <PgfTag `code'>
X  <ParaLine 
X   <String `  /* # of words, lines, and chars so far */'>
X  >
X > # end of Para
X <Para 
X  <Unique 432458>
X  <PgfTag `code'>
X  <ParaLine 
X  >
X > # end of Para
X <Para 
X  <Unique 432460>
X  <PgfTag `chunk'>
X  <PgfNumString `15:\t'>
X  <ParaLine 
X   <Marker 
X    <MType 9>
X    <MText `60827: chunk: Initialize pointers and counters'>
X    <MCurrPage 5>
X    <Unique 432459>
X   > # end of Marker
X   <String `Initialize pointers and counters'>
X  >
X > # end of Para
X <Para 
X  <Unique 432461>
X  <PgfTag `code'>
X  <ParaLine 
X   <String `ptr = buf_end = buffer;'>
X  >
X > # end of Para
X <Para 
X  <Unique 432462>
X  <PgfTag `code'>
X  <ParaLine 
X   <String `line_count = word_count = char_count = 0;'>
X  >
X > # end of Para
X <Para 
X  <Unique 432463>
X  <PgfTag `code'>
X  <ParaLine 
X   <String `in_word = 0;'>
X  >
X > # end of Para
X <Para 
X  <Unique 432464>
X  <PgfTag `code'>
X  <ParaLine 
X  >
X > # end of Para
X <Para 
X  <Unique 432465>
X  <PgfTag `Body'>
X  <ParaLine 
X   <String `The grand totals must be initialized to zero at the beginning of the program. If we made these variables '>
X  >
X  <ParaLine 
X   <String `local to '>
X   <Font 
X    <FTag `code'>
X   > # end of Font
X   <String `main'>
X   <Font 
X    <FTag `'>
X   > # end of Font
X   <String `, we would have to do this initialization explicitly; however, C\xd5 s globals are automatically '>
X  >
X  <ParaLine 
X   <String `zeroed. (Or rather, \Q\Qstatically zeroed.\xd5 \xd5 )  (Get it?)'>
X  >
X > # end of Para
X <Para 
X  <Unique 432466>
X  <PgfTag `chunk'>
X  <PgfNumString `16:\t'>
X  <ParaLine 
X   <String `Global variables'>
X  >
X > # end of Para
X <Para 
X  <Unique 432467>
X  <PgfTag `code'>
X  <ParaLine 
X   <String `long tot_word_count, tot_line_count, '>
X  >
X > # end of Para
X <Para 
X  <Unique 432468>
X  <PgfTag `code'>
X  <ParaLine 
X   <String `     tot_char_count;'>
X  >
X > # end of Para
X <Para 
X  <Unique 432469>
X  <PgfTag `code'>
X  <ParaLine 
X   <String `  /* total number of words, lines, chars */'>
X  >
X > # end of Para
X <Para 
X  <Unique 432471>
X  <PgfTag `chunk'>
X  <PgfNumString `17:\t'>
X  <ParaLine 
X   <Marker 
X    <MType 9>
X    <MText `29900: chunk: Scan file'>
X    <MCurrPage 5>
X    <Unique 432470>
X   > # end of Marker
X   <String `Scan file'>
X  >
X > # end of Para
X <Para 
X  <Unique 432472>
X  <PgfTag `Body'>
X  <ParaLine 
X   <String `This chunk, which does the counting, that is '>
X   <Font 
X    <FTag `code'>
X   > # end of Font
X   <String `wc'>
X   <Font 
X    <FTag `'>
X   > # end of Font
X   <String `\xd5 s '>
X   <Font 
X    <FTag `'>
X    <FAngle `Oblique'>
X    <FPostScriptName `Helvetica-Oblique'>
X   > # end of Font
X   <String `raison d\xd5 etre'>
X   <Font 
X    <FTag `'>
X   > # end of Font
X   <String `, was actually one of the simplest to write. '>
X  >
X  <ParaLine 
X   <String `We look at each character and change state if it begins or ends a word.'>
X  >
X > # end of Para
X <Para 
X  <Unique 432473>
X  <PgfTag `Body'>
X  <ParaLine 
X  >
X > # end of Para
X <Para 
X  <Unique 432474>
X  <PgfTag `code'>
X  <ParaLine 
X   <String `while (1) {'>
X  >
X > # end of Para
X <Para 
X  <Unique 432478>
X  <PgfTag `refersTo'>
X  <ParaLine 
X   <Char Tab >
X   <String ` '>
X   <XRef 
X    <XRefName `chunkref'>
X    <XRefSrcText `51742: chunk: Fill buffer if it is empty; break at end of file'>
X    <XRefSrcFile `'>
X    <Unique 432476>
X   > # end of XRef
X   <Font 
X    <FTag `Emphasis'>
X   > # end of Font
X   <String `<Fill buffer if it is empty; break at end of file\> , (18:, p. 7)'>
X   <Font 
X    <FTag `'>
X   > # end of Font
X   <XRefEnd >
X  >
X > # end of Para
X <Para 
X  <Unique 432479>
X  <PgfTag `code'>
X  <ParaLine 
X   <TextRectID 19>
X   <Char Tab >
X   <String ` c = *ptr++;'>
X  >
X > # end of Para
X <Para 
X  <Unique 432480>
X  <PgfTag `code'>
X  <ParaLine 
X   <Char Tab >
X   <String ` if (c \> \xd4  \xd4  && c < 0177) {'>
X  >
X > # end of Para
X <Para 
X  <Unique 432481>
X  <PgfTag `code'>
X  <ParaLine 
X   <Char Tab >
X   <String ` '>
X   <Char Tab >
X   <String `/* visible ASCII codes */'>
X  >
X > # end of Para
X <Para 
X  <Unique 432482>
X  <PgfTag `code'>
X  <ParaLine 
X   <Char Tab >
X   <Char Tab >
X   <String ` if (!in_word) {'>
X  >
X > # end of Para
X <Para 
X  <Unique 432483>
X  <PgfTag `code'>
X  <ParaLine 
X   <Char Tab >
X   <Char Tab >
X   <Char Tab >
X   <String ` word_count++;'>
X  >
X > # end of Para
X <Para 
X  <Unique 432484>
X  <PgfTag `code'>
X  <ParaLine 
X   <Char Tab >
X   <Char Tab >
X   <Char Tab >
X   <String `in_word = 1;'>
X  >
X > # end of Para
X <Para 
X  <Unique 432485>
X  <PgfTag `code'>
X  <ParaLine 
X   <Char Tab >
X   <Char Tab >
X   <String `}'>
X  >
X > # end of Para
X <Para 
X  <Unique 432486>
X  <PgfTag `code'>
X  <ParaLine 
X   <Char Tab >
X   <Char Tab >
X   <String `continue;'>
X  >
X > # end of Para
X <Para 
X  <Unique 432487>
X  <PgfTag `code'>
X  <ParaLine 
X   <Char Tab >
X   <String `}'>
X  >
X > # end of Para
X <Para 
X  <Unique 432488>
X  <PgfTag `code'>
X  <ParaLine 
X   <Char Tab >
X   <String `if (c == \xd4 \\n\xd5 ) line_count++;'>
X  >
X > # end of Para
X <Para 
X  <Unique 432489>
X  <PgfTag `code'>
X  <ParaLine 
X   <Char Tab >
X   <String ` else if (c != \xd4  \xd4  && c != \xd4 \\t\xd5 ) continue;'>
X  >
X > # end of Para
X <Para 
X  <Unique 432490>
X  <PgfTag `code'>
X  <ParaLine 
X   <Char Tab >
X   <String ` in_word = 0;'>
X  >
X > # end of Para
X <Para 
X  <Unique 432491>
X  <PgfTag `code'>
X  <ParaLine 
X   <Char Tab >
X   <String `/* c is newline, space, or tab */'>
X  >
X > # end of Para
X <Para 
X  <Unique 432492>
X  <PgfTag `code'>
X  <ParaLine 
X   <String `}'>
X  >
X > # end of Para
X <Para 
X  <Unique 432493>
X  <PgfTag `code'>
X  <ParaLine 
X  >
X > # end of Para
X <Para 
X  <Unique 432494>
X  <PgfTag `Body'>
X  <ParaLine 
X   <String `Buffered I/O allows us to count the number of characters almost for free.'>
X  >
X > # end of Para
X <Para 
X  <Unique 432496>
X  <PgfTag `chunk'>
X  <PgfNumString `18:\t'>
X  <ParaLine 
X   <Marker 
X    <MType 9>
X    <MText `51742: chunk: Fill buffer if it is empty; break at end of file'>
X    <MCurrPage 6>
X    <Unique 432495>
X   > # end of Marker
X   <String `Fill '>
X   <Font 
X    <FTag `code'>
X   > # end of Font
X   <String `buffer'>
X   <Font 
X    <FTag `'>
X   > # end of Font
X   <String ` if it is empty; '>
X   <Font 
X    <FTag `code'>
X   > # end of Font
X   <String `break'>
X   <Font 
X    <FTag `'>
X   > # end of Font
X   <String ` at end of file'>
X  >
X > # end of Para
X <Para 
X  <Unique 432497>
X  <PgfTag `code'>
X  <ParaLine 
X   <String `if (ptr \>= buf_end) {'>
X  >
X > # end of Para
X <Para 
X  <Unique 432498>
X  <PgfTag `code'>
X  <ParaLine 
X   <Char Tab >
X   <String `ptr = buffer;'>
X  >
X > # end of Para
X <Para 
X  <Unique 432499>
X  <PgfTag `code'>
X  <ParaLine 
X   <Char Tab >
X   <String `c = read(fd, ptr, buf_size);'>
X  >
X > # end of Para
X <Para 
X  <Unique 432500>
X  <PgfTag `code'>
X  <ParaLine 
X   <Char Tab >
X   <String `if (c <= 0) break;'>
X  >
X > # end of Para
X <Para 
X  <Unique 432501>
X  <PgfTag `code'>
X  <ParaLine 
X   <Char Tab >
X   <String `char_count += c;'>
X  >
X > # end of Para
X <Para 
X  <Unique 432502>
X  <PgfTag `code'>
X  <ParaLine 
X   <Char Tab >
X   <String `buf_end = buffer + c;'>
X  >
X > # end of Para
X <Para 
X  <Unique 432503>
X  <PgfTag `code'>
X  <ParaLine 
X   <String `}'>
X  >
X > # end of Para
X <Para 
X  <Unique 432504>
X  <PgfTag `code'>
X  <ParaLine 
X  >
X > # end of Para
X <Para 
X  <Unique 432505>
X  <PgfTag `Body'>
X  <ParaLine 
X   <String `It\xd5 s convenient to output the statistics by defining a new function '>
X   <Font 
X    <FTag `code'>
X   > # end of Font
X   <String `wc_print'>
X   <Font 
X    <FTag `'>
X   > # end of Font
X   <String `; then the same function can be '>
X  >
X  <ParaLine 
X   <String `used for the totals. Additionally we must decide here if we know the name of the file we have processed or '>
X  >
X  <ParaLine 
X   <String `if it was just stdin.'>
X  >
X > # end of Para
X <Para 
X  <Unique 432507>
X  <PgfTag `chunk'>
X  <PgfNumString `19:\t'>
X  <ParaLine 
X   <Marker 
X    <MType 9>
X    <MText `53529: chunk: Write statistics for file'>
X    <MCurrPage 6>
X    <Unique 432506>
X   > # end of Marker
X   <String `Write statistics for file'>
X  >
X > # end of Para
X <Para 
X  <Unique 432508>
X  <PgfTag `code'>
X  <ParaLine 
X   <String `wc_print(which, char_count, word_count, '>
X  >
X > # end of Para
X <Para 
X  <Unique 432509>
X  <PgfTag `code'>
X  <ParaLine 
X   <String `         line_count);'>
X  >
X > # end of Para
X <Para 
X  <Unique 432510>
X  <PgfTag `code'>
X  <ParaLine 
X   <String `if (file_count)'>
X  >
X > # end of Para
X <Para 
X  <Unique 432511>
X  <PgfTag `code'>
X  <ParaLine 
X   <String `  printf(\xd2  %s\\n\xd3 , *argv); /* not stdin */'>
X  >
X > # end of Para
X <Para 
X  <Unique 432512>
X  <PgfTag `code'>
X  <ParaLine 
X   <String `else '>
X  >
X > # end of Para
X <Para 
X  <Unique 432513>
X  <PgfTag `code'>
X  <ParaLine 
X   <String `  printf(\xd2 \\n\xd3 );           /* stdin */'>
X  >
X > # end of Para
X <Para 
X  <Unique 432514>
X  <PgfTag `code'>
X  <ParaLine 
X  >
X > # end of Para
X <Para 
X  <Unique 432516>
X  <PgfTag `chunk'>
X  <PgfNumString `20:\t'>
X  <ParaLine 
X   <Marker 
X    <MType 9>
X    <MText `14885: chunk: Update grand totals'>
X    <MCurrPage 6>
X    <Unique 432515>
X   > # end of Marker
X   <String `Update grand totals'>
X  >
X > # end of Para
X <Para 
X  <Unique 432517>
X  <PgfTag `code'>
X  <ParaLine 
X   <String `tot_line_count += line_count;'>
X  >
X > # end of Para
X <Para 
X  <Unique 432518>
X  <PgfTag `code'>
X  <ParaLine 
X   <String `tot_word_count += word_count;'>
X  >
X > # end of Para
X <Para 
X  <Unique 432519>
X  <PgfTag `code'>
X  <ParaLine 
X   <String `tot_char_count += char_count;'>
X  >
X > # end of Para
X <Para 
X  <Unique 432520>
X  <PgfTag `code'>
X  <ParaLine 
X  >
X > # end of Para
X <Para 
X  <Unique 432521>
X  <PgfTag `Body'>
X  <ParaLine 
X  >
X > # end of Para
X <Para 
X  <Unique 432522>
X  <PgfTag `Body'>
X  <ParaLine 
X   <String `We might as well improve a bit on '>
X   <Font 
X    <FTag `code'>
X   > # end of Font
X   <String `Unix'>
X   <Font 
X    <FTag `'>
X   > # end of Font
X   <String `\xd5 s '>
X   <Font 
X    <FTag `code'>
X   > # end of Font
X   <String `wc'>
X   <Font 
X    <FTag `'>
X   > # end of Font
X   <String ` by displaying the number of files too.'>
X  >
X > # end of Para
X <Para 
X  <Unique 432524>
X  <PgfTag `chunk'>
X  <PgfNumString `21:\t'>
X  <ParaLine 
X   <TextRectID 20>
X   <Marker 
X    <MType 9>
X    <MText `69252: chunk: Print the grand totals if there were multiple files'>
X    <MCurrPage 7>
X    <Unique 432523>
X   > # end of Marker
X   <String `Print the grand totals if there were multiple files'>
X  >
X > # end of Para
X <Para 
X  <Unique 432525>
X  <PgfTag `code'>
X  <ParaLine 
X   <String `if (file_count \> 1) {'>
X  >
X > # end of Para
X <Para 
X  <Unique 432526>
X  <PgfTag `code'>
X  <ParaLine 
X   <Char Tab >
X   <String `wc_print(which, tot_char_count,  tot_word_count, tot_line_count);'>
X  >
X > # end of Para
X <Para 
X  <Unique 432527>
X  <PgfTag `code'>
X  <ParaLine 
X   <Char Tab >
X   <String `printf (\xd2  total in %d files\\n\xd3 , file_count);'>
X  >
X > # end of Para
X <Para 
X  <Unique 432528>
X  <PgfTag `code'>
X  <ParaLine 
X   <String `}'>
X  >
X > # end of Para
X <Para 
X  <Unique 432529>
X  <PgfTag `code'>
X  <ParaLine 
X  >
X > # end of Para
X <Para 
X  <Unique 432530>
X  <PgfTag `Body'>
X  <ParaLine 
X   <String `Here now is the function that prints the values according to the specified options. The calling routine is sup'>
X   <Char SoftHyphen >
X  >
X  <ParaLine 
X   <String `posed to supply a newline. If an invalid option character is found we inform the user about proper usage of '>
X  >
X  <ParaLine 
X   <String `the command. Counts are printed in 8-digit fields so that they will line up in columns.'>
X  >
X > # end of Para
X <Para 
X  <Unique 432531>
X  <PgfTag `chunk'>
X  <PgfNumString `22:\t'>
X  <ParaLine 
X   <String `Definitions'>
X  >
X > # end of Para
X <Para 
X  <Unique 432532>
X  <PgfTag `code'>
X  <ParaLine 
X   <String `#define print_count(n) printf(\xd2 %8ld\xd3 , n)'>
X  >
X > # end of Para
X <Para 
X  <Unique 432534>
X  <PgfTag `chunk'>
X  <PgfNumString `23:\t'>
X  <ParaLine 
X   <Marker 
X    <MType 9>
X    <MText `56554: chunk: Functions'>
X    <MCurrPage 7>
X    <Unique 432533>
X   > # end of Marker
X   <String `Functions'>
X  >
X > # end of Para
X <Para 
X  <Unique 432535>
X  <PgfTag `code'>
X  <ParaLine 
X   <String `wc_print (which, char_count, word_count, line_count)'>
X  >
X > # end of Para
X <Para 
X  <Unique 432536>
X  <PgfTag `code'>
X  <ParaLine 
X   <Char Tab >
X   <String `char *which;  /* which counts to print */'>
X  >
X > # end of Para
X <Para 
X  <Unique 432537>
X  <PgfTag `code'>
X  <ParaLine 
X   <Char Tab >
X   <String `long char_count, word_count, line_count;'>
X  >
X > # end of Para
X <Para 
X  <Unique 432538>
X  <PgfTag `code'>
X  <ParaLine 
X   <Char Tab >
X   <String ` /* given totals */'>
X  >
X > # end of Para
X <Para 
X  <Unique 432539>
X  <PgfTag `code'>
X  <ParaLine 
X   <String `{'>
X  >
X > # end of Para
X <Para 
X  <Unique 432540>
X  <PgfTag `code'>
X  <ParaLine 
X   <Char Tab >
X   <String `while (*which)'>
X  >
X > # end of Para
X <Para 
X  <Unique 432541>
X  <PgfTag `code'>
X  <ParaLine 
X   <Char Tab >
X   <Char Tab >
X   <String `switch (*which++) {'>
X  >
X > # end of Para
X <Para 
X  <Unique 432542>
X  <PgfTag `code'>
X  <ParaLine 
X   <Char Tab >
X   <Char Tab >
X   <Char Tab >
X   <String `case \xd4 l\xd5 : print_count(line_count);'>
X  >
X > # end of Para
X <Para 
X  <Unique 432543>
X  <PgfTag `code'>
X  <ParaLine 
X   <Char Tab >
X   <Char Tab >
X   <Char Tab >
X   <Char Tab >
X   <String `break;'>
X  >
X > # end of Para
X <Para 
X  <Unique 432544>
X  <PgfTag `code'>
X  <ParaLine 
X   <Char Tab >
X   <Char Tab >
X   <Char Tab >
X   <String `case \xd4 w\xd5 : print_count(word_count);'>
X  >
X > # end of Para
X <Para 
X  <Unique 432545>
X  <PgfTag `code'>
X  <ParaLine 
X   <Char Tab >
X   <Char Tab >
X   <Char Tab >
X   <Char Tab >
X   <String `break;'>
X   <Char Tab >
X  >
X > # end of Para
X <Para 
X  <Unique 432546>
X  <PgfTag `code'>
X  <ParaLine 
X   <Char Tab >
X   <Char Tab >
X   <Char Tab >
X   <String `case \xd4 c\xd5 : print_count(char_count);'>
X  >
X > # end of Para
X <Para 
X  <Unique 432547>
X  <PgfTag `code'>
X  <ParaLine 
X   <Char Tab >
X   <Char Tab >
X   <Char Tab >
X   <Char Tab >
X   <String `break;'>
X  >
X > # end of Para
X <Para 
X  <Unique 432548>
X  <PgfTag `code'>
X  <ParaLine 
X   <Char Tab >
X   <Char Tab >
X   <Char Tab >
X   <String `default:'>
X  >
X > # end of Para
X <Para 
X  <Unique 432549>
X  <PgfTag `code'>
X  <ParaLine 
X   <Char Tab >
X   <Char Tab >
X   <Char Tab >
X   <Char Tab >
X   <String `if ((status & usage_error) == 0) {'>
X  >
X > # end of Para
X <Para 
X  <Unique 432550>
X  <PgfTag `code'>
X  <ParaLine 
X   <Char Tab >
X   <Char Tab >
X   <Char Tab >
X   <Char Tab >
X   <Char Tab >
X   <String `fprintf(stderr,'>
X  >
X > # end of Para
X <Para 
X  <Unique 432551>
X  <PgfTag `code'>
X  <ParaLine 
X   <Char Tab >
X   <Char Tab >
X   <Char Tab >
X   <Char Tab >
X   <Char Tab >
X   <Char Tab >
X   <String `\xd2 Usage: %s [-lwc] [filename ...]\\n\xd3 , '>
X   <Char Tab >
X   <Char Tab >
X   <Char Tab >
X   <Char Tab >
X   <Char Tab >
X   <Char Tab >
X   <String `prog_name);'>
X  >
X > # end of Para
X <Para 
X  <Unique 432552>
X  <PgfTag `code'>
X  <ParaLine 
X   <Char Tab >
X   <Char Tab >
X   <Char Tab >
X   <Char Tab >
X   <Char Tab >
X   <String `usage_error;'>
X  >
X > # end of Para
X <Para 
X  <Unique 432553>
X  <PgfTag `code'>
X  <ParaLine 
X   <Char Tab >
X   <Char Tab >
X   <Char Tab >
X   <Char Tab >
X   <String `}'>
X  >
X > # end of Para
X <Para 
X  <Unique 432554>
X  <PgfTag `code'>
X  <ParaLine 
X   <String `    '>
X   <Char Tab >
X   <Char Tab >
X   <String `}'>
X  >
X > # end of Para
X <Para 
X  <Unique 432555>
X  <PgfTag `code'>
X  <ParaLine 
X   <String `}'>
X  >
X > # end of Para
X <Para 
X  <Unique 432556>
X  <PgfTag `Body'>
X  <ParaLine 
X  >
X > # end of Para
X <Para 
X  <Unique 432557>
X  <PgfTag `Body'>
X  <ParaLine 
X   <String `Incidentally, a test of this program against the system '>
X   <Font 
X    <FTag `code'>
X   > # end of Font
X   <String `wc'>
X   <Font 
X    <FTag `'>
X   > # end of Font
X   <String ` command on a SPARCstation showed that the '>
X  >
X  <ParaLine 
X   <String `\Q\Qofficial\xd5 \xd5  '>
X   <Font 
X    <FTag `code'>
X   > # end of Font
X   <String `wc'>
X   <Font 
X    <FTag `'>
X   > # end of Font
X   <String ` was slightly slower. Furthermore, although that '>
X   <Font 
X    <FTag `code'>
X   > # end of Font
X   <String `wc'>
X   <Font 
X    <FTag `'>
X   > # end of Font
X   <String ` gave an appropriate error message for '>
X  >
X  <ParaLine 
X   <String `the options \Q'>
X   <Font 
X    <FTag `code'>
X   > # end of Font
X   <String `abc'>
X   <Font 
X    <FTag `'>
X   > # end of Font
X   <String `\xd5 , it made no complaints about the options \Qabc\xd5 ! '>
X  >
X > # end of Para
X <Para 
X  <Unique 432558>
X  <PgfTag `Body'>
X  <ParaLine 
X   <String `Dare we suggest that the system routine might have been better if its programmer had used a more literate '>
X  >
X  <ParaLine 
X   <String `approach?'>
X  >
X > # end of Para
X <Para 
X  <Unique 432559>
X  <PgfTag `Body'>
X  <ParaLine 
X  >
X > # end of Para
X <Para 
X  <Unique 432560>
X  <PgfTag `Heading1'>
X  <ParaLine 
X   <TextRectID 21>
X   <String `Appendix B: '>
X   <Font 
X    <FTag `code'>
X   > # end of Font
X   <String `fmweb'>
X   <Font 
X    <FTag `'>
X   > # end of Font
X   <String ` source'>
X  >
X > # end of Para
X <Para 
X  <Unique 432561>
X  <PgfTag `Body'>
X  <ParaLine 
X   <String `To extract this source, go to special -\> conditional text, and hide the conditional tag named \xd2 Fluff\xd3 . Save the '>
X  >
X  <ParaLine 
X   <String `file as a text file called fmweb. The first line of this file may need changing. '>
X   <ATbl 5>
X  >
X > # end of Para
X <Para 
X  <Unique 432611>
X  <PgfTag `Body'>
X  <ParaLine 
X  >
X > # end of Para
X <Para 
X  <Unique 432612>
X  <PgfTag `Heading2'>
X  <ParaLine 
X   <TextRectID 22>
X   <String `Description'>
X  >
X > # end of Para
X <Para 
X  <Unique 432650>
X  <PgfTag `Body'>
X  <ParaLine 
X   <String `fmweb is implemented as a simple state machine, whose state diagram is shown below.'>
X   <AFrame 1>
X  >
X > # end of Para
X <Para 
X  <Unique 432651>
X  <PgfTag `Body'>
X  <ParaLine 
X   <String `Each of the events in the state diagram are mif statements. The subroutines ParaMode, FileMode, Code'>
X   <Char SoftHyphen >
X  >
X  <ParaLine 
X   <String `Mode, ChunkMode and WasteMode implement the states. If these subs are called without any parame'>
X   <Char SoftHyphen >
X  >
X  <ParaLine 
X   <String `ters, they do the necessary initializations required for that state, such as initializing @lookFor, which is the '>
X  >
X  <ParaLine 
X   <String `set of lookahead patterns in which the current state is interested. The main loop calls these subs with $line '>
X  >
X  <ParaLine 
X   <String `as the parameter - $line contains some event deemed interesting to the current state.'>
X  >
X > # end of Para
X <Para 
X  <Unique 432652>
X  <PgfTag `Body'>
X  <ParaLine 
X   <String `The script first reads in all the chunks and stores them in chunksByName, keyed by the chunk heading. '>
X  >
X  <ParaLine 
X   <String `Each chunk may contain embedded cross references to other chunks. In MIF, an XrefSrcText statement is '>
X  >
X  <ParaLine 
X   <String `the pointer to the source paragraph - more precisely, the chunk heading that this XrefSrcText points to, will '>
X  >
X  <ParaLine 
X   <String `have a corresponding \xd2 MText\xd3  statement with exactly the same string. Since a chunk is simply all the '>
X  >
X  <ParaLine 
X   <String `\xd2 code\xd3  paragraph strings concatenated together, cross references are simply embedded into this stream, '>
X  >
X  <ParaLine 
X   <String `with a "\\200" character on either end, to identify it later.'>
X  >
X > # end of Para
X <Para 
X  <Unique 432653>
X  <PgfTag `Body'>
X  <PgfEndCond Yes >
X  <PgfCondFullPgf Yes >
X  <ParaLine 
X   <String `Finally, each of the top level chunks are taken in order (top level chunks are those that haven\xd5 t been '>
X  >
X  <ParaLine 
X   <String `referred to by any other chunk), and expanded. The expansion process consists of substituting each '>
X  >
X  <ParaLine 
X   <String `embedded reference by the appropriate chunk - this is a recursive process, since the chunk referred to '>
X  >
X  <ParaLine 
X   <String `may itself contain other embedded references.'>
X  >
X > # end of Para
X <Para 
X  <Unique 430847>
X  <PgfTag `Body'>
X  <ParaLine 
X   <Font 
X    <FTag `'>
X    <FFamily `AvantGarde'>
X    <FWeight `DemiBold'>
X    <FPostScriptName `AvantGarde-Demi'>
X    <FSize  18.0 pt>
X   > # end of Font
X   <Unconditional >
X  >
X > # end of Para
X <Para 
X  <Unique 430772>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String `#/usr/local/bin/perl5'>
X  >
X > # end of Para
X <Para 
X  <Unique 430031>
X  <PgfTag `perlcode'>
X  <ParaLine 
X  >
X > # end of Para
X <Para 
X  <Unique 430032>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String `#forward declarations.'>
X  >
X > # end of Para
X <Para 
X  <Unique 430204>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String `sub ParaMode'>
X   <String `;'>
X  >
X > # end of Para
X <Para 
X  <Unique 430628>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String `sub FileMode;'>
X  >
X > # end of Para
X <Para 
X  <Unique 430630>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String `sub CodeMode;'>
X  >
X > # end of Para
X <Para 
X  <Unique 430632>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String `sub ChunkMode;'>
X  >
X > # end of Para
X <Para 
X  <Unique 430634>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String `sub WasteMode;'>
X  >
X > # end of Para
X <Para 
X  <Unique 430037>
X  <PgfTag `perlcode'>
X  <ParaLine 
X  >
X > # end of Para
X <Para 
X  <Unique 430613>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String `Initialize();'>
X  >
X > # end of Para
X <Para 
X  <Unique 430844>
X  <PgfTag `perlcode'>
X  <ParaLine 
X  >
X > # end of Para
X <Para 
X  <Unique 430853>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String `# Start with the Waste State.'>
X  >
X > # end of Para
X <Para 
X  <Unique 430038>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String `WasteMode();'>
X  >
X > # end of Para
X <Para 
X  <Unique 430039>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String `# Main loop'>
X  >
X > # end of Para
X <Para 
X  <Unique 430040>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String `while ($line = <STDIN\>) {'>
X  >
X > # end of Para
X <Para 
X  <Unique 430041>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <String `if (InterestingLine()) {'>
X  >
X > # end of Para
X <Para 
X  <Unique 430856>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <TextRectID 23>
X   <Char Tab >
X   <Char Tab >
X   <String `# Call the current mode proc (one of ParaMode,FileMode, CodeMode, ChunkMode;'>
X  >
X > # end of Para
X <Para 
X  <Unique 430876>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <Char Tab >
X   <String `# WasteMode, or WasteOneStringMode)'>
X  >
X > # end of Para
X <Para 
X  <Unique 430854>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <Char Tab >
X   <String `&{$currModeProc}($line);'>
X  >
X > # end of Para
X <Para 
X  <Unique 430043>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <String ` }'>
X  >
X > # end of Para
X <Para 
X  <Unique 430044>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String `}'>
X  >
X > # end of Para
X <Para 
X  <Unique 430045>
X  <PgfTag `perlcode'>
X  <ParaLine 
X  >
X > # end of Para
X <Para 
X  <Unique 430046>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String `#All chunks have been slurped in. '>
X  >
X > # end of Para
X <Para 
X  <Unique 430048>
X  <PgfTag `perlcode'>
X  <ParaLine 
X  >
X > # end of Para
X <Para 
X  <Unique 430883>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String `# Find out which chunks have been referred to by othe r chunks. '>
X  >
X > # end of Para
X <Para 
X  <Unique 430882>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String `foreach $k (keys %markerReferred) {'>
X  >
X > # end of Para
X <Para 
X  <Unique 430049>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String `    '>
X   <Char Tab >
X   <String `$chunkReferred {$markerToHeading{$k}} = 1;'>
X  >
X > # end of Para
X <Para 
X  <Unique 430050>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String `}'>
X  >
X > # end of Para
X <Para 
X  <Unique 430051>
X  <PgfTag `perlcode'>
X  <ParaLine 
X  >
X > # end of Para
X <Para 
X  <Unique 430889>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String `# Can currently open only one file.'>
X  >
X > # end of Para
X <Para 
X  <Unique 430052>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String `open (F, '>
X   <String `"'>
X   <String `\> $currFile'>
X   <String `"'>
X   <String `) || die '>
X   <String `"'>
X   <String `Could not open $currFile for writing'>
X   <String `"'>
X   <String `;'>
X  >
X > # end of Para
X <Para 
X  <Unique 430053>
X  <PgfTag `perlcode'>
X  <ParaLine 
X  >
X > # end of Para
X <Para 
X  <Unique 430054>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String `# The "tangle" process. Expand each top level chunk'>
X  >
X > # end of Para
X <Para 
X  <Unique 430892>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String `foreach $c (@chunkHeadings) {'>
X  >
X > # end of Para
X <Para 
X  <Unique 430055>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String `    '>
X   <Char Tab >
X   <String `if (! $chunkReferred{$c}) {'>
X  >
X > # end of Para
X <Para 
X  <Unique 430056>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <Char Tab >
X   <String `ChunkExpand ($c);'>
X  >
X > # end of Para
X <Para 
X  <Unique 430057>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <Char Tab >
X   <String `$chunksByName{$c} =~ s/\\\\xd([2345]) /$xlat[$1]/g;'>
X   <String ` #Translate smart quotes'>
X  >
X > # end of Para
X <Para 
X  <Unique 430058>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <Char Tab >
X   <String `$chunksByName{$c} =~ s/\\\\\\\\/\\\\/g;'>
X   <String ` #Convert \\\\ to \\'>
X  >
X > # end of Para
X <Para 
X  <Unique 430059>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <Char Tab >
X   <String `$chunksByName{$c} =~ s/\\\\\>/\>/g;'>
X   <String ` # convert \\\> to \>'>
X  >
X > # end of Para
X <Para 
X  <Unique 430061>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <Char Tab >
X   <String `print F $chunksByName{$c}, '>
X   <String `"'>
X   <String `\\n'>
X   <String `"'>
X   <String `;'>
X   <String ` '>
X  >
X > # end of Para
X <Para 
X  <Unique 430062>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String `    '>
X   <Char Tab >
X   <String `}'>
X  >
X > # end of Para
X <Para 
X  <Unique 430063>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String `}'>
X  >
X > # end of Para
X <Para 
X  <Unique 430064>
X  <PgfTag `perlcode'>
X  <ParaLine 
X  >
X > # end of Para
X <Para 
X  <Unique 430065>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String `close (F);'>
X  >
X > # end of Para
X <Para 
X  <Unique 430066>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String `exit (0);'>
X  >
X > # end of Para
X <Para 
X  <Unique 430903>
X  <PgfTag `perlcode'>
X  <ParaLine 
X  >
X > # end of Para
X <Para 
X  <Unique 430067>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String `#------------------------------------------------------------'>
X   <String `--------------------------------------------------'>
X  >
X > # end of Para
X <Para 
X  <Unique 430068>
X  <PgfTag `perlcode'>
X  <ParaLine 
X  >
X > # end of Para
X <Para 
X  <Unique 430069>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String `sub '>
X   <Font 
X    <FTag `'>
X    <FWeight `DemiBold'>
X    <FPostScriptName `AvantGarde-Demi'>
X   > # end of Font
X   <String `ChunkExpand'>
X   <Font 
X    <FTag `'>
X   > # end of Font
X   <String ` {'>
X  >
X > # end of Para
X <Para 
X  <Unique 430070>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String `   '>
X   <Char Tab >
X   <String ` local ($heading) = @_;'>
X  >
X > # end of Para
X <Para 
X  <Unique 430071>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String `    '>
X  >
X > # end of Para
X <Para 
X  <Unique 430072>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String `   '>
X   <Char Tab >
X   <String ` print '>
X   <String `"'>
X   <String `ChunkExpand : $heading \\n'>
X   <String `"'>
X   <String ` if $debugging;'>
X  >
X > # end of Para
X <Para 
X  <Unique 430073>
X  <PgfTag `perlcode'>
X  <ParaLine 
X  >
X > # end of Para
X <Para 
X  <Unique 430074>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String `   '>
X   <Char Tab >
X   <String ` if (defined ($chunksByName{$heading})) {'>
X  >
X > # end of Para
X <Para 
X  <Unique 430904>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <Char Tab >
X   <String `# For each embedded marker found, call CHunkExpand recursively.'>
X  >
X > # end of Para
X <Para 
X  <Unique 430907>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <Char Tab >
X   <String `# Note the /e option below.'>
X  >
X > # end of Para
X <Para 
X  <Unique 430075>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <Char Tab >
X   <String `1 while '>
X  >
X > # end of Para
X <Para 
X  <Unique 430076>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <String `   '>
X   <Char Tab >
X   <String ` ($chunksByName{$heading} =~ '>
X  >
X > # end of Para
X <Para 
X  <Unique 430077>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <Char Tab >
X   <Char Tab >
X   <String `s/\\200([^\\200]*)\\200/ChunkExpand($markerToHeading{$1})/e);'>
X  >
X > # end of Para
X <Para 
X  <Unique 430078>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <Char Tab >
X   <String `return $chunksByName{$heading};'>
X  >
X > # end of Para
X <Para 
X  <Unique 430079>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String `   '>
X   <Char Tab >
X   <String ` } else {'>
X  >
X > # end of Para
X <Para 
X  <Unique 430080>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <Char Tab >
X   <String `return '>
X   <String `"'>
X   <String `??$heading??'>
X   <String `"'>
X   <String `;'>
X   <String ` # To indicate an unresolved cross reference.'>
X  >
X > # end of Para
X <Para 
X  <Unique 430081>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String `   '>
X   <Char Tab >
X   <String ` }'>
X  >
X > # end of Para
X <Para 
X  <Unique 430082>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String `}'>
X  >
X > # end of Para
X <Para 
X  <Unique 430083>
X  <PgfTag `perlcode'>
X  <ParaLine 
X  >
X > # end of Para
X <Para 
X  <Unique 430084>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String `sub '>
X   <Font 
X    <FTag `'>
X    <FWeight `DemiBold'>
X    <FPostScriptName `AvantGarde-Demi'>
X   > # end of Font
X   <String `WasteMode'>
X   <Font 
X    <FTag `'>
X   > # end of Font
X   <String ` {'>
X  >
X > # end of Para
X <Para 
X  <Unique 430085>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <String ` local ($ev) = @_;'>
X  >
X > # end of Para
X <Para 
X  <Unique 430086>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String ` '>
X   <Char Tab >
X   <String ` if (! defined $ev) {'>
X  >
X > # end of Para
X <Para 
X  <Unique 430087>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <Char Tab >
X   <String `@lookFor = ($PARA);'>
X  >
X > # end of Para
X <Para 
X  <Unique 430088>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <Char Tab >
X   <String `$currModeProc = \\&WasteMode;'>
X  >
X > # end of Para
X <Para 
X  <Unique 430089>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <TextRectID 24>
X   <Char Tab >
X   <Char Tab >
X   <String `return;'>
X  >
X > # end of Para
X <Para 
X  <Unique 430090>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String `  '>
X   <Char Tab >
X   <String ` }'>
X  >
X > # end of Para
X <Para 
X  <Unique 430091>
X  <PgfTag `perlcode'>
X  <ParaLine 
X  >
X > # end of Para
X <Para 
X  <Unique 430092>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String `    '>
X   <Char Tab >
X   <String `ParaMode();'>
X  >
X > # end of Para
X <Para 
X  <Unique 430093>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String `}'>
X  >
X > # end of Para
X <Para 
X  <Unique 430094>
X  <PgfTag `perlcode'>
X  <ParaLine 
X  >
X > # end of Para
X <Para 
X  <Unique 430095>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String `sub '>
X   <Font 
X    <FTag `'>
X    <FWeight `DemiBold'>
X    <FPostScriptName `AvantGarde-Demi'>
X   > # end of Font
X   <String `ParaMode'>
X   <Font 
X    <FTag `'>
X   > # end of Font
X   <String ` {'>
X  >
X > # end of Para
X <Para 
X  <Unique 430096>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String `    '>
X   <Char Tab >
X   <String `local ($ev) = @_;'>
X  >
X > # end of Para
X <Para 
X  <Unique 430097>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String `   '>
X   <Char Tab >
X   <String `if (! defined $ev) {'>
X  >
X > # end of Para
X <Para 
X  <Unique 430098>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <Char Tab >
X   <String `@lookFor = ('>
X   <String `"'>
X   <String `^ *<PgfTag \Qcode\xd5 '>
X   <String `"'>
X   <String `, '>
X   <String `"'>
X   <String `^ *<PgfTag \Qchunk\xd5 '>
X   <String `"'>
X   <String `, '>
X   <String `"'>
X   <String `^ *<PgfTag \QFile\xd5 '>
X   <String `"'>
X   <String `);'>
X  >
X > # end of Para
X <Para 
X  <Unique 430099>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <Char Tab >
X   <String `$currModeProc = \\&ParaMode;'>
X  >
X > # end of Para
X <Para 
X  <Unique 430100>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <Char Tab >
X   <String `return;'>
X  >
X > # end of Para
X <Para 
X  <Unique 430101>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String `   '>
X   <Char Tab >
X   <String ` }'>
X  >
X > # end of Para
X <Para 
X  <Unique 430102>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String `   '>
X   <Char Tab >
X   <String ` print '>
X   <String `"'>
X   <String `ParaMode : $ev \\n'>
X   <String `"'>
X   <String ` if $debugging;'>
X  >
X > # end of Para
X <Para 
X  <Unique 430103>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String `   '>
X   <Char Tab >
X   <String ` if ($ev =~ /code/ ) {'>
X  >
X > # end of Para
X <Para 
X  <Unique 430104>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <Char Tab >
X   <String `CodeMode();'>
X  >
X > # end of Para
X <Para 
X  <Unique 430105>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String `   '>
X   <Char Tab >
X   <String ` } elsif ($ev =~ /chunk/ ) {'>
X  >
X > # end of Para
X <Para 
X  <Unique 430106>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <Char Tab >
X   <String `ChunkMode();'>
X  >
X > # end of Para
X <Para 
X  <Unique 430107>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String `   '>
X   <Char Tab >
X   <String ` } elsif ($ev =~ /File/ ) {'>
X  >
X > # end of Para
X <Para 
X  <Unique 430108>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <Char Tab >
X   <String `FileMode();'>
X  >
X > # end of Para
X <Para 
X  <Unique 430109>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String `   '>
X   <Char Tab >
X   <String ` } else {'>
X  >
X > # end of Para
X <Para 
X  <Unique 430110>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <Char Tab >
X   <String `WasteMode();'>
X  >
X > # end of Para
X <Para 
X  <Unique 430111>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String `    '>
X   <Char Tab >
X   <String `}'>
X  >
X > # end of Para
X <Para 
X  <Unique 430112>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String `}'>
X  >
X > # end of Para
X <Para 
X  <Unique 430113>
X  <PgfTag `perlcode'>
X  <ParaLine 
X  >
X > # end of Para
X <Para 
X  <Unique 430114>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String `sub '>
X   <Font 
X    <FTag `'>
X    <FWeight `DemiBold'>
X    <FPostScriptName `AvantGarde-Demi'>
X   > # end of Font
X   <String `FileMode'>
X   <Font 
X    <FTag `'>
X   > # end of Font
X   <String ` {'>
X  >
X > # end of Para
X <Para 
X  <Unique 430115>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String ` '>
X   <Char Tab >
X   <String ` local ($ev) = @_;'>
X  >
X > # end of Para
X <Para 
X  <Unique 430116>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String ` '>
X   <Char Tab >
X   <String ` if (! defined $ev) {'>
X  >
X > # end of Para
X <Para 
X  <Unique 430117>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <Char Tab >
X   <String `@lookFor = ('>
X   <String `"'>
X   <String `^ *<String'>
X   <String `"'>
X   <String `, $ENDOFPARA);'>
X  >
X > # end of Para
X <Para 
X  <Unique 430118>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <Char Tab >
X   <String `$currModeProc = \\&FileMode;'>
X  >
X > # end of Para
X <Para 
X  <Unique 430119>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <Char Tab >
X   <String `$currFile = '>
X   <String `""'>
X   <String `;'>
X  >
X > # end of Para
X <Para 
X  <Unique 430120>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <Char Tab >
X   <String `return;'>
X  >
X > # end of Para
X <Para 
X  <Unique 430121>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String `   '>
X   <Char Tab >
X   <String ` }'>
X  >
X > # end of Para
X <Para 
X  <Unique 430122>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String `  '>
X   <Char Tab >
X   <String ` print '>
X   <String `"'>
X   <String `FileMode : $ev \\n'>
X   <String `"'>
X   <String ` if $debugging;'>
X  >
X > # end of Para
X <Para 
X  <Unique 430123>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String `   '>
X   <Char Tab >
X   <String ` if ($ev =~ /^ *<String.*\\\Q(.+)\\\xd5 \>$/ ) {'>
X  >
X > # end of Para
X <Para 
X  <Unique 430124>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <Char Tab >
X   <String `$currFile = $1;'>
X  >
X > # end of Para
X <Para 
X  <Unique 430125>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String `   '>
X   <Char Tab >
X   <String ` } else {'>
X   <String ` # End of para'>
X  >
X > # end of Para
X <Para 
X  <Unique 430126>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <Char Tab >
X   <String `WasteMode();'>
X  >
X > # end of Para
X <Para 
X  <Unique 430127>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String `    '>
X   <Char Tab >
X   <String `}'>
X  >
X > # end of Para
X <Para 
X  <Unique 430128>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String `}'>
X  >
X > # end of Para
X <Para 
X  <Unique 430129>
X  <PgfTag `perlcode'>
X  <ParaLine 
X  >
X > # end of Para
X <Para 
X  <Unique 430130>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String `sub '>
X   <Font 
X    <FTag `'>
X    <FWeight `DemiBold'>
X    <FPostScriptName `AvantGarde-Demi'>
X   > # end of Font
X   <String `CodeMode'>
X   <Font 
X    <FTag `'>
X   > # end of Font
X   <String ` {'>
X  >
X > # end of Para
X <Para 
X  <Unique 430131>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String `   '>
X   <Char Tab >
X   <String ` local ($ev, $h) = @_;'>
X  >
X > # end of Para
X <Para 
X  <Unique 430132>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String `    '>
X   <Char Tab >
X   <String `if (! defined $ev) {'>
X  >
X > # end of Para
X <Para 
X  <Unique 430133>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <Char Tab >
X   <String `@lookFor = ('>
X   <String `"'>
X   <String `^ *<Char Tab'>
X   <String `"'>
X   <String `, '>
X   <String `"'>
X   <String `^ *<String'>
X   <String `"'>
X   <String `, '>
X   <String `"'>
X   <String `^ *<XRefSrcText'>
X   <String `"'>
X   <String `, $ENDOFPARA);'>
X  >
X > # end of Para
X <Para 
X  <Unique 430134>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <Char Tab >
X   <String `$currModeProc = \\&CodeMode;'>
X  >
X > # end of Para
X <Para 
X  <Unique 430135>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <String `return;'>
X  >
X > # end of Para
X <Para 
X  <Unique 430136>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String `    '>
X   <Char Tab >
X   <String `}'>
X  >
X > # end of Para
X <Para 
X  <Unique 430137>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String ` '>
X   <Char Tab >
X   <String ` print '>
X   <String `"'>
X   <String `CodeMode : $ev \\n'>
X   <String `"'>
X   <String ` if $debugging;'>
X  >
X > # end of Para
X <Para 
X  <Unique 430138>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String `   '>
X   <Char Tab >
X   <String ` if ($ev =~ /^ *<Char Tab/) {'>
X  >
X > # end of Para
X <Para 
X  <Unique 430139>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <Char Tab >
X   <String `$chunksByName{$currChunkHeading} .= '>
X   <String `"'>
X   <String `\\t'>
X   <String `"'>
X   <String `;'>
X   <String ` '>
X  >
X > # end of Para
X <Para 
X  <Unique 430140>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String `   '>
X   <Char Tab >
X   <String ` } elsif ($ev  =~ /String \\\Q(.*)\\\xd5 \>$/) {'>
X  >
X > # end of Para
X <Para 
X  <Unique 430141>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <Char Tab >
X   <String `$chunksByName{$currChunkHeading} .= '>
X   <String `"'>
X   <String `$1'>
X   <String `"'>
X   <String `;'>
X   <String ` # Concatenate code to current chunk'>
X  >
X > # end of Para
X <Para 
X  <Unique 430142>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String `    '>
X   <Char Tab >
X   <String `} elsif  (($h) = ($ev =~ /^ *<XRefSrcText (.*)\>$/)) {'>
X  >
X > # end of Para
X <Para 
X  <Unique 430143>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <TextRectID 25>
X   <Char Tab >
X   <Char Tab >
X   <String `$markerReferred{$h} = 1;'>
X   <String ` # Mark this chunk reference as "referred to"'>
X  >
X > # end of Para
X <Para 
X  <Unique 430144>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <Char Tab >
X   <String `# Put the text in as an embedded reference'>
X  >
X > # end of Para
X <Para 
X  <Unique 430916>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <Char Tab >
X   <String `$chunksByName{$currChunkHeading} .= '>
X   <String `"'>
X   <String `\\200$h\\200\\n'>
X   <String `"'>
X   <String `;'>
X   <String `  '>
X  >
X > # end of Para
X <Para 
X  <Unique 430145>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <Char Tab >
X   <String `# The next string is the string of the cross reference itself - having embedded the'>
X  >
X > # end of Para
X <Para 
X  <Unique 430924>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <Char Tab >
X   <String `# cross reference itself, we are not interested in this string.'>
X  >
X > # end of Para
X <Para 
X  <Unique 430921>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <Char Tab >
X   <String `WasteOneStringMode();'>
X  >
X > # end of Para
X <Para 
X  <Unique 430146>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String `   '>
X   <Char Tab >
X   <String ` } elsif ($ev =~ /$ENDOFPARA/o) {'>
X  >
X > # end of Para
X <Para 
X  <Unique 430147>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <Char Tab >
X   <String `# Assuming that each line of the code is in one "code" para . Time to append a '>
X  >
X > # end of Para
X <Para 
X  <Unique 430926>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <Char Tab >
X   <String `# newline'>
X  >
X > # end of Para
X <Para 
X  <Unique 430925>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <Char Tab >
X   <String `$chunksByName{$currChunkHeading} .= '>
X   <String `"'>
X   <String `\\n'>
X   <String `"'>
X   <String `;'>
X  >
X > # end of Para
X <Para 
X  <Unique 430148>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <Char Tab >
X   <String `WasteMode();'>
X  >
X > # end of Para
X <Para 
X  <Unique 430149>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String ` '>
X   <Char Tab >
X   <String ` }'>
X  >
X > # end of Para
X <Para 
X  <Unique 430150>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String `}'>
X  >
X > # end of Para
X <Para 
X  <Unique 430151>
X  <PgfTag `perlcode'>
X  <ParaLine 
X  >
X > # end of Para
X <Para 
X  <Unique 430152>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String `sub '>
X   <Font 
X    <FTag `'>
X    <FWeight `DemiBold'>
X    <FPostScriptName `AvantGarde-Demi'>
X   > # end of Font
X   <String `WasteOneStringMode'>
X   <Font 
X    <FTag `'>
X   > # end of Font
X   <String ` {'>
X  >
X > # end of Para
X <Para 
X  <Unique 430153>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <String `# Called from CodeMode above.'>
X  >
X > # end of Para
X <Para 
X  <Unique 430927>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <String ` local ($ev) = @_;'>
X  >
X > # end of Para
X <Para 
X  <Unique 430154>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String `   '>
X   <Char Tab >
X   <String ` if (! defined $ev) {'>
X  >
X > # end of Para
X <Para 
X  <Unique 430155>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <Char Tab >
X   <String `@lookFor = ('>
X   <String `"'>
X   <String `^ *<String'>
X   <String `"'>
X   <String `);'>
X  >
X > # end of Para
X <Para 
X  <Unique 430156>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <Char Tab >
X   <String `$currModeProc = \\&WasteOneStringMode;'>
X  >
X > # end of Para
X <Para 
X  <Unique 430157>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <Char Tab >
X   <String `return;'>
X  >
X > # end of Para
X <Para 
X  <Unique 430158>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String `   '>
X   <Char Tab >
X   <String ` }'>
X  >
X > # end of Para
X <Para 
X  <Unique 430159>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String `   '>
X   <Char Tab >
X   <String ` CodeMode();'>
X  >
X > # end of Para
X <Para 
X  <Unique 430160>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String `}'>
X  >
X > # end of Para
X <Para 
X  <Unique 430161>
X  <PgfTag `perlcode'>
X  <ParaLine 
X  >
X > # end of Para
X <Para 
X  <Unique 430162>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String `sub '>
X   <Font 
X    <FTag `'>
X    <FWeight `DemiBold'>
X    <FPostScriptName `AvantGarde-Demi'>
X   > # end of Font
X   <String `ChunkMode'>
X   <Font 
X    <FTag `'>
X   > # end of Font
X   <String ` {'>
X  >
X > # end of Para
X <Para 
X  <Unique 430163>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String `    '>
X   <Char Tab >
X   <String `local ($ev) = @_;'>
X  >
X > # end of Para
X <Para 
X  <Unique 430164>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String `   '>
X   <Char Tab >
X   <String ` if (! defined $ev) {'>
X  >
X > # end of Para
X <Para 
X  <Unique 430165>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <Char Tab >
X   <String `@lookFor = ('>
X   <String `"'>
X   <String `^ *<MText'>
X   <String `"'>
X   <String `, '>
X   <String `"'>
X   <String `^ *<String'>
X   <String `"'>
X   <String `, $ENDOFPARA);'>
X  >
X > # end of Para
X <Para 
X  <Unique 430166>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <Char Tab >
X   <String `$currChunkHeading = '>
X   <String `""'>
X   <String `;'>
X  >
X > # end of Para
X <Para 
X  <Unique 430167>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <Char Tab >
X   <String `$currMarkerText = '>
X   <String `""'>
X   <String `;'>
X  >
X > # end of Para
X <Para 
X  <Unique 430168>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <Char Tab >
X   <String `$currModeProc = \\&ChunkMode;'>
X  >
X > # end of Para
X <Para 
X  <Unique 430169>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <Char Tab >
X   <String `return;'>
X  >
X > # end of Para
X <Para 
X  <Unique 430170>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String ` '>
X   <Char Tab >
X   <String ` }'>
X  >
X > # end of Para
X <Para 
X  <Unique 430171>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String ` '>
X   <Char Tab >
X   <String ` if ($ev =~ /^ *<MText (.*)\>$/)  {'>
X  >
X > # end of Para
X <Para 
X  <Unique 430932>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <Char Tab >
X   <String `$currMarkerText = $1;'>
X  >
X > # end of Para
X <Para 
X  <Unique 430173>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String `   '>
X   <Char Tab >
X   <String ` } elsif ($ev =~ /^ *<String.*\\\Q(.+)\\\xd5 \>$/ ) {'>
X  >
X > # end of Para
X <Para 
X  <Unique 430174>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <Char Tab >
X   <String `$currChunkHeading .= $1;'>
X  >
X > # end of Para
X <Para 
X  <Unique 430175>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String `   '>
X   <Char Tab >
X   <String ` } else {'>
X  >
X > # end of Para
X <Para 
X  <Unique 430176>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <Char Tab >
X   <String `# End of chunk para. '>
X  >
X > # end of Para
X <Para 
X  <Unique 430935>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <Char Tab >
X   <String `print '>
X   <String `"'>
X   <String `ChunkMode : $1 \\n'>
X   <String `"'>
X   <String ` if $debugging;'>
X  >
X > # end of Para
X <Para 
X  <Unique 430177>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <Char Tab >
X   <String `if (! defined $chunksByName{$currChunkHeading}) {'>
X  >
X > # end of Para
X <Para 
X  <Unique 430178>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <Char Tab >
X   <Char Tab >
X   <String `# Init the current chunk with blank code.'>
X  >
X > # end of Para
X <Para 
X  <Unique 430936>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <String `    '>
X   <Char Tab >
X   <Char Tab >
X   <String `$chunksByName{$currChunkHeading} = '>
X   <String `""'>
X   <String `;'>
X  >
X > # end of Para
X <Para 
X  <Unique 430179>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <Char Tab >
X   <String `}'>
X  >
X > # end of Para
X <Para 
X  <Unique 430180>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <Char Tab >
X   <String `if (! defined $headingSeenBefore{$currChunkHeading}) {'>
X  >
X > # end of Para
X <Para 
X  <Unique 430937>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <Char Tab >
X   <Char Tab >
X   <String `# New chunk heading name seen.'>
X  >
X > # end of Para
X <Para 
X  <Unique 430181>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <String `  '>
X   <Char Tab >
X   <Char Tab >
X   <String ` push (@chunkHeadings, $currChunkHeading);'>
X  >
X > # end of Para
X <Para 
X  <Unique 430182>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <String `   '>
X   <Char Tab >
X   <Char Tab >
X   <String ` $headingSeenBefore{$currChunkHeading} = 1;'>
X  >
X > # end of Para
X <Para 
X  <Unique 430183>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <Char Tab >
X   <String `}'>
X  >
X > # end of Para
X <Para 
X  <Unique 430184>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <Char Tab >
X   <String `if ($currMarkerText ne '>
X   <String `""'>
X   <String `)'>
X   <String ` {'>
X  >
X > # end of Para
X <Para 
X  <Unique 430938>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <Char Tab >
X   <Char Tab >
X   <String `# cross reference between marker text and the actual heading'>
X  >
X > # end of Para
X <Para 
X  <Unique 430185>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <String `    '>
X   <Char Tab >
X   <Char Tab >
X   <String `$markerToHeading{$currMarkerText} = $currChunkHeading;'>
X  >
X > # end of Para
X <Para 
X  <Unique 430186>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <Char Tab >
X   <String `}'>
X  >
X > # end of Para
X <Para 
X  <Unique 430187>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <TextRectID 26>
X   <Char Tab >
X   <Char Tab >
X   <String `WasteMode();'>
X  >
X > # end of Para
X <Para 
X  <Unique 430188>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String `    '>
X   <Char Tab >
X   <String `}'>
X  >
X > # end of Para
X <Para 
X  <Unique 430189>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String `}'>
X  >
X > # end of Para
X <Para 
X  <Unique 430190>
X  <PgfTag `perlcode'>
X  <ParaLine 
X  >
X > # end of Para
X <Para 
X  <Unique 430191>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String `sub '>
X   <Font 
X    <FTag `'>
X    <FWeight `DemiBold'>
X    <FPostScriptName `AvantGarde-Demi'>
X   > # end of Font
X   <String `InterestingLine'>
X   <Font 
X    <FTag `'>
X   > # end of Font
X   <String ` {'>
X  >
X > # end of Para
X <Para 
X  <Unique 430192>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <String `# Does the line belong to any of the lookahead tokens? '>
X  >
X > # end of Para
X <Para 
X  <Unique 430939>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <String `foreach $l (@lookFor) {'>
X  >
X > # end of Para
X <Para 
X  <Unique 430193>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <Char Tab >
X   <String `if ($line =~ /$l/) {'>
X  >
X > # end of Para
X <Para 
X  <Unique 430194>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <String `  '>
X   <Char Tab >
X   <String ` '>
X   <Char Tab >
X   <String `return $l;'>
X  >
X > # end of Para
X <Para 
X  <Unique 430195>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <Char Tab >
X   <String `}'>
X  >
X > # end of Para
X <Para 
X  <Unique 430196>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String `   '>
X   <Char Tab >
X   <String ` }'>
X  >
X > # end of Para
X <Para 
X  <Unique 430197>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String `    '>
X   <Char Tab >
X   <String `return undef;'>
X  >
X > # end of Para
X <Para 
X  <Unique 430198>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String `}'>
X  >
X > # end of Para
X <Para 
X  <Unique 430585>
X  <PgfTag `perlcode'>
X  <ParaLine 
X  >
X > # end of Para
X <Para 
X  <Unique 430586>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String `sub '>
X   <Font 
X    <FTag `'>
X    <FWeight `DemiBold'>
X    <FPostScriptName `AvantGarde-Demi'>
X   > # end of Font
X   <String `Initialize'>
X   <Font 
X    <FTag `'>
X   > # end of Font
X   <String ` {'>
X  >
X > # end of Para
X <Para 
X  <Unique 430590>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <String `$debugging = 0;'>
X   <String ` # Change to 1 to get a trace.'>
X  >
X > # end of Para
X <Para 
X  <Unique 430591>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <String `$currFile = "-";'>
X   <Char Tab >
X   <Char Tab >
X   <String `# Output to stdout'>
X  >
X > # end of Para
X <Para 
X  <Unique 430592>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <String `$PARA = \xd5 ^ *<Para\xd5 ;'>
X  >
X > # end of Para
X <Para 
X  <Unique 430593>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <String `$ENDOFPARA = \xd5 ^ *\> # end of Para\xd5 ;'>
X  >
X > # end of Para
X <Para 
X  <Unique 430594>
X  <PgfTag `perlcode'>
X  <ParaLine 
X  >
X > # end of Para
X <Para 
X  <Unique 430595>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <String `#Translation table for smart quotes. '>
X  >
X > # end of Para
X <Para 
X  <Unique 430596>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <String `$xlat[2] = "\\"";'>
X  >
X > # end of Para
X <Para 
X  <Unique 430597>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <String `$xlat[3] = "\\"";'>
X  >
X > # end of Para
X <Para 
X  <Unique 430598>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <String `$xlat[4] = "\\\xd5 ";'>
X  >
X > # end of Para
X <Para 
X  <Unique 430599>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <String `$xlat[5] = "\\\xd5 ";'>
X  >
X > # end of Para
X <Para 
X  <Unique 430600>
X  <PgfTag `perlcode'>
X  <ParaLine 
X  >
X > # end of Para
X <Para 
X  <Unique 430601>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <String `# Start off with a default chunk heading, in case the programmer starts off code without '>
X  >
X > # end of Para
X <Para 
X  <Unique 430953>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <String `# a chunk heading'>
X  >
X > # end of Para
X <Para 
X  <Unique 430946>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <String `$currChunkHeading = "          DEFAULT        ";'>
X  >
X > # end of Para
X <Para 
X  <Unique 430602>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <String `$chunksByName {$currChunkHeading} = "";'>
X  >
X > # end of Para
X <Para 
X  <Unique 430603>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <Char Tab >
X   <String `push (@chunkHeadings, $currChunkHeading);'>
X  >
X > # end of Para
X <Para 
X  <Unique 430587>
X  <PgfTag `perlcode'>
X  <ParaLine 
X   <String `}'>
X  >
X > # end of Para
X <Para 
X  <Unique 430199>
X  <PgfTag `Body'>
X  <ParaLine 
X  >
X > # end of Para
X <Para 
X  <Unique 430200>
X  <PgfTag `Body'>
X  <PgfEndCond Yes >
X  <PgfCondFullPgf Yes >
X  <ParaLine 
X  >
X > # end of Para
X <Para 
X  <Unique 427886>
X  <PgfTag `Body'>
X  <ParaLine 
X  >
X > # end of Para
X> # end of TextFlow
X<TextFlow 
X <TFTag `TOC'>
X <Notes 
X > # end of Notes
X <Para 
X  <Unique 432829>
X  <PgfTag `chunkTOC'>
X  <ParaLine 
X   <TextRectID 12>
X   <String `<$paranum\>'>
X   <Char Tab >
X   <String `<$paratext\>'>
X  >
X > # end of Para
X <Para 
X  <Unique 432830>
X  <PgfTag `refersToTOC'>
X  <ParaLine 
X   <String `<normalfont\>'>
X   <Char Tab >
X   <String `<$paratext\>'>
X  >
X > # end of Para
X <Para 
X  <Unique 432825>
X  <Pgf 
X   <PgfTag `HeadingTOC'>
X   <PgfAlignment Left >
X   <PgfFIndent  0.13883">
X   <PgfLIndent  0.13883">
X   <PgfRIndent  0.33333">
X   <PgfSpBefore  2.0 pt>
X   <PgfSpAfter  2.0 pt>
X   <PgfBlockSize 2>
X   <PgfLineSpacing Fixed >
X   <PgfNumTabs 2>
X   <TabStop 
X    <TSX  0.48611">
X    <TSType Left >
X    <TSLeaderStr ` '>
X   > # end of TabStop
X   <TabStop 
X    <TSX  4.0">
X    <TSType Right >
X    <TSLeaderStr `.'>
X   > # end of TabStop
X   <PgfHyphenate No >
X  > # end of Pgf
X  <ParaLine 
X  >
X > # end of Para
X> # end of TextFlow
X# End of MIFFile
EOF fmweb.mif
if test 200789 -ne "`wc -c < 'fmweb.mif'`"
then
	echo 'shar: "fmweb.mif" CORRUPTED (not 200789 bytes)'
fi
fi ; : End of overwrite check
if test -f 'fmweb.ps'
then
	echo 'shar: "fmweb.ps" exists; NOT overwritten'
else
echo 'x fmweb.ps, 98643 bytes'
sed 's/^X//' << 'EOF fmweb.ps' > 'fmweb.ps'
X%!PS-Adobe-3.0
X%%BoundingBox: (atend)
X%%Pages: (atend)
X%%PageOrder: (atend)
X%%DocumentFonts: (atend)
X%%Creator: Frame 4.0
X%%DocumentData: Clean7Bit
X%%EndComments
X%%BeginProlog
X%
X% Frame ps_prolog 4.0, for use with Frame 4.0 products
X% This ps_prolog file is Copyright (c) 1986-1993 Frame Technology
X% Corporation.  All rights reserved.  This ps_prolog file may be
X% freely copied and distributed in conjunction with documents created
X% using FrameMaker, FrameBuilder and FrameViewer as long as this 
X% copyright notice is preserved.
X%
X% Frame products normally print colors as their true color on a color printer
X% or as shades of gray, based on luminance, on a black-and white printer. The
X% following flag, if set to True, forces all non-white colors to print as pure
X% black. This has no effect on bitmap images.
X/FMPrintAllColorsAsBlack             false def
X%
X% Frame products can either set their own line screens or use a printer's 
X% default settings. Three flags below control this separately for no 
X% separations, spot separations and process separations. If a flag
X% is true, then the default printer settings will not be changed. If it is
X% false, Frame products will use their own settings from a table based on
X% the printer's resolution.
X/FMUseDefaultNoSeparationScreen      true  def
X/FMUseDefaultSpotSeparationScreen    true  def
X/FMUseDefaultProcessSeparationScreen false def
X%
X% For any given PostScript printer resolution, Frame products have two sets of 
X% screen angles and frequencies for printing process separations, which are 
X% recomended by Adobe. The following variable chooses the higher frequencies
X% when set to true or the lower frequencies when set to false. This is only
X% effective if the appropriate FMUseDefault...SeparationScreen flag is false.
X/FMUseHighFrequencyScreens true def
X%
X% PostScript Level 2 printers contain an "Accurate Screens" feature which can
X% improve process separation rendering at the expense of compute time. This 
X% flag is ignored by PostScript Level 1 printers.
X/FMUseAcccurateScreens true def
X%
X% The following PostScript procedure defines the spot function that Frame
X% products will use for process separations. You may un-comment-out one of
X% the alternative functions below, or use your own.
X%
X% Dot function
X/FMSpotFunction {abs exch abs 2 copy add 1 gt 
X		{1 sub dup mul exch 1 sub dup mul add 1 sub }
X		{dup mul exch dup mul add 1 exch sub }ifelse } def
X%
X% Line function
X% /FMSpotFunction { pop } def
X%
X% Elipse function
X% /FMSpotFunction { dup 5 mul 8 div mul exch dup mul exch add 
X%		sqrt 1 exch sub } def
X%
X%
X/FMversion (4.0) def 
X/FMLevel1 /languagelevel where {pop languagelevel} {1} ifelse 2 lt def
X/FMPColor
X	FMLevel1 {
X		false
X		/colorimage where {pop pop true} if
X	} {
X		true
X	} ifelse
Xdef
X/FrameDict 400 dict def 
Xsystemdict /errordict known not {/errordict 10 dict def
X		errordict /rangecheck {stop} put} if
X% The readline in PS 23.0 doesn't recognize cr's as nl's on AppleTalk
XFrameDict /tmprangecheck errordict /rangecheck get put 
Xerrordict /rangecheck {FrameDict /bug true put} put 
XFrameDict /bug false put 
Xmark 
X% Some PS machines read past the CR, so keep the following 3 lines together!
Xcurrentfile 5 string readline
X00
X0000000000
Xcleartomark 
Xerrordict /rangecheck FrameDict /tmprangecheck get put 
XFrameDict /bug get { 
X	/readline {
X		/gstring exch def
X		/gfile exch def
X		/gindex 0 def
X		{
X			gfile read pop 
X			dup 10 eq {exit} if 
X			dup 13 eq {exit} if 
X			gstring exch gindex exch put 
X			/gindex gindex 1 add def 
X		} loop
X		pop 
X		gstring 0 gindex getinterval true 
X		} bind def
X	} if
X/FMshowpage /showpage load def
X/FMquit /quit load def
X/FMFAILURE { 
X	dup = flush 
X	FMshowpage 
X	/Helvetica findfont 12 scalefont setfont
X	72 200 moveto
X	show FMshowpage 
X	FMquit 
X	} def 
X/FMVERSION {
X	FMversion ne {
X		(Frame product version does not match ps_prolog!) FMFAILURE
X		} if
X	} def 
X/FMBADEPSF { 
X	(PostScript Lang. Ref. Man., 2nd Ed., H.2.4 says EPS must not call X              )
X	dup dup (X) search pop exch pop exch pop length 
X	4 -1 roll 
X	putinterval 
X	FMFAILURE
X	} def
X/FMLOCAL {
X	FrameDict begin
X	0 def 
X	end 
X	} def 
X/concatprocs
X	{
X	/proc2 exch cvlit def/proc1 exch cvlit def/newproc proc1 length proc2 length add array def
X	newproc 0 proc1 putinterval newproc proc1 length proc2 putinterval newproc cvx
X}def
XFrameDict begin 
X/FMnone 0 def
X/FMcyan 1 def
X/FMmagenta 2 def
X/FMyellow 3 def
X/FMblack 4 def
X/FMcustom 5 def
X/FrameNegative false def 
X/FrameSepIs FMnone def 
X/FrameSepBlack 0 def
X/FrameSepYellow 0 def
X/FrameSepMagenta 0 def
X/FrameSepCyan 0 def
X/FrameSepRed 1 def
X/FrameSepGreen 1 def
X/FrameSepBlue 1 def
X/FrameCurGray 1 def
X/FrameCurPat null def
X/FrameCurColors [ 0 0 0 1 0 0 0 ] def 
X/FrameColorEpsilon .001 def	
X/eqepsilon {		
X	sub dup 0 lt {neg} if
X	FrameColorEpsilon le
X} bind def
X/FrameCmpColorsCMYK { 
X	2 copy 0 get exch 0 get eqepsilon {
X		2 copy 1 get exch 1 get eqepsilon {
X			2 copy 2 get exch 2 get eqepsilon {
X				3 get exch 3 get eqepsilon
X			} {pop pop false} ifelse
X		}{pop pop false} ifelse
X	} {pop pop false} ifelse
X} bind def
X/FrameCmpColorsRGB { 
X	2 copy 4 get exch 0 get eqepsilon {
X		2 copy 5 get exch 1 get eqepsilon {
X			6 get exch 2 get eqepsilon
X		}{pop pop false} ifelse
X	} {pop pop false} ifelse
X} bind def
X/RGBtoCMYK { 
X	1 exch sub 
X	3 1 roll 
X	1 exch sub 
X	3 1 roll 
X	1 exch sub 
X	3 1 roll 
X	3 copy 
X	2 copy 
X	le { pop } { exch pop } ifelse 
X	2 copy 
X	le { pop } { exch pop } ifelse 
X	dup dup dup 
X	6 1 roll 
X	4 1 roll 
X	7 1 roll 
X	sub 
X	6 1 roll 
X	sub 
X	5 1 roll 
X	sub 
X	4 1 roll 
X} bind def
X/CMYKtoRGB { 
X	dup dup 4 -1 roll add 						  
X	5 1 roll 3 -1 roll add 						  
X	4 1 roll add 								  
X	1 exch sub dup 0 lt {pop 0} if 3 1 roll 	  
X	1 exch sub dup 0 lt {pop 0} if exch 	      
X	1 exch sub dup 0 lt {pop 0} if exch	  		  
X} bind def
X/FrameSepInit {
X	1.0 RealSetgray
X} bind def
X/FrameSetSepColor { 
X	/FrameSepBlue exch def
X	/FrameSepGreen exch def
X	/FrameSepRed exch def
X	/FrameSepBlack exch def
X	/FrameSepYellow exch def
X	/FrameSepMagenta exch def
X	/FrameSepCyan exch def
X	/FrameSepIs FMcustom def
X	setCurrentScreen	
X} bind def
X/FrameSetCyan {
X	/FrameSepBlue 1.0 def
X	/FrameSepGreen 1.0 def
X	/FrameSepRed 0.0 def
X	/FrameSepBlack 0.0 def
X	/FrameSepYellow 0.0 def
X	/FrameSepMagenta 0.0 def
X	/FrameSepCyan 1.0 def
X	/FrameSepIs FMcyan def
X	setCurrentScreen	
X} bind def
X 
X/FrameSetMagenta {
X	/FrameSepBlue 1.0 def
X	/FrameSepGreen 0.0 def
X	/FrameSepRed 1.0 def
X	/FrameSepBlack 0.0 def
X	/FrameSepYellow 0.0 def
X	/FrameSepMagenta 1.0 def
X	/FrameSepCyan 0.0 def
X	/FrameSepIs FMmagenta def
X	setCurrentScreen
X} bind def
X 
X/FrameSetYellow {
X	/FrameSepBlue 0.0 def
X	/FrameSepGreen 1.0 def
X	/FrameSepRed 1.0 def
X	/FrameSepBlack 0.0 def
X	/FrameSepYellow 1.0 def
X	/FrameSepMagenta 0.0 def
X	/FrameSepCyan 0.0 def
X	/FrameSepIs FMyellow def
X	setCurrentScreen
X} bind def
X 
X/FrameSetBlack {
X	/FrameSepBlue 0.0 def
X	/FrameSepGreen 0.0 def
X	/FrameSepRed 0.0 def
X	/FrameSepBlack 1.0 def
X	/FrameSepYellow 0.0 def
X	/FrameSepMagenta 0.0 def
X	/FrameSepCyan 0.0 def
X	/FrameSepIs FMblack def
X	setCurrentScreen
X} bind def
X 
X/FrameNoSep { 
X	/FrameSepIs FMnone def
X	setCurrentScreen
X} bind def
X/FrameSetSepColors { 
X	FrameDict begin
X	[ exch 1 add 1 roll ]
X	/FrameSepColors  
X	exch def end
X	} bind def
X/FrameColorInSepListCMYK { 
X	FrameSepColors {  
X       		exch dup 3 -1 roll 
X       		FrameCmpColorsCMYK 
X       		{ pop true exit } if
X    	} forall 
X	dup true ne {pop false} if
X	} bind def
X/FrameColorInSepListRGB { 
X	FrameSepColors {  
X       		exch dup 3 -1 roll 
X       		FrameCmpColorsRGB 
X       		{ pop true exit } if
X    	} forall 
X	dup true ne {pop false} if
X	} bind def
X/RealSetgray /setgray load def
X/RealSetrgbcolor /setrgbcolor load def
X/RealSethsbcolor /sethsbcolor load def
Xend 
X/setgray { 
X	FrameDict begin
X	FrameSepIs FMnone eq
X		{ RealSetgray } 
X		{ 
X		FrameSepIs FMblack eq 
X			{ RealSetgray } 
X			{ FrameSepIs FMcustom eq 
X			  FrameSepRed 0 eq and
X			  FrameSepGreen 0 eq and
X			  FrameSepBlue 0 eq and {
X			  	RealSetgray
X			  } {
X				1 RealSetgray pop 
X			  } ifelse
X			} ifelse
X		} ifelse
X	end
X} bind def
X/setrgbcolor { 
X	FrameDict begin
X	FrameSepIs FMnone eq
X	{  RealSetrgbcolor }
X	{
X		3 copy [ 4 1 roll ] 
X		FrameColorInSepListRGB
X		{
X				FrameSepBlue eq exch 
X			 	FrameSepGreen eq and exch 
X			 	FrameSepRed eq and
X			 	{ 0 } { 1 } ifelse
X		}
X		{
X			FMPColor {
X				RealSetrgbcolor
X				currentcmykcolor
X			} {
X				RGBtoCMYK
X			} ifelse
X			FrameSepIs FMblack eq
X			{1.0 exch sub 4 1 roll pop pop pop} {
X			FrameSepIs FMyellow eq
X			{pop 1.0 exch sub 3 1 roll pop pop} {
X			FrameSepIs FMmagenta eq
X			{pop pop 1.0 exch sub exch pop } {
X			FrameSepIs FMcyan eq
X			{pop pop pop 1.0 exch sub } 
X			{pop pop pop pop 1} ifelse } ifelse } ifelse } ifelse 
X		} ifelse
X		RealSetgray
X	} 
X	ifelse
X	end
X} bind def
X/sethsbcolor {
X	FrameDict begin
X	FrameSepIs FMnone eq 
X	{ RealSethsbcolor } 
X	{
X		RealSethsbcolor 
X		currentrgbcolor  
X		setrgbcolor 
X	} 
X	ifelse
X	end
X} bind def
XFrameDict begin
X/setcmykcolor where {
X	pop /RealSetcmykcolor /setcmykcolor load def
X} {
X	/RealSetcmykcolor {
X		4 1 roll
X		3 { 3 index add 0 max 1 min 1 exch sub 3 1 roll} repeat 
X		setrgbcolor pop
X	} bind def
X} ifelse
Xuserdict /setcmykcolor { 
X		FrameDict begin
X		FrameSepIs FMnone eq
X		{ RealSetcmykcolor } 
X		{
X			4 copy [ 5 1 roll ]
X			FrameColorInSepListCMYK
X			{
X				FrameSepBlack eq exch 
X				FrameSepYellow eq and exch 
X				FrameSepMagenta eq and exch 
X				FrameSepCyan eq and 
X				{ 0 } { 1 } ifelse
X			}
X			{
X				FrameSepIs FMblack eq
X				{1.0 exch sub 4 1 roll pop pop pop} {
X				FrameSepIs FMyellow eq
X				{pop 1.0 exch sub 3 1 roll pop pop} {
X				FrameSepIs FMmagenta eq
X				{pop pop 1.0 exch sub exch pop } {
X				FrameSepIs FMcyan eq
X				{pop pop pop 1.0 exch sub } 
X				{pop pop pop pop 1} ifelse } ifelse } ifelse } ifelse 
X			} ifelse
X			RealSetgray
X		}
X		ifelse
X		end
X	} bind put
XFMLevel1 not { 
X	
X	/patProcDict 5 dict dup begin
X		<0f1e3c78f0e1c387> { 3 setlinewidth -1 -1 moveto 9 9 lineto stroke 
X											4 -4 moveto 12 4 lineto stroke
X											-4 4 moveto 4 12 lineto stroke} bind def
X		<0f87c3e1f0783c1e> { 3 setlinewidth -1 9 moveto 9 -1 lineto stroke 
X											-4 4 moveto 4 -4 lineto stroke
X											4 12 moveto 12 4 lineto stroke} bind def
X		<8142241818244281> { 1 setlinewidth -1 9 moveto 9 -1 lineto stroke
X											-1 -1 moveto 9 9 lineto stroke } bind def
X		<03060c183060c081> { 1 setlinewidth -1 -1 moveto 9 9 lineto stroke 
X											4 -4 moveto 12 4 lineto stroke
X											-4 4 moveto 4 12 lineto stroke} bind def
X		<8040201008040201> { 1 setlinewidth -1 9 moveto 9 -1 lineto stroke 
X											-4 4 moveto 4 -4 lineto stroke
X											4 12 moveto 12 4 lineto stroke} bind def
X	end def
X	/patDict 15 dict dup begin
X		/PatternType 1 def		
X		/PaintType 2 def		
X		/TilingType 3 def		
X		/BBox [ 0 0 8 8 ] def 	
X		/XStep 8 def			
X		/YStep 8 def			
X		/PaintProc {
X			begin
X			patProcDict bstring known {
X				patProcDict bstring get exec
X			} {
X				8 8 true [1 0 0 -1 0 8] bstring imagemask
X			} ifelse
X			end
X		} bind def
X	end def
X} if
X/combineColor {
X    FrameSepIs FMnone eq
X	{
X		graymode FMLevel1 or not {
X			
X			[/Pattern [/DeviceCMYK]] setcolorspace
X			FrameCurColors 0 4 getinterval aload pop FrameCurPat setcolor
X		} {
X			FrameCurColors 3 get 1.0 ge {
X				FrameCurGray RealSetgray
X			} {
X				FMPColor graymode and {
X					0 1 3 { 
X						FrameCurColors exch get
X						1 FrameCurGray sub mul
X					} for
X					RealSetcmykcolor
X				} {
X					4 1 6 {
X						FrameCurColors exch get
X						graymode {
X							1 exch sub 1 FrameCurGray sub mul 1 exch sub
X						} {
X							1.0 lt {FrameCurGray} {1} ifelse
X						} ifelse
X					} for
X					RealSetrgbcolor
X				} ifelse
X			} ifelse
X		} ifelse
X	} { 
X		FrameCurColors 0 4 getinterval aload
X		FrameColorInSepListCMYK {
X			FrameSepBlack eq exch 
X			FrameSepYellow eq and exch 
X			FrameSepMagenta eq and exch 
X			FrameSepCyan eq and
X			FrameSepIs FMcustom eq and
X			{ FrameCurGray } { 1 } ifelse
X		} {
X			FrameSepIs FMblack eq
X			{FrameCurGray 1.0 exch sub mul 1.0 exch sub 4 1 roll pop pop pop} {
X			FrameSepIs FMyellow eq
X			{pop FrameCurGray 1.0 exch sub mul 1.0 exch sub 3 1 roll pop pop} {
X			FrameSepIs FMmagenta eq
X			{pop pop FrameCurGray 1.0 exch sub mul 1.0 exch sub exch pop } {
X			FrameSepIs FMcyan eq
X			{pop pop pop FrameCurGray 1.0 exch sub mul 1.0 exch sub } 
X			{pop pop pop pop 1} ifelse } ifelse } ifelse } ifelse 
X		} ifelse
X		graymode FMLevel1 or not {
X			
X			[/Pattern [/DeviceGray]] setcolorspace
X			FrameCurPat setcolor
X		} { 
X			graymode not FMLevel1 and {
X				
X				dup 1 lt {pop FrameCurGray} if
X			} if
X			RealSetgray
X		} ifelse
X	} ifelse
X} bind def
X/savematrix {
X	orgmatrix currentmatrix pop
X	} bind def
X/restorematrix {
X	orgmatrix setmatrix
X	} bind def
X/dmatrix matrix def
X/dpi    72 0 dmatrix defaultmatrix dtransform
X    dup mul exch   dup mul add   sqrt def
X	
X/freq dpi dup 72 div round dup 0 eq {pop 1} if 8 mul div def
X/sangle 1 0 dmatrix defaultmatrix dtransform exch atan def
X/dpiranges   [  2540    2400    1693     1270    1200     635      600      0      ] def
X/CMLowFreqs  [ 100.402  94.8683 89.2289 100.402  94.8683  66.9349  63.2456 47.4342 ] def
X/YLowFreqs   [  95.25   90.0    84.65    95.25   90.0     70.5556  66.6667 50.0    ] def
X/KLowFreqs   [  89.8026 84.8528 79.8088  89.8026 84.8528  74.8355  70.7107 53.033  ] def
X/CLowAngles  [  71.5651 71.5651 71.5651 71.5651  71.5651  71.5651  71.5651 71.5651 ] def
X/MLowAngles  [  18.4349 18.4349 18.4349 18.4349  18.4349  18.4349  18.4349 18.4349 ] def
X/YLowTDot    [  true    true    false    true    true     false    false   false   ] def
X/CMHighFreqs [ 133.87  126.491 133.843  108.503 102.523  100.402   94.8683 63.2456 ] def
X/YHighFreqs  [ 127.0   120.0   126.975  115.455 109.091   95.25    90.0    60.0    ] def
X/KHighFreqs  [ 119.737 113.137 119.713  128.289 121.218   89.8026  84.8528 63.6395 ] def
X/CHighAngles [  71.5651 71.5651 71.5651  70.0169 70.0169  71.5651  71.5651 71.5651 ] def
X/MHighAngles [  18.4349 18.4349 18.4349  19.9831 19.9831  18.4349  18.4349 18.4349 ] def
X/YHighTDot   [  false   false   true     false   false    true     true    false   ] def
X/PatFreq     [	10.5833 10.0     9.4055  10.5833 10.0	  10.5833  10.0	   9.375   ] def
X/screenIndex {
X	0 1 dpiranges length 1 sub { dup dpiranges exch get 1 sub dpi le {exit} {pop} ifelse } for
X} bind def
X/getCyanScreen {
X	FMUseHighFrequencyScreens { CHighAngles CMHighFreqs} {CLowAngles CMLowFreqs} ifelse
X		screenIndex dup 3 1 roll get 3 1 roll get /FMSpotFunction load
X} bind def
X/getMagentaScreen {
X	FMUseHighFrequencyScreens { MHighAngles CMHighFreqs } {MLowAngles CMLowFreqs} ifelse
X		screenIndex dup 3 1 roll get 3 1 roll get /FMSpotFunction load
X} bind def
X/getYellowScreen {
X	FMUseHighFrequencyScreens { YHighTDot YHighFreqs} { YLowTDot YLowFreqs } ifelse
X		screenIndex dup 3 1 roll get 3 1 roll get { 3 div
X			{2 { 1 add 2 div 3 mul dup floor sub 2 mul 1 sub exch} repeat
X			FMSpotFunction } } {/FMSpotFunction load } ifelse
X			0.0 exch
X} bind def
X/getBlackScreen  {
X	FMUseHighFrequencyScreens { KHighFreqs } { KLowFreqs } ifelse
X		screenIndex get 45.0 /FMSpotFunction load 
X} bind def
X/getSpotScreen {
X	getBlackScreen
X} bind def
X/getCompositeScreen {
X	getBlackScreen
X} bind def
X/FMSetScreen 
X	FMLevel1 { /setscreen load 
X	}{ {
X		8 dict begin
X		/HalftoneType 1 def
X		/SpotFunction exch def
X		/Angle exch def
X		/Frequency exch def
X		/AccurateScreens FMUseAcccurateScreens def
X		currentdict end sethalftone
X	} bind } ifelse
Xdef
X/setDefaultScreen {
X	FMPColor {
X		orgrxfer cvx orggxfer cvx orgbxfer cvx orgxfer cvx setcolortransfer
X	}
X	{
X		orgxfer cvx settransfer
X	} ifelse
X	orgfreq organgle orgproc cvx setscreen
X} bind def
X/setCurrentScreen {
X	FrameSepIs FMnone eq {
X		FMUseDefaultNoSeparationScreen {
X			setDefaultScreen
X		} {
X			getCompositeScreen FMSetScreen
X		} ifelse
X	} {
X		FrameSepIs FMcustom eq {
X			FMUseDefaultSpotSeparationScreen {
X				setDefaultScreen
X			} {
X				getSpotScreen FMSetScreen
X			} ifelse
X		} {
X			FMUseDefaultProcessSeparationScreen {
X				setDefaultScreen
X			} {
X				FrameSepIs FMcyan eq {
X					getCyanScreen FMSetScreen
X				} {
X					FrameSepIs FMmagenta eq {
X						getMagentaScreen FMSetScreen
X					} {
X						FrameSepIs FMyellow eq {
X							getYellowScreen FMSetScreen
X						} {
X							getBlackScreen FMSetScreen
X						} ifelse
X					} ifelse
X				} ifelse
X			} ifelse
X		} ifelse
X	} ifelse 
X} bind def
Xend
X	/gstring FMLOCAL
X	/gfile FMLOCAL
X	/gindex FMLOCAL
X	/orgrxfer FMLOCAL
X	/orggxfer FMLOCAL
X	/orgbxfer FMLOCAL
X	/orgxfer FMLOCAL
X	/orgproc FMLOCAL
X	/orgrproc FMLOCAL
X	/orggproc FMLOCAL
X	/orgbproc FMLOCAL
X	/organgle FMLOCAL
X	/orgrangle FMLOCAL
X	/orggangle FMLOCAL
X	/orgbangle FMLOCAL
X	/orgfreq FMLOCAL
X	/orgrfreq FMLOCAL
X	/orggfreq FMLOCAL
X	/orgbfreq FMLOCAL
X	/yscale FMLOCAL
X	/xscale FMLOCAL
X	/edown FMLOCAL
X	/manualfeed FMLOCAL
X	/paperheight FMLOCAL
X	/paperwidth FMLOCAL
X/FMDOCUMENT { 
X	array /FMfonts exch def 
X	/#copies exch def
X	FrameDict begin
X	0 ne /manualfeed exch def
X	/paperheight exch def
X	/paperwidth exch def
X	0 ne /FrameNegative exch def 
X	0 ne /edown exch def 
X	/yscale exch def
X	/xscale exch def
X	FMLevel1 {
X		manualfeed {setmanualfeed} if
X		/FMdicttop countdictstack 1 add def 
X		/FMoptop count def 
X		setpapername 
X		manualfeed {true} {papersize} ifelse 
X		{manualpapersize} {false} ifelse 
X		{desperatepapersize} {false} ifelse 
X		{ (Can't select requested paper size for Frame print job!) FMFAILURE } if
X		count -1 FMoptop {pop pop} for
X		countdictstack -1 FMdicttop {pop end} for 
X		}
X		{{1 dict dup /PageSize [paperwidth paperheight]put setpagedevice}stopped
X		{ (Can't select requested paper size for Frame print job!) FMFAILURE } if
X		 {1 dict dup /ManualFeed manualfeed put setpagedevice } stopped pop }
X	ifelse 
X	
X	FMPColor {
X		currentcolorscreen
X			cvlit /orgproc exch def
X				  /organgle exch def 
X				  /orgfreq exch def
X			cvlit /orgbproc exch def
X				  /orgbangle exch def 
X				  /orgbfreq exch def
X			cvlit /orggproc exch def
X				  /orggangle exch def 
X				  /orggfreq exch def
X			cvlit /orgrproc exch def
X				  /orgrangle exch def 
X				  /orgrfreq exch def
X			currentcolortransfer 
X			FrameNegative {
X				1 1 4 { 
X					pop { 1 exch sub } concatprocs 4 1 roll
X				} for
X				4 copy
X				setcolortransfer
X			} if
X			cvlit /orgxfer exch def
X			cvlit /orgbxfer exch def
X			cvlit /orggxfer exch def
X			cvlit /orgrxfer exch def
X	} {
X		currentscreen 
X			cvlit /orgproc exch def
X				  /organgle exch def 
X				  /orgfreq exch def
X				  
X		currenttransfer 
X		FrameNegative {
X			{ 1 exch sub } concatprocs
X			dup settransfer
X		} if 
X		cvlit /orgxfer exch def
X	} ifelse
X	end 
X} def 
X/pagesave FMLOCAL
X/orgmatrix FMLOCAL
X/landscape FMLOCAL
X/pwid FMLOCAL
X/FMBEGINPAGE { 
X	FrameDict begin 
X	/pagesave save def
X	3.86 setmiterlimit
X	/landscape exch 0 ne def
X	landscape { 
X		90 rotate 0 exch dup /pwid exch def neg translate pop 
X	}{
X		pop /pwid exch def
X	} ifelse
X	edown { [-1 0 0 1 pwid 0] concat } if
X	0 0 moveto paperwidth 0 lineto paperwidth paperheight lineto 
X	0 paperheight lineto 0 0 lineto 1 setgray fill
X	xscale yscale scale
X	/orgmatrix matrix def
X	gsave 
X} def 
X/FMENDPAGE {
X	grestore 
X	pagesave restore
X	end 
X	showpage
X	} def 
X/FMFONTDEFINE { 
X	FrameDict begin
X	findfont 
X	ReEncode 
X	1 index exch 
X	definefont 
X	FMfonts 3 1 roll 
X	put
X	end 
X	} def 
X/FMFILLS {
X	FrameDict begin dup
X	array /fillvals exch def
X	dict /patCache exch def
X	end 
X	} def 
X/FMFILL {
X	FrameDict begin
X	 fillvals 3 1 roll put
X	end 
X	} def 
X/FMNORMALIZEGRAPHICS { 
X	newpath
X	0.0 0.0 moveto
X	1 setlinewidth
X	0 setlinecap
X	0 0 0 sethsbcolor
X	0 setgray 
X	} bind def
X	/fx FMLOCAL
X	/fy FMLOCAL
X	/fh FMLOCAL
X	/fw FMLOCAL
X	/llx FMLOCAL
X	/lly FMLOCAL
X	/urx FMLOCAL
X	/ury FMLOCAL
X/FMBEGINEPSF { 
X	end 
X	/FMEPSF save def 
X	/showpage {} def 
X% See Adobe's "PostScript Language Reference Manual, 2nd Edition", page 714.
X% "...the following operators MUST NOT be used in an EPS file:" (emphasis ours)
X	/banddevice {(banddevice) FMBADEPSF} def
X	/clear {(clear) FMBADEPSF} def
X	/cleardictstack {(cleardictstack) FMBADEPSF} def 
X	/copypage {(copypage) FMBADEPSF} def
X	/erasepage {(erasepage) FMBADEPSF} def
X	/exitserver {(exitserver) FMBADEPSF} def
X	/framedevice {(framedevice) FMBADEPSF} def
X	/grestoreall {(grestoreall) FMBADEPSF} def
X	/initclip {(initclip) FMBADEPSF} def
X	/initgraphics {(initgraphics) FMBADEPSF} def
X	/initmatrix {(initmatrix) FMBADEPSF} def
X	/quit {(quit) FMBADEPSF} def
X	/renderbands {(renderbands) FMBADEPSF} def
X	/setglobal {(setglobal) FMBADEPSF} def
X	/setpagedevice {(setpagedevice) FMBADEPSF} def
X	/setshared {(setshared) FMBADEPSF} def
X	/startjob {(startjob) FMBADEPSF} def
X	/lettertray {(lettertray) FMBADEPSF} def
X	/letter {(letter) FMBADEPSF} def
X	/lettersmall {(lettersmall) FMBADEPSF} def
X	/11x17tray {(11x17tray) FMBADEPSF} def
X	/11x17 {(11x17) FMBADEPSF} def
X	/ledgertray {(ledgertray) FMBADEPSF} def
X	/ledger {(ledger) FMBADEPSF} def
X	/legaltray {(legaltray) FMBADEPSF} def
X	/legal {(legal) FMBADEPSF} def
X	/statementtray {(statementtray) FMBADEPSF} def
X	/statement {(statement) FMBADEPSF} def
X	/executivetray {(executivetray) FMBADEPSF} def
X	/executive {(executive) FMBADEPSF} def
X	/a3tray {(a3tray) FMBADEPSF} def
X	/a3 {(a3) FMBADEPSF} def
X	/a4tray {(a4tray) FMBADEPSF} def
X	/a4 {(a4) FMBADEPSF} def
X	/a4small {(a4small) FMBADEPSF} def
X	/b4tray {(b4tray) FMBADEPSF} def
X	/b4 {(b4) FMBADEPSF} def
X	/b5tray {(b5tray) FMBADEPSF} def
X	/b5 {(b5) FMBADEPSF} def
X	FMNORMALIZEGRAPHICS 
X	[/fy /fx /fh /fw /ury /urx /lly /llx] {exch def} forall 
X	fx fw 2 div add fy fh 2 div add  translate
X	rotate
X	fw 2 div neg fh 2 div neg translate
X	fw urx llx sub div fh ury lly sub div scale 
X	llx neg lly neg translate 
X	/FMdicttop countdictstack 1 add def 
X	/FMoptop count def 
X	} bind def
X/FMENDEPSF {
X	count -1 FMoptop {pop pop} for 
X	countdictstack -1 FMdicttop {pop end} for 
X	FMEPSF restore
X	FrameDict begin 
X	} bind def
XFrameDict begin 
X/setmanualfeed {
X%%BeginFeature *ManualFeed True
X	 statusdict /manualfeed true put
X%%EndFeature
X	} bind def
X/max {2 copy lt {exch} if pop} bind def
X/min {2 copy gt {exch} if pop} bind def
X/inch {72 mul} def
X/pagedimen { 
X	paperheight sub abs 16 lt exch 
X	paperwidth sub abs 16 lt and
X	{/papername exch def} {pop} ifelse
X	} bind def
X	/papersizedict FMLOCAL
X/setpapername { 
X	/papersizedict 14 dict def 
X	papersizedict begin
X	/papername /unknown def 
X		/Letter 8.5 inch 11.0 inch pagedimen
X		/LetterSmall 7.68 inch 10.16 inch pagedimen
X		/Tabloid 11.0 inch 17.0 inch pagedimen
X		/Ledger 17.0 inch 11.0 inch pagedimen
X		/Legal 8.5 inch 14.0 inch pagedimen
X		/Statement 5.5 inch 8.5 inch pagedimen
X		/Executive 7.5 inch 10.0 inch pagedimen
X		/A3 11.69 inch 16.5 inch pagedimen
X		/A4 8.26 inch 11.69 inch pagedimen
X		/A4Small 7.47 inch 10.85 inch pagedimen
X		/B4 10.125 inch 14.33 inch pagedimen
X		/B5 7.16 inch 10.125 inch pagedimen
X	end
X	} bind def
X/papersize {
X	papersizedict begin
X		/Letter {lettertray letter} def
X		/LetterSmall {lettertray lettersmall} def
X		/Tabloid {11x17tray 11x17} def
X		/Ledger {ledgertray ledger} def
X		/Legal {legaltray legal} def
X		/Statement {statementtray statement} def
X		/Executive {executivetray executive} def
X		/A3 {a3tray a3} def
X		/A4 {a4tray a4} def
X		/A4Small {a4tray a4small} def
X		/B4 {b4tray b4} def
X		/B5 {b5tray b5} def
X		/unknown {unknown} def
X	papersizedict dup papername known {papername} {/unknown} ifelse get
X	end
X	statusdict begin stopped end 
X	} bind def
X/manualpapersize {
X	papersizedict begin
X		/Letter {letter} def
X		/LetterSmall {lettersmall} def
X		/Tabloid {11x17} def
X		/Ledger {ledger} def
X		/Legal {legal} def
X		/Statement {statement} def
X		/Executive {executive} def
X		/A3 {a3} def
X		/A4 {a4} def
X		/A4Small {a4small} def
X		/B4 {b4} def
X		/B5 {b5} def
X		/unknown {unknown} def
X	papersizedict dup papername known {papername} {/unknown} ifelse get
X	end
X	stopped 
X	} bind def
X/desperatepapersize {
X	statusdict /setpageparams known
X		{
X		paperwidth paperheight 0 1 
X		statusdict begin
X		{setpageparams} stopped 
X		end
X		} {true} ifelse 
X	} bind def
X/DiacriticEncoding [
X/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
X/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
X/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
X/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
X/.notdef /.notdef /.notdef /.notdef /space /exclam /quotedbl
X/numbersign /dollar /percent /ampersand /quotesingle /parenleft
X/parenright /asterisk /plus /comma /hyphen /period /slash /zero /one
X/two /three /four /five /six /seven /eight /nine /colon /semicolon
X/less /equal /greater /question /at /A /B /C /D /E /F /G /H /I /J /K
X/L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /backslash
X/bracketright /asciicircum /underscore /grave /a /b /c /d /e /f /g /h
X/i /j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z /braceleft /bar
X/braceright /asciitilde /.notdef /Adieresis /Aring /Ccedilla /Eacute
X/Ntilde /Odieresis /Udieresis /aacute /agrave /acircumflex /adieresis
X/atilde /aring /ccedilla /eacute /egrave /ecircumflex /edieresis
X/iacute /igrave /icircumflex /idieresis /ntilde /oacute /ograve
X/ocircumflex /odieresis /otilde /uacute /ugrave /ucircumflex
X/udieresis /dagger /.notdef /cent /sterling /section /bullet
X/paragraph /germandbls /registered /copyright /trademark /acute
X/dieresis /.notdef /AE /Oslash /.notdef /.notdef /.notdef /.notdef
X/yen /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
X/ordfeminine /ordmasculine /.notdef /ae /oslash /questiondown
X/exclamdown /logicalnot /.notdef /florin /.notdef /.notdef
X/guillemotleft /guillemotright /ellipsis /.notdef /Agrave /Atilde
X/Otilde /OE /oe /endash /emdash /quotedblleft /quotedblright
X/quoteleft /quoteright /.notdef /.notdef /ydieresis /Ydieresis
X/fraction /currency /guilsinglleft /guilsinglright /fi /fl /daggerdbl
X/periodcentered /quotesinglbase /quotedblbase /perthousand
X/Acircumflex /Ecircumflex /Aacute /Edieresis /Egrave /Iacute
X/Icircumflex /Idieresis /Igrave /Oacute /Ocircumflex /.notdef /Ograve
X/Uacute /Ucircumflex /Ugrave /dotlessi /circumflex /tilde /macron
X/breve /dotaccent /ring /cedilla /hungarumlaut /ogonek /caron
X] def
X/ReEncode { 
X	dup 
X	length 
X	dict begin 
X	{
X	1 index /FID ne 
X		{def} 
X		{pop pop} ifelse 
X	} forall 
X	0 eq {/Encoding DiacriticEncoding def} if 
X	currentdict 
X	end 
X	} bind def
XFMPColor 
X	
X	{
X	/BEGINBITMAPCOLOR { 
X		BITMAPCOLOR} def
X	/BEGINBITMAPCOLORc { 
X		BITMAPCOLORc} def
X	/BEGINBITMAPTRUECOLOR { 
X		BITMAPTRUECOLOR } def
X	/BEGINBITMAPTRUECOLORc { 
X		BITMAPTRUECOLORc } def
X	}
X	
X	{
X	/BEGINBITMAPCOLOR { 
X		BITMAPGRAY} def
X	/BEGINBITMAPCOLORc { 
X		BITMAPGRAYc} def
X	/BEGINBITMAPTRUECOLOR { 
X		BITMAPTRUEGRAY } def
X	/BEGINBITMAPTRUECOLORc { 
X		BITMAPTRUEGRAYc } def
X	}
Xifelse
X/K { 
X	FMPrintAllColorsAsBlack {
X		dup 1 eq 2 index 1 eq and 3 index 1 eq and not
X			{7 {pop} repeat 0 0 0 1 0 0 0} if
X	} if 
X	FrameCurColors astore 
X	pop combineColor
X} bind def
X/graymode true def
X	/bwidth FMLOCAL
X	/bpside FMLOCAL
X	/bstring FMLOCAL
X	/onbits FMLOCAL
X	/offbits FMLOCAL
X	/xindex FMLOCAL
X	/yindex FMLOCAL
X	/x FMLOCAL
X	/y FMLOCAL
X/setPatternMode {
X	FMLevel1 {
X		/bwidth  exch def
X		/bpside  exch def
X		/bstring exch def
X		/onbits 0 def  /offbits 0 def
X		freq sangle landscape {90 add} if 
X			{/y exch def
X			 /x exch def
X			 /xindex x 1 add 2 div bpside mul cvi def
X			 /yindex y 1 add 2 div bpside mul cvi def
X			 bstring yindex bwidth mul xindex 8 idiv add get
X			 1 7 xindex 8 mod sub bitshift and 0 ne FrameNegative {not} if
X			 {/onbits  onbits  1 add def 1}
X			 {/offbits offbits 1 add def 0}
X			 ifelse
X			}
X			setscreen
X		offbits offbits onbits add div FrameNegative {1.0 exch sub} if
X		/FrameCurGray exch def
X	} { 
X		pop pop
X		dup patCache exch known {
X			patCache exch get
X		} { 
X			dup
X			patDict /bstring 3 -1 roll put
X			patDict 
X			9 PatFreq screenIndex get div dup matrix scale
X			makepattern
X			dup 
X			patCache 4 -1 roll 3 -1 roll put
X		} ifelse
X		/FrameCurGray 0 def
X		/FrameCurPat exch def
X	} ifelse
X	/graymode false def
X	combineColor
X} bind def
X/setGrayScaleMode {
X	graymode not {
X		/graymode true def
X		FMLevel1 {
X			setCurrentScreen
X		} if
X	} if
X	/FrameCurGray exch def
X	combineColor
X} bind def
X/normalize {
X	transform round exch round exch itransform
X	} bind def
X/dnormalize {
X	dtransform round exch round exch idtransform
X	} bind def
X/lnormalize { 
X	0 dtransform exch cvi 2 idiv 2 mul 1 add exch idtransform pop
X	} bind def
X/H { 
X	lnormalize setlinewidth
X	} bind def
X/Z {
X	setlinecap
X	} bind def
X	
X/PFill {
X	graymode FMLevel1 or not {
X		gsave 1 setgray eofill grestore
X	} if
X} bind def
X/PStroke {
X	graymode FMLevel1 or not {
X		gsave 1 setgray stroke grestore
X	} if
X	stroke
X} bind def
X	/fillvals FMLOCAL
X/X { 
X	fillvals exch get
X	dup type /stringtype eq
X	{8 1 setPatternMode} 
X	{setGrayScaleMode}
X	ifelse
X	} bind def
X/V { 
X	PFill gsave eofill grestore
X	} bind def
X/Vclip {
X	clip
X	} bind def
X/Vstrk {
X	currentlinewidth exch setlinewidth PStroke setlinewidth
X	} bind def
X/N { 
X	PStroke
X	} bind def
X/Nclip {
X	strokepath clip newpath
X	} bind def
X/Nstrk {
X	currentlinewidth exch setlinewidth PStroke setlinewidth
X	} bind def
X/M {newpath moveto} bind def
X/E {lineto} bind def
X/D {curveto} bind def
X/O {closepath} bind def
X	/n FMLOCAL
X/L { 
X 	/n exch def
X	newpath
X	normalize
X	moveto 
X	2 1 n {pop normalize lineto} for
X	} bind def
X/Y { 
X	L 
X	closepath
X	} bind def
X	/x1 FMLOCAL
X	/x2 FMLOCAL
X	/y1 FMLOCAL
X	/y2 FMLOCAL
X/R { 
X	/y2 exch def
X	/x2 exch def
X	/y1 exch def
X	/x1 exch def
X	x1 y1
X	x2 y1
X	x2 y2
X	x1 y2
X	4 Y 
X	} bind def
X	/rad FMLOCAL
X/rarc 
X	{rad 
X	 arcto
X	} bind def
X/RR { 
X	/rad exch def
X	normalize
X	/y2 exch def
X	/x2 exch def
X	normalize
X	/y1 exch def
X	/x1 exch def
X	mark
X	newpath
X	{
X	x1 y1 rad add moveto
X	x1 y2 x2 y2 rarc
X	x2 y2 x2 y1 rarc
X	x2 y1 x1 y1 rarc
X	x1 y1 x1 y2 rarc
X	closepath
X	} stopped {x1 y1 x2 y2 R} if 
X	cleartomark
X	} bind def
X/RRR { 
X	/rad exch def
X	normalize /y4 exch def /x4 exch def
X	normalize /y3 exch def /x3 exch def
X	normalize /y2 exch def /x2 exch def
X	normalize /y1 exch def /x1 exch def
X	newpath
X	normalize moveto 
X	mark
X	{
X	x2 y2 x3 y3 rarc
X	x3 y3 x4 y4 rarc
X	x4 y4 x1 y1 rarc
X	x1 y1 x2 y2 rarc
X	closepath
X	} stopped
X	 {x1 y1 x2 y2 x3 y3 x4 y4 newpath moveto lineto lineto lineto closepath} if
X	cleartomark
X	} bind def
X/C { 
X	grestore
X	gsave
X	R 
X	clip
X	setCurrentScreen
X} bind def
X/CP { 
X	grestore
X	gsave
X	Y 
X	clip
X	setCurrentScreen
X} bind def
X	/FMpointsize FMLOCAL
X/F { 
X	FMfonts exch get
X	FMpointsize scalefont
X	setfont
X	} bind def
X/Q { 
X	/FMpointsize exch def
X	F 
X	} bind def
X/T { 
X	moveto show
X	} bind def
X/RF { 
X	rotate
X	0 ne {-1 1 scale} if
X	} bind def
X/TF { 
X	gsave
X	moveto 
X	RF
X	show
X	grestore
X	} bind def
X/P { 
X	moveto
X	0 32 3 2 roll widthshow
X	} bind def
X/PF { 
X	gsave
X	moveto 
X	RF
X	0 32 3 2 roll widthshow
X	grestore
X	} bind def
X/S { 
X	moveto
X	0 exch ashow
X	} bind def
X/SF { 
X	gsave
X	moveto
X	RF
X	0 exch ashow
X	grestore
X	} bind def
X/B { 
X	moveto
X	0 32 4 2 roll 0 exch awidthshow
X	} bind def
X/BF { 
X	gsave
X	moveto
X	RF
X	0 32 4 2 roll 0 exch awidthshow
X	grestore
X	} bind def
X/G { 
X	gsave
X	newpath
X	normalize translate 0.0 0.0 moveto 
X	dnormalize scale 
X	0.0 0.0 1.0 5 3 roll arc 
X	closepath 
X	PFill fill
X	grestore
X	} bind def
X/Gstrk {
X	savematrix
X    newpath
X    2 index 2 div add exch 3 index 2 div sub exch 
X    normalize 2 index 2 div sub exch 3 index 2 div add exch 
X    translate
X    scale 
X    0.0 0.0 1.0 5 3 roll arc 
X    restorematrix
X    currentlinewidth exch setlinewidth PStroke setlinewidth
X    } bind def
X/Gclip { 
X	newpath
X	savematrix
X	normalize translate 0.0 0.0 moveto 
X	dnormalize scale 
X	0.0 0.0 1.0 5 3 roll arc 
X	closepath 
X	clip newpath
X	restorematrix
X	} bind def
X/GG { 
X	gsave
X	newpath
X	normalize translate 0.0 0.0 moveto 
X	rotate 
X	dnormalize scale 
X	0.0 0.0 1.0 5 3 roll arc 
X	closepath
X	PFill
X	fill
X	grestore
X	} bind def
X/GGclip { 
X	savematrix
X	newpath
X    normalize translate 0.0 0.0 moveto 
X    rotate 
X    dnormalize scale 
X    0.0 0.0 1.0 5 3 roll arc 
X    closepath
X	clip newpath
X	restorematrix
X	} bind def
X/GGstrk { 
X	savematrix
X    newpath
X    normalize translate 0.0 0.0 moveto 
X    rotate 
X    dnormalize scale 
X    0.0 0.0 1.0 5 3 roll arc 
X    closepath 
X	restorematrix
X    currentlinewidth exch setlinewidth PStroke setlinewidth
X	} bind def
X/A { 
X	gsave
X	savematrix
X	newpath
X	2 index 2 div add exch 3 index 2 div sub exch 
X	normalize 2 index 2 div sub exch 3 index 2 div add exch 
X	translate 
X	scale 
X	0.0 0.0 1.0 5 3 roll arc 
X	restorematrix
X	PStroke
X	grestore
X	} bind def
X/Aclip {
X	newpath
X	savematrix
X	normalize translate 0.0 0.0 moveto 
X	dnormalize scale 
X	0.0 0.0 1.0 5 3 roll arc 
X	closepath 
X	strokepath clip newpath
X	restorematrix
X} bind def
X/Astrk {
X	Gstrk
X} bind def
X/AA { 
X	gsave
X	savematrix
X	newpath
X	
X	3 index 2 div add exch 4 index 2 div sub exch 
X	
X	normalize 3 index 2 div sub exch 4 index 2 div add exch
X	translate 
X	rotate 
X	scale 
X	0.0 0.0 1.0 5 3 roll arc 
X	restorematrix
X	PStroke
X	grestore
X	} bind def
X/AAclip {
X	savematrix
X	newpath
X    normalize translate 0.0 0.0 moveto 
X    rotate 
X    dnormalize scale 
X    0.0 0.0 1.0 5 3 roll arc 
X    closepath
X	strokepath clip newpath
X	restorematrix
X} bind def
X/AAstrk {
X	GGstrk
X} bind def
X	/x FMLOCAL
X	/y FMLOCAL
X	/w FMLOCAL
X	/h FMLOCAL
X	/xx FMLOCAL
X	/yy FMLOCAL
X	/ww FMLOCAL
X	/hh FMLOCAL
X	/FMsaveobject FMLOCAL
X	/FMoptop FMLOCAL
X	/FMdicttop FMLOCAL
X/BEGINPRINTCODE { 
X	/FMdicttop countdictstack 1 add def 
X	/FMoptop count 7 sub def 
X	/FMsaveobject save def
X	userdict begin 
X	/showpage {} def 
X	FMNORMALIZEGRAPHICS 
X	3 index neg 3 index neg translate
X	} bind def
X/ENDPRINTCODE {
X	count -1 FMoptop {pop pop} for 
X	countdictstack -1 FMdicttop {pop end} for 
X	FMsaveobject restore 
X	} bind def
X/gn { 
X	0 
X	{	46 mul 
X		cf read pop 
X		32 sub 
X		dup 46 lt {exit} if 
X		46 sub add 
X		} loop
X	add 
X	} bind def
X	/str FMLOCAL
X/cfs { 
X	/str sl string def 
X	0 1 sl 1 sub {str exch val put} for 
X	str def 
X	} bind def
X/ic [ 
X	0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0223
X	0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0223
X	0
X	{0 hx} {1 hx} {2 hx} {3 hx} {4 hx} {5 hx} {6 hx} {7 hx} {8 hx} {9 hx}
X	{10 hx} {11 hx} {12 hx} {13 hx} {14 hx} {15 hx} {16 hx} {17 hx} {18 hx}
X	{19 hx} {gn hx} {0} {1} {2} {3} {4} {5} {6} {7} {8} {9} {10} {11} {12}
X	{13} {14} {15} {16} {17} {18} {19} {gn} {0 wh} {1 wh} {2 wh} {3 wh}
X	{4 wh} {5 wh} {6 wh} {7 wh} {8 wh} {9 wh} {10 wh} {11 wh} {12 wh}
X	{13 wh} {14 wh} {gn wh} {0 bl} {1 bl} {2 bl} {3 bl} {4 bl} {5 bl} {6 bl}
X	{7 bl} {8 bl} {9 bl} {10 bl} {11 bl} {12 bl} {13 bl} {14 bl} {gn bl}
X	{0 fl} {1 fl} {2 fl} {3 fl} {4 fl} {5 fl} {6 fl} {7 fl} {8 fl} {9 fl}
X	{10 fl} {11 fl} {12 fl} {13 fl} {14 fl} {gn fl}
X	] def
X	/sl FMLOCAL
X	/val FMLOCAL
X	/ws FMLOCAL
X	/im FMLOCAL
X	/bs FMLOCAL
X	/cs FMLOCAL
X	/len FMLOCAL
X	/pos FMLOCAL
X/ms { 
X	/sl exch def 
X	/val 255 def 
X	/ws cfs 
X	/im cfs 
X	/val 0 def 
X	/bs cfs 
X	/cs cfs 
X	} bind def
X400 ms 
X/ip { 
X	is 
X	0 
X	cf cs readline pop 
X	{	ic exch get exec 
X		add 
X		} forall 
X	pop 
X	
X	} bind def
X/rip { 
X	   
X	  
X	  bis ris copy pop 
X      is
X      0
X      cf cs readline pop 
X      {       ic exch get exec 
X              add 
X              } forall 
X	  pop pop 
X	  ris gis copy pop 
X	  dup is exch 
X	  
X      cf cs readline pop 
X      {       ic exch get exec 
X              add 
X              } forall 
X	  pop pop
X	  gis bis copy pop 
X	  dup add is exch 
X	  
X      cf cs readline pop 
X      {       ic exch get exec 
X              add 
X              } forall 
X      pop 
X      
X      } bind def
X/wh { 
X	/len exch def 
X	/pos exch def 
X	ws 0 len getinterval im pos len getinterval copy pop
X	pos len 
X	} bind def
X/bl { 
X	/len exch def 
X	/pos exch def 
X	bs 0 len getinterval im pos len getinterval copy pop
X	pos len 
X	} bind def
X/s1 1 string def
X/fl { 
X	/len exch def 
X	/pos exch def 
X	/val cf s1 readhexstring pop 0 get def
X	pos 1 pos len add 1 sub {im exch val put} for
X	pos len 
X	} bind def
X/hx { 
X	3 copy getinterval 
X	cf exch readhexstring pop pop 
X	} bind def
X	/h FMLOCAL
X	/w FMLOCAL
X	/d FMLOCAL
X	/lb FMLOCAL
X	/bitmapsave FMLOCAL
X	/is FMLOCAL
X	/cf FMLOCAL
X/wbytes { 
X      dup dup
X      24 eq { pop pop 3 mul }
X      { 8 eq {pop} {1 eq {7 add 8 idiv} {3 add 4 idiv} ifelse} ifelse } ifelse
X	} bind def
X/BEGINBITMAPBWc { 
X	1 {} COMMONBITMAPc
X	} bind def
X/BEGINBITMAPGRAYc { 
X	8 {} COMMONBITMAPc
X	} bind def
X/BEGINBITMAP2BITc { 
X	2 {} COMMONBITMAPc
X	} bind def
X/COMMONBITMAPc { 
X		 
X	/r exch def
X	/d exch def
X	gsave
X	
X	3 index 2 div add exch	
X	4 index 2 div add exch	
X	translate		
X	rotate			
X	1 index 2 div neg	
X	1 index 2 div neg	
X	translate		
X	scale			
X	/h exch def /w exch def
X	/lb w d wbytes def 
X	sl lb lt {lb ms} if 
X	/bitmapsave save def 
X	r                    
X	/is im 0 lb getinterval def 
X	ws 0 lb getinterval is copy pop 
X	/cf currentfile def 
X	w h d [w 0 0 h neg 0 h] 
X	{ip} image 
X	bitmapsave restore 
X	grestore
X	} bind def
X/BEGINBITMAPBW { 
X	1 {} COMMONBITMAP
X	} bind def
X/BEGINBITMAPGRAY { 
X	8 {} COMMONBITMAP
X	} bind def
X/BEGINBITMAP2BIT { 
X	2 {} COMMONBITMAP
X	} bind def
X/COMMONBITMAP { 
X	/r exch def
X	/d exch def
X	gsave
X	
X	3 index 2 div add exch	
X	4 index 2 div add exch	
X	translate		
X	rotate			
X	1 index 2 div neg	
X	1 index 2 div neg	
X	translate		
X	scale			
X	/h exch def /w exch def
X	/bitmapsave save def 
X	r                    
X	/is w d wbytes string def
X	/cf currentfile def 
X	w h d [w 0 0 h neg 0 h] 
X	{cf is readhexstring pop} image
X	bitmapsave restore 
X	grestore
X	} bind def
X/ngrayt 256 array def
X/nredt 256 array def
X/nbluet 256 array def
X/ngreent 256 array def
X	/gryt FMLOCAL
X	/blut FMLOCAL
X	/grnt FMLOCAL
X	/redt FMLOCAL
X	/indx FMLOCAL
X	/cynu FMLOCAL
X	/magu FMLOCAL
X	/yelu FMLOCAL
X	/k FMLOCAL
X	/u FMLOCAL
XFMLevel1 {
X/colorsetup {
X	currentcolortransfer
X	/gryt exch def
X	/blut exch def
X	/grnt exch def
X	/redt exch def
X	0 1 255 {
X		/indx exch def
X		/cynu 1 red indx get 255 div sub def
X		/magu 1 green indx get 255 div sub def
X		/yelu 1 blue indx get 255 div sub def
X		/k cynu magu min yelu min def
X		/u k currentundercolorremoval exec def
X%		/u 0 def
X		nredt indx 1 0 cynu u sub max sub redt exec put
X		ngreent indx 1 0 magu u sub max sub grnt exec put
X		nbluet indx 1 0 yelu u sub max sub blut exec put
X		ngrayt indx 1 k currentblackgeneration exec sub gryt exec put
X	} for
X	{255 mul cvi nredt exch get}
X	{255 mul cvi ngreent exch get}
X	{255 mul cvi nbluet exch get}
X	{255 mul cvi ngrayt exch get}
X	setcolortransfer
X	{pop 0} setundercolorremoval
X	{} setblackgeneration
X	} bind def
X}
X{
X/colorSetup2 {
X	[ /Indexed /DeviceRGB 255 
X		{dup red exch get 255 div 
X		 exch dup green exch get 255 div 
X		 exch blue exch get 255 div}
X	] setcolorspace
X} bind def
X} ifelse
X	/tran FMLOCAL
X/fakecolorsetup {
X	/tran 256 string def
X	0 1 255 {/indx exch def 
X		tran indx
X		red indx get 77 mul
X		green indx get 151 mul
X		blue indx get 28 mul
X		add add 256 idiv put} for
X	currenttransfer
X	{255 mul cvi tran exch get 255.0 div}
X	exch concatprocs settransfer
X} bind def
X/BITMAPCOLOR { 
X	/d 8 def
X	gsave
X	
X	3 index 2 div add exch	
X	4 index 2 div add exch	
X	translate		
X	rotate			
X	1 index 2 div neg	
X	1 index 2 div neg	
X	translate		
X	scale			
X	/h exch def /w exch def
X	/bitmapsave save def
X	FMLevel1 {	
X		colorsetup
X		/is w d wbytes string def
X		/cf currentfile def 
X		w h d [w 0 0 h neg 0 h] 
X		{cf is readhexstring pop} {is} {is} true 3 colorimage 
X	} {
X		colorSetup2
X		/is w d wbytes string def
X		/cf currentfile def 
X		7 dict dup begin
X			/ImageType 1 def
X			/Width w def
X			/Height h def
X			/ImageMatrix [w 0 0 h neg 0 h] def
X			/DataSource {cf is readhexstring pop} bind def
X			/BitsPerComponent d def
X			/Decode [0 255] def
X		end image	
X	} ifelse
X	bitmapsave restore 
X	grestore
X	} bind def
X/BITMAPCOLORc { 
X	/d 8 def
X	gsave
X	
X	3 index 2 div add exch	
X	4 index 2 div add exch	
X	translate		
X	rotate			
X	1 index 2 div neg	
X	1 index 2 div neg	
X	translate		
X	scale			
X	/h exch def /w exch def
X	/lb w d wbytes def 
X	sl lb lt {lb ms} if 
X	/bitmapsave save def 
X	FMLevel1 {	
X		colorsetup
X		/is im 0 lb getinterval def 
X		ws 0 lb getinterval is copy pop 
X		/cf currentfile def 
X		w h d [w 0 0 h neg 0 h] 
X		{ip} {is} {is} true 3 colorimage
X	} {
X		colorSetup2
X		/is im 0 lb getinterval def 
X		ws 0 lb getinterval is copy pop 
X		/cf currentfile def 
X		7 dict dup begin
X			/ImageType 1 def
X			/Width w def
X			/Height h def
X			/ImageMatrix [w 0 0 h neg 0 h] def
X			/DataSource {ip} bind def
X			/BitsPerComponent d def
X			/Decode [0 255] def
X		end image	
X	} ifelse
X	bitmapsave restore 
X	grestore
X	} bind def
X/BITMAPTRUECOLORc { 
X	/d 24 def
X        gsave
X 	
X	3 index 2 div add exch	
X	4 index 2 div add exch	
X	translate		
X	rotate			
X	1 index 2 div neg	
X	1 index 2 div neg	
X	translate		
X	scale			
X	/h exch def /w exch def
X	/lb w d wbytes def 
X	sl lb lt {lb ms} if 
X        /bitmapsave save def 
X        
X	/is im 0 lb getinterval def	
X	/ris im 0 w getinterval def	
X	/gis im w w getinterval def	
X	/bis im w 2 mul w getinterval def 
X        
X        ws 0 lb getinterval is copy pop 
X        /cf currentfile def 
X        w h 8 [w 0 0 h neg 0 h] 
X        {w rip pop ris} {gis} {bis} true 3 colorimage
X        bitmapsave restore 
X        grestore
X        } bind def
X/BITMAPTRUECOLOR { 
X        gsave
X		
X		3 index 2 div add exch	
X		4 index 2 div add exch	
X		translate		
X		rotate			
X		1 index 2 div neg	
X		1 index 2 div neg	
X		translate		
X		scale			
X		/h exch def /w exch def
X        /bitmapsave save def 
X        /is w string def
X        /gis w string def
X        /bis w string def
X        /cf currentfile def 
X        w h 8 [w 0 0 h neg 0 h] 
X        { cf is readhexstring pop } 
X        { cf gis readhexstring pop } 
X        { cf bis readhexstring pop } 
X        true 3 colorimage 
X        bitmapsave restore 
X        grestore
X        } bind def
X/BITMAPTRUEGRAYc { 
X	/d 24 def
X        gsave
X	
X	3 index 2 div add exch	
X	4 index 2 div add exch	
X	translate		
X	rotate			
X	1 index 2 div neg	
X	1 index 2 div neg	
X	translate		
X	scale			
X	/h exch def /w exch def
X	/lb w d wbytes def 
X	sl lb lt {lb ms} if 
X        /bitmapsave save def 
X        
X	/is im 0 lb getinterval def	
X	/ris im 0 w getinterval def	
X	/gis im w w getinterval def	
X	/bis im w 2 mul w getinterval def 
X        ws 0 lb getinterval is copy pop 
X        /cf currentfile def 
X        w h 8 [w 0 0 h neg 0 h] 
X        {w rip pop ris gis bis w gray} image
X        bitmapsave restore 
X        grestore
X        } bind def
X/ww FMLOCAL
X/r FMLOCAL
X/g FMLOCAL
X/b FMLOCAL
X/i FMLOCAL
X/gray { 
X        /ww exch def
X        /b exch def
X        /g exch def
X        /r exch def
X        0 1 ww 1 sub { /i exch def r i get .299 mul g i get .587 mul
X			b i get .114 mul add add r i 3 -1 roll floor cvi put } for
X        r
X        } bind def
X/BITMAPTRUEGRAY { 
X        gsave
X		
X		3 index 2 div add exch	
X		4 index 2 div add exch	
X		translate		
X		rotate			
X		1 index 2 div neg	
X		1 index 2 div neg	
X		translate		
X		scale			
X		/h exch def /w exch def
X        /bitmapsave save def 
X        /is w string def
X        /gis w string def
X        /bis w string def
X        /cf currentfile def 
X        w h 8 [w 0 0 h neg 0 h] 
X        { cf is readhexstring pop 
X          cf gis readhexstring pop 
X          cf bis readhexstring pop w gray}  image
X        bitmapsave restore 
X        grestore
X        } bind def
X/BITMAPGRAY { 
X	8 {fakecolorsetup} COMMONBITMAP
X	} bind def
X/BITMAPGRAYc { 
X	8 {fakecolorsetup} COMMONBITMAPc
X	} bind def
X/ENDBITMAP {
X	} bind def
Xend 
X	/ALDsave FMLOCAL
X	/ALDmatrix matrix def ALDmatrix currentmatrix pop
X/StartALD {
X	/ALDsave save def
X	 savematrix
X	 ALDmatrix setmatrix
X	} bind def
X/InALD {
X	 restorematrix
X	} bind def
X/DoneALD {
X	 ALDsave restore
X	} bind def
X/I { setdash } bind def
X/J { [] 0 setdash } bind def
X%%EndProlog
X%%BeginSetup
X(4.0) FMVERSION
X1 1 0 0 612 792 0 1 17 FMDOCUMENT
X0 0 /Times-Roman FMFONTDEFINE
X1 0 /AvantGarde-Demi FMFONTDEFINE
X2 0 /Helvetica-Bold FMFONTDEFINE
X3 0 /Helvetica FMFONTDEFINE
X4 0 /Helvetica-Oblique FMFONTDEFINE
X5 0 /AvantGarde-Book FMFONTDEFINE
X6 0 /Times-Bold FMFONTDEFINE
X7 0 /Courier FMFONTDEFINE
X8 0 /AvantGarde-BookOblique FMFONTDEFINE
X32 FMFILLS
X0 0 FMFILL
X1 0.1 FMFILL
X2 0.3 FMFILL
X3 0.5 FMFILL
X4 0.7 FMFILL
X5 0.9 FMFILL
X6 0.97 FMFILL
X7 1 FMFILL
X8 <0f1e3c78f0e1c387> FMFILL
X9 <0f87c3e1f0783c1e> FMFILL
X10 <cccccccccccccccc> FMFILL
X11 <ffff0000ffff0000> FMFILL
X12 <8142241818244281> FMFILL
X13 <03060c183060c081> FMFILL
X14 <8040201008040201> FMFILL
X16 1 FMFILL
X17 0.9 FMFILL
X18 0.7 FMFILL
X19 0.5 FMFILL
X20 0.3 FMFILL
X21 0.1 FMFILL
X22 0.03 FMFILL
X23 0 FMFILL
X24 <f0e1c3870f1e3c78> FMFILL
X25 <f0783c1e0f87c3e1> FMFILL
X26 <3333333333333333> FMFILL
X27 <0000ffff0000ffff> FMFILL
X28 <7ebddbe7e7dbbd7e> FMFILL
X29 <fcf9f3e7cf9f3f7e> FMFILL
X30 <7fbfdfeff7fbfdfe> FMFILL
X%%EndSetup
X%%Page: "1" 1
X%%BeginPaperSize: Letter
X%%EndPaperSize
X612 792 0 FMBEGINPAGE
X[0 0 0 1 0 0 0]
X[ 0 0 0 0 1 1 1]
X[ 0 1 1 0 1 0 0]
X[ 1 0 1 0 0 1 0]
X[ 1 1 0 0 0 0 1]
X[ 1 0 0 0 0 1 1]
X[ 0 1 0 0 1 0 1]
X[ 0 0 1 0 1 1 0]
X 8 FrameSetSepColors
XFrameNoSep
X0 0 0 1 0 0 0 K
XJ
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 10 Q
X0 X
X0 0 0 1 0 0 0 K
X(.. 1) 527.5 36 T
X0 0 0 1 0 0 0 K
X33 54 597 54 2 L
X3 H
X2 Z
X4 X
XN
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X72 690 540 702 C
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X72 701 540 701 2 L
X1 H
X2 Z
X0 X
X0 0 0 1 0 0 0 K
XN
X72 698 540 698 2 L
XN
X0 -208 1000 792 C
X1 18 Q
X0 X
X0 0 0 1 0 0 0 K
X(fmweb) 95.08 708 T
X2 F
X(: Literate Programming using FrameMaker) 154.84 708 T
X3 10 Q
X(V) 280.98 672.33 T
X(ersion 1.0) 287.11 672.33 T
X(Sriram Srinivasan) 266.55 660.33 T
X(\050) 266.48 648.33 T
X4 F
X(sriram@tcs.com) 269.82 648.33 T
X3 F
X(\051) 342.18 648.33 T
X72 605 540 615 C
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X72 614 540 614 2 L
X1 H
X2 Z
X0 X
X0 0 0 1 0 0 0 K
XN
X0 -208 1000 792 C
X2 14 Q
X0 X
X0 0 0 1 0 0 0 K
X(Introduction) 72 619.67 T
X3 10 Q
X0.04 (This document explains a simple approach for doing literate programming using FrameMaker) 72 590.33 P
X0.04 (, a word pro-) 483.74 590.33 P
X0.44 (cessing system. It is almost identical to the approach taken by WinW) 72 577.71 P
X0.44 (ordWEB [2], except that it can addi-) 380.08 577.71 P
X(tionally be used in batch mode.) 72 565.71 T
X2.03 (All implementations of literate programming provide facilities to break a piece of code into digestible) 72 548.71 P
X-0.27 (chunks which can be documented individually) 72 536.71 P
X-0.27 (, and explained in any order) 272.2 536.71 P
X-0.27 (. The only dif) 393.69 536.71 P
X-0.27 (ference is in the way) 449.94 536.71 P
X0.52 (the document should be written so that a tool can separate the code from the rest of the documentation.) 72 524.71 P
X0.23 (WEB and such other tools provide a way of doing \322in-band signalling\323, to borrow a term from communica-) 72 512.71 P
X1.61 (tions. The programmer annotates dif) 72 500.71 P
X1.61 (ferent parts of a document by keywords, and a program such as) 239.42 500.71 P
X0.08 (weave or tangle recognizes these keywords. In addition, these programs provide features such as section) 72 488.71 P
X(numbering, indexing etc. and language speci\336c features such as pretty-printing, macro expansion etc.) 72 476.71 T
X0.76 (The other approach is to do \322out-of-band signalling\323, where the formatting information is essentially kept) 72 459.71 P
X(out of the documentation. This is the approach taken by fmweb and WinW) 72 447.71 T
X(ordWEB.) 399.2 447.71 T
X(There are a couple of reasons why I don\325t use WEB based tools.) 72 430.71 T
X(\245) 72 413.71 T
X(It is always nice to see the output of a literate programming ef) 90 413.71 T
X(fort, but the input is rather messy) 362.17 413.71 T
X(. I dis-) 507.05 413.71 T
X(like seeing a lot of meta characters \050like @, <<, \134, [[ \051 etc. The sections are not immediately visible -) 90 401.71 T
X(one goes around looking for \322\134section\323, for example. I do a fair amount of coding in) 90 389.71 T
X5 F
X(perl) 455.74 389.71 T
X3 F
X(, and the two) 474.07 389.71 T
X(notational structures put together make my head swim, esp. when I need to alter the code a few) 90 377.71 T
X(months later) 90 365.71 T
X(. Having access to a WYSIWIG word processor such as FrameMaker means that I don\325t) 144.47 365.71 T
X(use T) 90 353.71 T
X(eX, and it is too much of an ef) 113.9 353.71 T
X(fort to learn the intricacies of LaT) 246.02 353.71 T
X(ex or T) 390.53 353.71 T
X(eX to be able to use the) 420.54 353.71 T
X(WEB based tools.) 90 341.71 T
X(\245) 72 324.71 T
X(A number of these tools are language speci\336c.) 90 324.71 T
X5 F
X(noweb) 298.44 324.71 T
X3 F
X( is one exception to this rule, and I rather like) 332.72 324.71 T
X(the simplicity of noweb. I don\325t use noweb because of the reason explained above.) 90 312.71 T
X-0.13 (FrameMaker) 72 295.71 P
X-0.13 (, like other good word processors, has excellent document formatting capabilities, cross refer-) 128.12 295.71 P
X0.58 (encing and indexing, table of contents, graphics, tables etc. What I see on the screen is the \336nal output,) 72 283.71 P
X(uncluttered by meta-information.) 72 271.71 T
X0.2 (One problem that I have with this approach is that I am used to a Unix like development environment and) 72 254.71 P
X0.13 (extensively use text based tools such as emacs/vi, perl, dif) 72 242.71 P
X0.13 (f, sccs etc. For this reason, I have not tried this) 331.97 242.71 P
X(approach on medium or larger sized implementations, though I hope to do that in the near future.) 72 230.71 T
X0.28 (In general, I am somewhat unclear on how the literate programming paradigm helps a developer to think.) 72 213.71 P
X0.74 (The prevailing wisdom is that this approach forces a lot more disciplined thinking on the part of the pro-) 72 201.71 P
X0.09 (grammer) 72 189.71 P
X0.09 (, since \050s\051he is in a teaching mode. I \336nd that this helps in structuring the program well, once one) 111.45 189.71 P
X-0.22 (knows what one should be doing, but if I don\325t have a top-down \050step-wise re\336nement\051 solution in my mind,) 72 177.71 P
X0.02 (I am not entirely sure how to start from a blank page. I tend to do small sections of the code using my reg-) 72 165.71 P
X-0.03 (ular development environment, and once I have a reasonable top-down solution in mind, copy it all over to) 72 153.71 P
X(a FrameMaker \336le and start re\336ning it.) 72 141.71 T
X72 98.38 540 108.38 C
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X72 107.38 540 107.38 2 L
X1 H
X2 Z
X0 X
X0 0 0 1 0 0 0 K
XN
X0 -208 1000 792 C
X2 14 Q
X0 X
X0 0 0 1 0 0 0 K
X(The fmweb approach) 72 113.04 T
X3 10 Q
X(T) 72 83.71 T
X(o separate the code from the rest of the stuf) 77 83.71 T
X(f, the developer uses three paragraph formats.) 270.82 83.71 T
X0 0 0 1 0 0 0 K
XFMENDPAGE
X%%EndPage: "1" 1
X%%Page: "2" 2
X612 792 0 FMBEGINPAGE
X[0 0 0 1 0 0 0]
X[ 0 0 0 0 1 1 1]
X[ 0 1 1 0 1 0 0]
X[ 1 0 1 0 0 1 0]
X[ 1 1 0 0 0 0 1]
X[ 1 0 0 0 0 1 1]
X[ 0 1 0 0 1 0 1]
X[ 0 0 1 0 1 1 0]
X 8 FrameSetSepColors
XFrameNoSep
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 10 Q
X0 X
X0 0 0 1 0 0 0 K
X(.. 2) 527.5 36 T
X0 0 0 1 0 0 0 K
X33 54 597 54 2 L
X3 H
X2 Z
X4 X
XN
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X3 F
X0 X
X(\245) 72 713.33 T
X(\322File\323: The \336le name is mentioned in this paragraph, and all subsequent lines will eventually be) 90 713.33 T
X(dumped into this \336le.) 90 701.33 T
X(\245) 72 684.33 T
X(\322chunk\323: A chunk \050or section\051 is a heading followed by a set of \322code\323 paragraphs. The \322chunk\323 para-) 90 684.33 T
X(graph tag identi\336es the heading for that section. It is possible to have more than one chunk with the) 90 672.33 T
X(same name.) 90 660.33 T
X(\245) 72 643.33 T
X-0.36 (\322code\323: The developer writes code \050in any language\051 using this paragraph tag. The Frame Maker cross) 90 643.33 P
X(reference facility has to be used to refer to chunks.) 90 631.33 T
X5 F
X-0.16 (fmweb) 72 614.33 P
X3 F
X-0.16 ( is a perl script that needs the FrameMaker document in a MIF format - it extracts chunks and code) 106.15 614.33 P
X0.42 (paragraphs out, and does the requisite tangling \050restoring the order of chunks\051. All chunks with the same) 72 602.33 P
X0.35 (name are concatenated in the order they appear in the document.) 72 590.33 P
X5 F
X0.35 (fmweb) 369.39 590.33 P
X3 F
X0.35 ( ignores all formatting informa-) 403.54 590.33 P
X(tion. Source line number information can be optionally output, in a format accepted by) 72 578.33 T
X5 F
X(cc) 453.3 578.33 T
X3 F
X( \050#line\051.) 466.24 578.33 T
X72 535 540 545 C
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X72 544 540 544 2 L
X1 H
X2 Z
X0 X
X0 0 0 1 0 0 0 K
XN
X0 0 612 792 C
X2 14 Q
X0 X
X0 0 0 1 0 0 0 K
X(References) 72 549.67 T
X3 10 Q
X(1.) 72 520.33 T
X1 (\322Literate Programming\323, Donald Knuth, Center for the Study of Language and Information, Stanford) 90 520.33 P
X(University) 90 508.33 T
X(, ISBN 0-937073-80-6) 133.15 508.33 T
X(2.) 72 494.33 T
X0.82 (WEB: http://info.desy) 90 494.33 P
X0.82 (.de/user/projects/LitProg/HTML.html - A pointer to all the other good stuf) 183.46 494.33 P
X0.82 (f avail-) 509.73 494.33 P
X(able on the net.) 90 482.33 T
X72 439 540 449 C
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X72 448 540 448 2 L
X1 H
X2 Z
X0 X
X0 0 0 1 0 0 0 K
XN
X0 0 612 792 C
X2 14 Q
X0 X
X0 0 0 1 0 0 0 K
X(Unpacking the distribution) 72 453.67 T
X3 10 Q
X0.08 (This document contains an example program \050wc.c\051 written in the format explained above, and the fmweb) 72 424.33 P
X(script, along with some internal documentation.) 72 412.33 T
X(Save this \336le as wc.mif. This \336le will be used to test out the fmweb script.) 72 395.33 T
X-0.04 (T) 72 378.33 P
X-0.04 (o extract fmweb \050a perl5 script\051, go to Special->Conditional T) 77 378.33 P
X-0.04 (ext -> Show/Hide..., and hide the conditional) 344.28 378.33 P
X(tag called \322Fluf) 72 366.33 T
X(f\323. Only the perl script should be remaining. Save this \336le as text only) 137.4 366.33 T
X(, and call it fmweb.) 440.12 366.33 T
X0.18 (Run fmweb - \322perl5 fmweb < wc.mif\323. This should produce a \336le called wc.c in the local directory) 72 349.33 P
X0.18 (. Compile) 497.58 349.33 P
X(and execute wc, and compare against the system provided \322wc\323, if on a Unix system.) 72 337.33 T
X72 294 540 304 C
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X72 303 540 303 2 L
X1 H
X2 Z
X0 X
X0 0 0 1 0 0 0 K
XN
X0 0 612 792 C
X2 14 Q
X0 X
X0 0 0 1 0 0 0 K
X(T) 72 308.67 T
X(oDo) 79.52 308.67 T
X3 10 Q
X(\245) 72 279.33 T
X(Support multiple \336les) 90 279.33 T
X(\245) 72 262.33 T
X(Largish example - map library) 90 262.33 T
X(\245) 72 245.33 T
X(Speed up) 90 245.33 T
X(\245) 72 228.33 T
X(Look at mml) 90 228.33 T
X(\245) 72 211.33 T
X(Accept \336lenames as arguments) 90 211.33 T
X0 0 0 1 0 0 0 K
XFMENDPAGE
X%%EndPage: "2" 2
X%%Page: "3" 3
X612 792 0 FMBEGINPAGE
X[0 0 0 1 0 0 0]
X[ 0 0 0 0 1 1 1]
X[ 0 1 1 0 1 0 0]
X[ 1 0 1 0 0 1 0]
X[ 1 1 0 0 0 0 1]
X[ 1 0 0 0 0 1 1]
X[ 0 1 0 0 1 0 1]
X[ 0 0 1 0 1 1 0]
X 8 FrameSetSepColors
XFrameNoSep
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 10 Q
X0 X
X0 0 0 1 0 0 0 K
X(.. 3) 527.5 36 T
X0 0 0 1 0 0 0 K
X33 54 597 54 2 L
X3 H
X2 Z
X4 X
XN
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X72 696 540 706 C
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X72 705 540 705 2 L
X1 H
X2 Z
X0 X
X0 0 0 1 0 0 0 K
XN
X0 0 612 792 C
X2 14 Q
X0 X
X0 0 0 1 0 0 0 K
X(Appendix A: \324wc\325: A word count program) 72 710.67 T
X3 10 Q
X0.28 (This section demonstrates how one can do Literate Programming with FrameMaker) 72 664.33 P
X0.28 (. There are only three) 443.28 664.33 P
X-0.21 (paragraph tags of interest - File \050see \322File:\323 below\051, \322chunk\323 \050all the numbered paragraphs\051 and \322code\323. Any) 72 652.33 P
X1.11 (cross reference format can be used - \322chunkref\323 is the name of the format used in the example below) 72 640.33 P
X1.11 (.) 537.22 640.33 P
X-0.05 (Apologies if the example looks like a ransom note - one does tend to get carried away by the availability of) 72 628.33 P
X(fonts, and the WYSIWIGness of it all.) 72 616.33 T
X0.21 (The implementation and comments have been shamelessly lifted from Norman Ramsey\325) 72 599.33 P
X0.21 (s noweb distribu-) 464.01 599.33 P
X0.1 (tion \050ftp://bellcore.com/pub/norman/www/noweb/intro.html\051. This is just to provide a comparison of the two) 72 587.33 P
X(approaches. I have modi\336ed some of the comments that do not apply to this approach.) 72 575.33 T
X(Thanks, Norman.) 72 558.33 T
X0 1 1 0 1 0 0 K
X0 1 1 0 1 0 0 K
X144.97 515.22 72 515.22 2 L
X0 1 1 0 1 0 0 K
XV
X1.71 H
X0 Z
XN
X0 0 0 1 0 0 0 K
X0 1 1 0 1 0 0 K
X6 18 Q
X(File: wc.c) 72 517 T
X0 0 0 1 0 0 0 K
X3 10 Q
X0 0 0 1 0 0 0 K
X0.21 (The purpose of) 72 493.33 P
X7 F
X0.46 (wc) 142.68 493.33 P
X3 F
X0.21 ( is to count lines, words, and/or characters in a list of \336les. The number of lines in a \336le) 154.68 493.33 P
X(is the number of newline characters it contains. The number of characters is the \336le length in bytes.) 72 481.33 T
X0.42 (A ``word\325) 72 464.33 P
X0.42 (\325 is a maximal sequence of consecutive characters other than newline, space, or tab, containing) 112.24 464.33 P
X(at least one visible ASCII code.) 72 452.33 T
X(\050W) 72 435.33 T
X(e assume that the standard ASCII code is in use.\051) 84.59 435.33 T
X(Most literate C programs share a common structure.) 72 418.33 T
X0.13 (It\325) 72 401.33 P
X0.13 (s probably a good idea to state the overall structure explicitly at the outset. Here, then, is an overview of) 79.6 401.33 P
X(the \336le) 72 388 T
X5 12 Q
X(wc.c) 104.24 388 T
X3 10 Q
X( that is de\336ned by the) 133.06 388 T
X5 12 Q
X(noweb) 230.9 388 T
X3 10 Q
X( program) 272.04 388 T
X5 12 Q
X(wc.fm) 314.83 388 T
X82.08 362.9 72 362.9 2 L
XV
X1.08 H
XN
X1 F
X(1:) 72 364 T
X131.52 362.9 90 362.9 2 L
XV
XN
X(Outline) 90 364 T
X8 10 Q
X(<Header \336les to include> , \0502:, p. 3\051) 90 345.61 T
X(<De\336nitions> , \0503:, p. 3\051) 90 330.89 T
X(<Global variables> , \0504:, p. 4\051) 90 316.16 T
X(<Functions> , \05023:, p. 8\051) 90 301.44 T
X(<Main Pr) 90 286.72 T
X(ogram> , \0505:, p. 4\051) 131.84 286.72 T
X3 F
X-0.03 (W) 72 269.72 P
X-0.03 (e must include the standard I/O de\336nitions, since we want to send formatted output to) 81.26 269.72 P
X5 F
X-0.03 (stdout) 461.04 269.72 P
X3 F
X-0.03 ( and) 491.18 269.72 P
X5 F
X-0.03 (stderr) 513.36 269.72 P
X82.08 231.28 72 231.28 2 L
XV
XN
X1 12 Q
X(2:) 72 232.38 T
X220.08 231.28 90 231.28 2 L
XV
XN
X(Header \336les to include) 90 232.38 T
X5 10 Q
X(#include <stdio.h>) 90 214.72 T
X82.08 176.28 72 176.28 2 L
XV
XN
X1 12 Q
X(3:) 72 177.38 T
X149.04 176.28 90 176.28 2 L
XV
XN
X(De\336nitions) 90 177.38 T
X5 10 Q
X(#de\336ne OK               0) 90 159.72 T
X(  /* status code for successful run */) 90 145.72 T
X(#de\336ne usage_err) 90 131.72 T
X(or      1) 176.63 131.72 T
X(  /* status code for impr) 90 117.72 T
X(oper syntax */) 202.93 117.72 T
X(#de\336ne cannot_open_\336le 2) 90 103.72 T
X(  /* status code for \336le access err) 90 89.72 T
X(or */) 247.18 89.72 T
X0 0 0 1 0 0 0 K
XFMENDPAGE
X%%EndPage: "3" 3
X%%Page: "4" 4
X612 792 0 FMBEGINPAGE
X[0 0 0 1 0 0 0]
X[ 0 0 0 0 1 1 1]
X[ 0 1 1 0 1 0 0]
X[ 1 0 1 0 0 1 0]
X[ 1 1 0 0 0 0 1]
X[ 1 0 0 0 0 1 1]
X[ 0 1 0 0 1 0 1]
X[ 0 0 1 0 1 1 0]
X 8 FrameSetSepColors
XFrameNoSep
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 10 Q
X0 X
X0 0 0 1 0 0 0 K
X(.. 4) 527.5 36 T
X0 0 0 1 0 0 0 K
X33 54 597 54 2 L
X3 H
X2 Z
X4 X
XN
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X82.08 710.9 72 710.9 2 L
X0 X
XV
X1.08 H
X0 Z
XN
X1 12 Q
X(4:) 72 712 T
X185.76 710.9 90 710.9 2 L
XV
XN
X(Global variables) 90 712 T
X3 10 Q
X-0.08 (The) 72 694.33 P
X5 F
X-0.08 (status) 91.93 694.33 P
X3 F
X-0.08 ( variable will tell the operating system if the run was successful or not, and) 119.38 694.33 P
X5 F
X-0.08 (pr) 448.83 694.33 P
X-0.08 (og_name) 458.61 694.33 P
X3 F
X-0.08 ( is used) 505.7 694.33 P
X(in case there\325) 72 682.33 T
X(s an error message to be printed.) 131.29 682.33 T
X5 F
X(int status = OK;) 90 651.33 T
X(  /* exit status of command, initially OK */) 90 637.33 T
X(char *pr) 90 623.33 T
X(og_name;) 129.22 623.33 T
X(  /* who we ar) 90 609.33 T
X(e */) 158.04 609.33 T
X3 F
X(Now we come to the general layout of the) 72 578.33 T
X5 F
X(main) 258.76 578.33 T
X3 F
X( function.) 283.07 578.33 T
X82.08 539.9 72 539.9 2 L
XV
XN
X1 12 Q
X(5:) 72 541 T
X132.72 539.9 90 539.9 2 L
XV
XN
X(Main Pr) 90 541 T
X171.14 539.9 132.5 539.9 2 L
XV
XN
X(ogram) 132.5 541 T
X5 10 Q
X(main\050ar) 90 523.33 T
X(gc, ar) 127.85 523.33 T
X(gv\051) 156.44 523.33 T
X(int ar) 108 509.33 T
X(gc;) 132.11 509.33 T
X(/* number of ar) 108 495.33 T
X(guments on UNIX command line */) 182.36 495.33 T
X(  char **ar) 108 481.33 T
X(gv;) 157.07 481.33 T
X( /* the ar) 108 467.33 T
X(guments, an array of strings */) 150.77 467.33 T
X({) 90 453.33 T
X8 F
X(<V) 110.77 438.61 T
X(ariables local to main> , \0506:, p. 4\051) 123.05 438.61 T
X5 F
X( pr) 108 424.61 T
X(og_name = ar) 120.56 424.61 T
X(gv[0];) 189.1 424.61 T
X8 F
X(<Set up option selection> , \0507:, p. 4\051) 110.77 409.89 T
X(<Pr) 110.77 395.16 T
X(ocess all the \336les> , \0508:, p. 5\051) 125.72 395.16 T
X(<Print the grand totals if ther) 110.77 380.44 T
X(e wer) 246.75 380.44 T
X(e multiple \336les> , \05021:, p. 8\051) 273.8 380.44 T
X5 F
X( exit\050status\051;) 108 366.44 T
X(}) 90 352.44 T
X3 F
X0.58 (If the \336rst argument begins with a \324-\325, the user is choosing the desired counts and specifying the order in) 72 321.44 P
X0.8 (which they should be displayed. Each selection is given by the initial character \050lines, words, or charac-) 72 309.44 P
X-0.23 (ters\051. For example, `-cl\325 would cause just the number of characters and the number of lines to be printed, in) 72 297.44 P
X(that order) 72 285.44 T
X(.) 114.25 285.44 T
X-0.07 (W) 72 268.44 P
X-0.07 (e do not process this string now; we simply remember where it is. It will be used to control the formatting) 81.26 268.44 P
X(at output time.) 72 256.44 T
X82.08 232 72 232 2 L
XV
XN
X1 12 Q
X(6:) 72 233.11 T
X98.4 232 90 232 2 L
XV
XN
X(V) 90 233.11 T
X194.16 232 97.44 232 2 L
XV
XN
X(ariables local to) 97.44 233.11 T
X223.33 231.96 194.16 231.96 2 L
XV
X0.7 H
XN
X5 F
X(main) 194.16 233.11 T
X5 10 Q
X(int \336le_count;) 90 215.44 T
X(  /* how many \336les ther) 90 201.44 T
X(e ar) 200.08 201.44 T
X(e */) 219.15 201.44 T
X(char *which;) 90 187.44 T
X(  /* which counts to print */) 90 173.44 T
X82.08 135 72 135 2 L
XV
X1.08 H
XN
X1 12 Q
X(7:) 72 136.11 T
X222.24 135 90 135 2 L
XV
XN
X(Set up option selection) 90 136.11 T
X5 10 Q
X(which = \322lwc\323;) 90 118.44 T
X(  /* if no option is given, print 3 values */) 90 104.44 T
X(if \050ar) 90 90.44 T
X(gc > 1 && *ar) 111.45 90.44 T
X(gv[1] == \324-\325\051 {) 176.57 90.44 T
X(which = ar) 108 76.44 T
X(gv[1] + 1;) 158.43 76.44 T
X0 0 0 1 0 0 0 K
XFMENDPAGE
X%%EndPage: "4" 4
X%%Page: "5" 5
X612 792 0 FMBEGINPAGE
X[0 0 0 1 0 0 0]
X[ 0 0 0 0 1 1 1]
X[ 0 1 1 0 1 0 0]
X[ 1 0 1 0 0 1 0]
X[ 1 1 0 0 0 0 1]
X[ 1 0 0 0 0 1 1]
X[ 0 1 0 0 1 0 1]
X[ 0 0 1 0 1 1 0]
X 8 FrameSetSepColors
XFrameNoSep
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 10 Q
X0 X
X0 0 0 1 0 0 0 K
X(.. 5) 527.5 36 T
X0 0 0 1 0 0 0 K
X33 54 597 54 2 L
X3 H
X2 Z
X4 X
XN
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X5 F
X0 X
X(ar) 108 713.33 T
X(gc--;) 117.85 713.33 T
X(ar) 108 699.33 T
X(gv++;) 117.85 699.33 T
X(}) 90 685.33 T
X(\336le_count = ar) 90 671.33 T
X(gc - 1;) 158.41 671.33 T
X3 F
X0.14 (Now we scan the remaining arguments and try to open a \336le, if possible. The \336le is processed and its sta-) 72 637.33 P
X(tistics are given.) 72 625.33 T
X(W) 72 608.33 T
X(e use a do ... while loop because we should read from the standard input if no \336le name is given.) 81.26 608.33 T
X82.08 566.9 72 566.9 2 L
XV
X1.08 H
X0 Z
XN
X1 12 Q
X(8:) 72 568 T
X100.56 566.9 90 566.9 2 L
XV
XN
X(Pr) 90 568 T
X198.26 566.9 100.34 566.9 2 L
XV
XN
X(ocess all the \336les) 100.34 568 T
X5 10 Q
X(ar) 90 550.33 T
X(gc--;) 99.85 550.33 T
X(do {) 90 536.33 T
X8 F
X(<If a \336le is given, try to open *\050++ar) 110.77 521.61 T
X(gv\051; continue if unsuccessful> , \05011:, p. 5\051) 277.69 521.61 T
X(<Initialize pointers and counters> , \05015:, p. 6\051) 113.54 506.89 T
X(<Scan \336le> , \05017:, p. 6\051) 113.54 492.16 T
X(<W) 113.54 477.44 T
X(rite statistics for \336le> , \05019:, p. 7\051) 128.91 477.44 T
X(<Close \336le> , \05012:, p. 6\051) 110.77 462.72 T
X(<Update grand totals> , \05020:, p. 7\051) 113.54 447.99 T
X5 F
X( /* even if ther) 108 433.99 T
X(e is only one \336le */) 176.44 433.99 T
X(} while \050--ar) 90 419.99 T
X(gc > 0\051;) 144.14 419.99 T
X3 F
X1.01 (Here\325) 72 388.99 P
X1.01 (s the code to open the \336le.  A special trick allows us to handle input from) 95.71 388.99 P
X5 F
X1.01 (stdin) 435.35 388.99 P
X3 F
X1.01 ( when no name is) 457.57 388.99 P
X(given.) 72 376.99 T
X(Recall that the \336le descriptor to) 72 359.99 T
X5 F
X(stdin) 212.06 359.99 T
X3 F
X( is 0; that\325) 234.28 359.99 T
X(s what we use as the default initial value.) 276.9 359.99 T
X82.08 318.56 72 318.56 2 L
XV
XN
X1 12 Q
X(9:) 72 319.66 T
X98.4 318.56 90 318.56 2 L
XV
XN
X(V) 90 319.66 T
X223.44 318.56 97.44 318.56 2 L
XV
XN
X(ariables local to main) 97.44 319.66 T
X5 10 Q
X(int fd = 0;) 90 301.99 T
X(  /* \336le descriptor) 90 287.99 T
X(, initialized to stdin */) 170.5 287.99 T
X88.8 249.56 72 249.56 2 L
XV
XN
X1 12 Q
X(10:) 72 250.66 T
X149.04 249.56 90 249.56 2 L
XV
XN
X(De\336nitions) 90 250.66 T
X5 10 Q
X(#de\336ne READ_ONL) 90 232.99 T
X(Y 0) 180.2 232.99 T
X(  /* r) 90 218.99 T
X(ead access code for system open */) 109.9 218.99 T
X88.8 180.56 72 180.56 2 L
XV
XN
X1 12 Q
X(11:) 72 181.66 T
X248.4 180.56 90 180.56 2 L
XV
XN
X(If a \336le is given, try to open) 90 181.66 T
X284.28 180.51 248.4 180.51 2 L
XV
X0.7 H
XN
X5 F
X(*\050++ar) 248.4 181.66 T
X303.44 180.51 284.29 180.51 2 L
XV
XN
X(gv\051) 284.29 181.66 T
X310.16 180.56 303.44 180.56 2 L
XV
X1.08 H
XN
X1 F
X(;) 303.44 181.66 T
X361.99 180.51 310.16 180.51 2 L
XV
X0.7 H
XN
X5 F
X(continue) 310.16 181.66 T
X448.87 180.56 361.99 180.56 2 L
XV
X1.08 H
XN
X1 F
X( if unsuccessful) 361.99 181.66 T
X5 10 Q
X(if \050\336le_count > 0) 90 163.99 T
X(&& \050fd = open\050*\050++ar) 168.47 163.99 T
X(gv\051, READ_ONL) 271.23 163.99 T
X(Y\051\051 < 0\051 {) 343.8 163.99 T
X(fprintf\050stderr) 108 149.99 T
X(,  \322%s: cannot open \336le %s\134n\323,    pr) 164.88 149.99 T
X(og_name, *ar) 330.73 149.99 T
X(gv\051;) 397.46 149.99 T
X( status |= cannot_open_\336le;) 108 135.99 T
X(\336le_count--;) 108 121.99 T
X(continue;) 108 107.99 T
X(}) 90 93.99 T
X0 0 0 1 0 0 0 K
XFMENDPAGE
X%%EndPage: "5" 5
X%%Page: "6" 6
X612 792 0 FMBEGINPAGE
X[0 0 0 1 0 0 0]
X[ 0 0 0 0 1 1 1]
X[ 0 1 1 0 1 0 0]
X[ 1 0 1 0 0 1 0]
X[ 1 1 0 0 0 0 1]
X[ 1 0 0 0 0 1 1]
X[ 0 1 0 0 1 0 1]
X[ 0 0 1 0 1 1 0]
X 8 FrameSetSepColors
XFrameNoSep
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 10 Q
X0 X
X0 0 0 1 0 0 0 K
X(.. 6) 527.5 36 T
X0 0 0 1 0 0 0 K
X33 54 597 54 2 L
X3 H
X2 Z
X4 X
XN
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X88.8 710.9 72 710.9 2 L
X0 X
XV
X1.08 H
X0 Z
XN
X1 12 Q
X(12:) 72 712 T
X143.04 710.9 90 710.9 2 L
XV
XN
X(Close \336le) 90 712 T
X5 10 Q
X(close\050fd\051;) 90 694.33 T
X3 F
X0.46 (W) 72 663.33 P
X0.46 (e will do some homemade buf) 81.26 663.33 P
X0.46 (fering in order to speed things up: Characters will be read into the buf) 216.23 663.33 P
X0.46 (fer) 528.33 663.33 P
X(array before we process them. T) 72 651.33 T
X(o do this we set up appropriate pointers and counters.) 214.83 651.33 T
X88.8 609.9 72 609.9 2 L
XV
XN
X1 12 Q
X(13:) 72 611 T
X149.04 609.9 90 609.9 2 L
XV
XN
X(De\336nitions) 90 611 T
X5 10 Q
X(#de\336ne buf_size BUFSIZ) 90 593.33 T
X(  /* stdio.h BUFSIZ chosen for ef) 90 579.33 T
X(\336ciency */) 236.7 579.33 T
X88.8 554.9 72 554.9 2 L
XV
XN
X1 12 Q
X(14:) 72 556 T
X98.4 554.9 90 554.9 2 L
XV
XN
X(V) 90 556 T
X194.16 554.9 97.44 554.9 2 L
XV
XN
X(ariables local to) 97.44 556 T
X223.33 554.85 194.16 554.85 2 L
XV
X0.7 H
XN
X5 F
X(main) 194.16 556 T
X5 10 Q
X(char buf) 90 538.33 T
X(fer[buf_size];) 131.25 538.33 T
X(  /* we r) 90 524.33 T
X(ead the input into this array */) 127.48 524.33 T
X(r) 90 510.33 T
X(egister char *ptr;) 92.97 510.33 T
X(  /* \336rst unpr) 90 496.33 T
X(ocessed character in buf) 146.82 496.33 T
X(fer */) 268.54 496.33 T
X(r) 90 482.33 T
X(egister char *buf_end;) 92.97 482.33 T
X(  /* the \336rst unused position in buf) 90 468.33 T
X(fer */) 248.87 468.33 T
X(r) 90 454.33 T
X(egister int c;) 92.97 454.33 T
X(  /* curr) 90 440.33 T
X(ent char) 125.46 440.33 T
X(, or # of chars just r) 165.58 440.33 T
X(ead */) 254.4 440.33 T
X(int in_wor) 90 426.33 T
X(d;) 135.17 426.33 T
X(  /* ar) 90 412.33 T
X(e we within a wor) 116.73 412.33 T
X(d? */) 201.66 412.33 T
X(long wor) 90 398.33 T
X(d_count, line_count, char_count;) 131.96 398.33 T
X(  /* # of wor) 90 384.33 T
X(ds, lines, and chars so far */) 145.51 384.33 T
X88.8 345.9 72 345.9 2 L
XV
X1.08 H
XN
X1 12 Q
X(15:) 72 347 T
X266.16 345.9 90 345.9 2 L
XV
XN
X(Initialize pointers and counters) 90 347 T
X5 10 Q
X(ptr = buf_end = buf) 90 329.33 T
X(fer;) 182.98 329.33 T
X(line_count = wor) 90 315.33 T
X(d_count = char_count = 0;) 169.6 315.33 T
X(in_wor) 90 301.33 T
X(d = 0;) 120.91 301.33 T
X3 F
X0.77 (The grand totals must be initialized to zero at the beginning of the program. If we made these variables) 72 270.33 P
X1.58 (local to) 72 258.33 P
X5 F
X1.58 (main) 109.62 258.33 P
X3 F
X1.58 (, we would have to do this initialization explicitly; however) 133.93 258.33 P
X1.58 (, C\325) 401.04 258.33 P
X1.58 (s globals are automatically) 417.44 258.33 P
X(zeroed. \050Or rather) 72 246.33 T
X(, ``statically zeroed.\325) 150.92 246.33 T
X(\325\051  \050Get it?\051) 239.65 246.33 T
X88.8 221.9 72 221.9 2 L
XV
XN
X1 12 Q
X(16:) 72 223 T
X185.76 221.9 90 221.9 2 L
XV
XN
X(Global variables) 90 223 T
X5 10 Q
X(long tot_wor) 90 205.33 T
X(d_count, tot_line_count,) 150.29 205.33 T
X(     tot_char_count;) 90 191.33 T
X(  /* total number of wor) 90 177.33 T
X(ds, lines, chars */) 202.79 177.33 T
X88.8 152.9 72 152.9 2 L
XV
XN
X1 12 Q
X(17:) 72 154 T
X139.2 152.9 90 152.9 2 L
XV
XN
X(Scan \336le) 90 154 T
X3 10 Q
X0.43 (This chunk, which does the counting, that is) 72 136.33 P
X5 F
X0.42 (wc) 271.61 136.33 P
X3 F
X0.43 (\325) 286.39 136.33 P
X0.43 (s) 288.43 136.33 P
X4 F
X0.43 (raison d\325etre) 296.64 136.33 P
X3 F
X0.43 (, was actually one of the simplest to write.) 352.08 136.33 P
X(W) 72 124.33 T
X(e look at each character and change state if it begins or ends a word.) 81.26 124.33 T
X5 F
X(while \0501\051 {) 90 93.33 T
X8 F
X(<Fill buf) 110.77 78.61 T
X(fer if it is empty; br) 146.52 78.61 T
X(eak at end of \336le> , \05018:, p. 7\051) 233.44 78.61 T
X0 0 0 1 0 0 0 K
XFMENDPAGE
X%%EndPage: "6" 6
X%%Page: "7" 7
X612 792 0 FMBEGINPAGE
X[0 0 0 1 0 0 0]
X[ 0 0 0 0 1 1 1]
X[ 0 1 1 0 1 0 0]
X[ 1 0 1 0 0 1 0]
X[ 1 1 0 0 0 0 1]
X[ 1 0 0 0 0 1 1]
X[ 0 1 0 0 1 0 1]
X[ 0 0 1 0 1 1 0]
X 8 FrameSetSepColors
XFrameNoSep
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 10 Q
X0 X
X0 0 0 1 0 0 0 K
X(.. 7) 527.5 36 T
X0 0 0 1 0 0 0 K
X33 54 597 54 2 L
X3 H
X2 Z
X4 X
XN
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X5 F
X0 X
X( c = *ptr++;) 108 713.33 T
X( if \050c > \324 \324 && c < 0177\051 {) 108 699.33 T
X(/* visible ASCII codes */) 126 685.33 T
X( if \050!in_wor) 126 671.33 T
X(d\051 {) 174.23 671.33 T
X( wor) 144 657.33 T
X(d_count++;) 164.58 657.33 T
X(in_wor) 144 643.33 T
X(d = 1;) 174.91 643.33 T
X(}) 126 629.33 T
X(continue;) 126 615.33 T
X(}) 108 601.33 T
X(if \050c == \324\134n\325\051 line_count++;) 108 587.33 T
X( else if \050c != \324 \324 && c != \324\134t\325\051 continue;) 108 573.33 T
X( in_wor) 108 559.33 T
X(d = 0;) 141.68 559.33 T
X(/* c is newline, space, or tab */) 108 545.33 T
X(}) 90 531.33 T
X3 F
X(Buf) 72 500.33 T
X(fered I/O allows us to count the number of characters almost for free.) 86.83 500.33 T
X88.8 475.9 72 475.9 2 L
XV
X1.08 H
X0 Z
XN
X1 12 Q
X(18:) 72 477 T
X107.76 475.9 90 475.9 2 L
XV
XN
X(Fill) 90 477 T
X127.01 475.85 107.76 475.85 2 L
XV
X0.7 H
XN
X5 F
X(buf) 107.76 477 T
X142.22 475.85 127.04 475.85 2 L
XV
XN
X(fer) 127.04 477 T
X220.7 475.9 142.22 475.9 2 L
XV
X1.08 H
XN
X1 F
X( if it is empty;) 142.22 477 T
X232.5 475.85 220.7 475.85 2 L
XV
X0.7 H
XN
X5 F
X(br) 220.7 477 T
X254.47 475.85 232.45 475.85 2 L
XV
XN
X(eak) 232.45 477 T
X330.07 475.9 254.47 475.9 2 L
XV
X1.08 H
XN
X1 F
X( at end of \336le) 254.47 477 T
X5 10 Q
X(if \050ptr >= buf_end\051 {) 90 459.33 T
X(ptr = buf) 108 445.33 T
X(fer;) 148.89 445.33 T
X(c = r) 108 431.33 T
X(ead\050fd, ptr) 129.04 431.33 T
X(, buf_size\051;) 180.61 431.33 T
X(if \050c <= 0\051 br) 108 417.33 T
X(eak;) 165.52 417.33 T
X(char_count += c;) 108 403.33 T
X(buf_end = buf) 108 389.33 T
X(fer + c;) 176.16 389.33 T
X(}) 90 375.33 T
X3 F
X0.17 (It\325) 72 344.33 P
X0.17 (s convenient to output the statistics by de\336ning a new function) 79.6 344.33 P
X5 F
X0.17 (wc_print) 358.33 344.33 P
X3 F
X0.17 (; then the same function can be) 399.43 344.33 P
X-0.05 (used for the totals. Additionally we must decide here if we know the name of the \336le we have processed or) 72 332.33 P
X(if it was just stdin.) 72 320.33 T
X88.8 295.9 72 295.9 2 L
XV
XN
X1 12 Q
X(19:) 72 297 T
X100.8 295.9 90 295.9 2 L
XV
XN
X(W) 90 297 T
X208.09 295.9 100.33 295.9 2 L
XV
XN
X(rite statistics for \336le) 100.33 297 T
X5 10 Q
X(wc_print\050which, char_count, wor) 90 279.33 T
X(d_count,) 248.66 279.33 T
X(         line_count\051;) 90 265.33 T
X(if \050\336le_count\051) 90 251.33 T
X(  printf\050\322 %s\134n\323, *ar) 90 237.33 T
X(gv\051; /* not stdin */) 179.74 237.33 T
X(else) 90 223.33 T
X(  printf\050\322\134n\323\051;           /* stdin */) 90 209.33 T
X88.8 170.9 72 170.9 2 L
XV
XN
X1 12 Q
X(20:) 72 172 T
X205.2 170.9 90 170.9 2 L
XV
XN
X(Update grand totals) 90 172 T
X5 10 Q
X(tot_line_count += line_count;) 90 154.33 T
X(tot_wor) 90 140.33 T
X(d_count += wor) 126.14 140.33 T
X(d_count;) 202.05 140.33 T
X(tot_char_count += char_count;) 90 126.33 T
X3 F
X(W) 72 78.33 T
X(e might as well improve a bit on) 81.26 78.33 T
X5 F
X(Unix) 224.09 78.33 T
X3 F
X(\325) 243.54 78.33 T
X(s) 245.58 78.33 T
X5 F
X(wc) 253.36 78.33 T
X3 F
X( by displaying the number of \336les too.) 268.14 78.33 T
X0 0 0 1 0 0 0 K
XFMENDPAGE
X%%EndPage: "7" 7
X%%Page: "8" 8
X612 792 0 FMBEGINPAGE
X[0 0 0 1 0 0 0]
X[ 0 0 0 0 1 1 1]
X[ 0 1 1 0 1 0 0]
X[ 1 0 1 0 0 1 0]
X[ 1 1 0 0 0 0 1]
X[ 1 0 0 0 0 1 1]
X[ 0 1 0 0 1 0 1]
X[ 0 0 1 0 1 1 0]
X 8 FrameSetSepColors
XFrameNoSep
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 10 Q
X0 X
X0 0 0 1 0 0 0 K
X(.. 8) 527.5 36 T
X0 0 0 1 0 0 0 K
X33 54 597 54 2 L
X3 H
X2 Z
X4 X
XN
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X88.8 710.9 72 710.9 2 L
X0 X
XV
X1.08 H
X0 Z
XN
X1 12 Q
X(21:) 72 712 T
X243.84 710.9 90 710.9 2 L
XV
XN
X(Print the grand totals if ther) 90 712 T
X275.9 710.9 243.74 710.9 2 L
XV
XN
X(e wer) 243.74 712 T
X358.61 710.9 275.81 710.9 2 L
XV
XN
X(e multiple \336les) 275.81 712 T
X5 10 Q
X(if \050\336le_count > 1\051 {) 90 694.33 T
X(wc_print\050which, tot_char_count,  tot_wor) 108 680.33 T
X(d_count, tot_line_count\051;) 306.09 680.33 T
X(printf \050\322 total in %d \336les\134n\323, \336le_count\051;) 108 666.33 T
X(}) 90 652.33 T
X3 F
X-0.28 (Here now is the function that prints the values according to the speci\336ed options. The calling routine is sup-) 72 621.33 P
X-0.06 (posed to supply a newline. If an invalid option character is found we inform the user about proper usage of) 72 609.33 P
X(the command. Counts are printed in 8-digit \336elds so that they will line up in columns.) 72 597.33 T
X88.8 572.9 72 572.9 2 L
XV
XN
X1 12 Q
X(22:) 72 574 T
X149.04 572.9 90 572.9 2 L
XV
XN
X(De\336nitions) 90 574 T
X5 10 Q
X(#de\336ne print_count\050n\051 printf\050\322%8ld\323, n\051) 90 556.33 T
X88.8 531.9 72 531.9 2 L
XV
XN
X1 12 Q
X(23:) 72 533 T
X144.48 531.9 90 531.9 2 L
XV
XN
X(Functions) 90 533 T
X5 10 Q
X(wc_print \050which, char_count, wor) 90 515.33 T
X(d_count, line_count\051) 251.43 515.33 T
X(char *which;  /* which counts to print */) 108 501.33 T
X(long char_count, wor) 108 487.33 T
X(d_count, line_count;) 211.5 487.33 T
X( /* given totals */) 108 473.33 T
X({) 90 459.33 T
X(while \050*which\051) 108 445.33 T
X(switch \050*which++\051 {) 126 431.33 T
X(case \324l\325: print_count\050line_count\051;) 144 417.33 T
X(br) 162 403.33 T
X(eak;) 171.79 403.33 T
X(case \324w\325: print_count\050wor) 144 389.33 T
X(d_count\051;) 267.73 389.33 T
X(br) 162 375.33 T
X(eak;) 171.79 375.33 T
X(case \324c\325: print_count\050char_count\051;) 144 361.33 T
X(br) 162 347.33 T
X(eak;) 171.79 347.33 T
X(default:) 144 333.33 T
X(if \050\050status & usage_err) 162 319.33 T
X(or\051 == 0\051 {) 265.35 319.33 T
X(fprintf\050stderr) 180 305.33 T
X(,) 236.88 305.33 T
X(\322Usage: %s [-lwc] [\336lename ...]\134n\323,) 198 291.33 T
X(pr) 366.15 291.33 T
X(og_name\051;) 375.94 291.33 T
X(usage_err) 180 277.33 T
X(or;) 227.5 277.33 T
X(}) 162 263.33 T
X(}) 126 249.33 T
X(}) 90 235.33 T
X3 F
X0.45 (Incidentally) 72 201.33 P
X0.45 (, a test of this program against the system) 121.28 201.33 P
X5 F
X0.45 (wc) 313.79 201.33 P
X3 F
X0.45 ( command on a SP) 328.57 201.33 P
X0.45 (ARCstation showed that the) 414.69 201.33 P
X0.82 (``of) 72 189.33 P
X0.82 (\336cial\325) 86.82 189.33 P
X0.82 (\325) 108.86 189.33 P
X5 F
X0.81 (wc) 114.68 189.33 P
X3 F
X0.82 ( was slightly slower) 129.46 189.33 P
X0.82 (. Furthermore, although that) 216.92 189.33 P
X5 F
X0.81 (wc) 346.92 189.33 P
X3 F
X0.82 ( gave an appropriate error message for) 361.7 189.33 P
X(the options `) 72 177.33 T
X5 F
X(abc) 127.03 177.33 T
X3 F
X(\325, it made no complaints about the options `abc\325!) 147.15 177.33 T
X-0.25 (Dare we suggest that the system routine might have been better if its programmer had used a more literate) 72 160.33 P
X(approach?) 72 148.33 T
X0 0 0 1 0 0 0 K
XFMENDPAGE
X%%EndPage: "8" 8
X%%Page: "9" 9
X612 792 0 FMBEGINPAGE
X[0 0 0 1 0 0 0]
X[ 0 0 0 0 1 1 1]
X[ 0 1 1 0 1 0 0]
X[ 1 0 1 0 0 1 0]
X[ 1 1 0 0 0 0 1]
X[ 1 0 0 0 0 1 1]
X[ 0 1 0 0 1 0 1]
X[ 0 0 1 0 1 1 0]
X 8 FrameSetSepColors
XFrameNoSep
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 10 Q
X0 X
X0 0 0 1 0 0 0 K
X(.. 9) 527.5 36 T
X0 0 0 1 0 0 0 K
X33 54 597 54 2 L
X3 H
X2 Z
X4 X
XN
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X72 696 540 706 C
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X72 705 540 705 2 L
X1 H
X2 Z
X0 X
X0 0 0 1 0 0 0 K
XN
X0 0 612 792 C
X2 14 Q
X0 X
X0 0 0 1 0 0 0 K
X(Appendix B:) 72 710.67 T
X5 F
X(fmweb) 158.34 710.67 T
X2 F
X( source) 206.15 710.67 T
X3 10 Q
X-0.25 (T) 72 681.33 P
X-0.25 (o extract this source, go to special -> conditional text, and hide the conditional tag named \322Fluf) 77 681.33 P
X-0.25 (f\323. Save the) 489.37 681.33 P
X(\336le as a text \336le called fmweb. The \336rst line of this \336le may need changing.) 72 669.33 T
X6 12 Q
X(T) 207.05 646 T
X(able 1: Important variables in fmweb) 213.95 646 T
X3 10 Q
X(name) 127 621.33 T
X(Description) 348.49 621.33 T
X(%chunksByName) 78 599.33 T
X-0.27 (An array of chunks, whose key is the heading of the chunk, and it\325) 213 599.33 P
X-0.27 (s value) 500.07 599.33 P
X(is the entire code in that section.) 213 587.33 T
X($currChunkHeading) 78 567.33 T
X(The current chunk heading) 213 567.33 T
X(@chunkHeadings) 78 547.33 T
X(A list of all the chunk headings, in order of appearance. If a heading has) 213 547.33 T
X(been encountered before, it is not appended to this array) 213 535.33 T
X(.) 463.52 535.33 T
X(%markerReferred) 78 515.33 T
X-0.1 (Keeps track of all those chunk headings that have been referred to \050by a) 213 515.33 P
X(Frame cross reference\051.) 213 503.33 T
X(%markerT) 78 483.33 T
X(oHeading) 123 483.33 T
X-0.38 (A translation table - Each chunk heading has a text \050the \322heading\323\051 that is) 213 483.33 P
X(visible, and a marker text that Frame inserts. Unfortunately) 213 471.33 T
X(, these two) 471.8 471.33 T
X(are not necessarily identical. This translation is necessary since the) 213 459.33 T
X-0.3 (script allows more than one chunk to have the same name \050which is then) 213 447.33 P
X(concatenated\051, but a cross reference can be created to only of these) 213 435.33 T
X(paragraphs.) 213 423.33 T
X($line) 78 403.33 T
X(Global var that contains the current line from the input MIF \336le.) 213 403.33 T
X($currMarkerT) 78 383.33 T
X(ext) 136.89 383.33 T
X(While evaluating a chunk paragraph, this keeps track of the current) 213 383.33 T
X-0.19 (marker text. Subsequently) 213 371.33 P
X-0.19 (, the text of the paragraph and this marker text) 328.04 371.33 P
X(are related by %markerT) 213 359.33 T
X(oHeading) 321.92 359.33 T
X($currModeProc) 78 339.33 T
X-0.06 (A reference to a mode subroutine. Each of these subroutines is part of a) 213 339.33 P
X(state diagram \050shown below\051.) 213 327.33 T
X(@lookFor) 78 307.33 T
X(The set of tokens in which this state is interested.) 213 307.33 T
X(%chunkReferred) 78 287.33 T
X(This array \050keyed by chunk heading\051 tracks all chunks that have been) 213 287.33 T
X(referred to, by other chunks. The chunks that don\325t belong to this cate-) 213 275.33 T
X(gory are the top-level chunks.) 213 263.33 T
X72 635.75 72 256.25 2 L
XV
X0.5 H
X0 Z
XN
X207 636.25 207 255.75 2 L
XV
XN
X540 635.75 540 256.25 2 L
XV
XN
X71.75 636 540.25 636 2 L
XV
XN
X72.25 613.25 539.75 613.25 2 L
XV
XN
X72.25 610.75 539.75 610.75 2 L
XV
XN
X71.75 580 540.25 580 2 L
XV
XN
X71.75 560 540.25 560 2 L
XV
XN
X71.75 528 540.25 528 2 L
XV
XN
X71.75 496 540.25 496 2 L
XV
XN
X71.75 416 540.25 416 2 L
XV
XN
X71.75 396 540.25 396 2 L
XV
XN
X71.75 352 540.25 352 2 L
XV
XN
X71.75 320 540.25 320 2 L
XV
XN
X71.75 300 540.25 300 2 L
XV
XN
X71.75 256 540.25 256 2 L
XV
XN
X0 0 0 1 0 0 0 K
XFMENDPAGE
X%%EndPage: "9" 9
X%%Page: "10" 10
X612 792 0 FMBEGINPAGE
X[0 0 0 1 0 0 0]
X[ 0 0 0 0 1 1 1]
X[ 0 1 1 0 1 0 0]
X[ 1 0 1 0 0 1 0]
X[ 1 1 0 0 0 0 1]
X[ 1 0 0 0 0 1 1]
X[ 0 1 0 0 1 0 1]
X[ 0 0 1 0 1 1 0]
X 8 FrameSetSepColors
XFrameNoSep
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 10 Q
X0 X
X0 0 0 1 0 0 0 K
X(.. 10) 522.5 36 T
X0 0 0 1 0 0 0 K
X33 54 597 54 2 L
X3 H
X2 Z
X4 X
XN
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X142.01 709.31 72 709.31 2 L
X0 X
XV
X1.02 H
X0 Z
XN
X3 14 Q
X(Description) 72 710.67 T
X3 10 Q
X(fmweb is implemented as a simple state machine, whose state diagram is shown below) 72 691.33 T
X(.) 457.7 691.33 T
X0.26 (Each of the events in the state diagram are mif statements. The subroutines ParaMode, FileMode, Code-) 72 472.33 P
X0.82 (Mode, ChunkMode and W) 72 460.33 P
X0.82 (asteMode implement the states. If these subs are called without any parame-) 190.25 460.33 P
X0.06 (ters, they do the necessary initializations required for that state, such as initializing @lookFor) 72 448.33 P
X0.06 (, which is the) 482.01 448.33 P
X-0.12 (set of lookahead patterns in which the current state is interested. The main loop calls these subs with $line) 72 436.33 P
X(as the parameter - $line contains some event deemed interesting to the current state.) 72 424.33 T
X0.72 (The script \336rst reads in all the chunks and stores them in chunksByName, keyed by the chunk heading.) 72 407.33 P
X0.04 (Each chunk may contain embedded cross references to other chunks. In MIF) 72 395.33 P
X0.04 (, an XrefSrcT) 412.02 395.33 P
X0.04 (ext statement is) 469.89 395.33 P
X-0.05 (the pointer to the source paragraph - more precisely) 72 383.33 P
X-0.05 (, the chunk heading that this XrefSrcT) 300.93 383.33 P
X-0.05 (ext points to, will) 466.8 383.33 P
X1.53 (have a corresponding \322MT) 72 371.33 P
X1.53 (ext\323 statement with exactly the same string. Since a chunk is simply all the) 192.19 371.33 P
X0.51 (\322code\323 paragraph strings concatenated together) 72 359.33 P
X0.51 (, cross references are simply embedded into this stream,) 284.71 359.33 P
X(with a "\134200" character on either end, to identify it later) 72 347.33 T
X(.) 310.89 347.33 T
X1.52 (Finally) 72 330.33 P
X1.52 (, each of the top level chunks are taken in order \050top level chunks are those that haven\325t been) 100.15 330.33 P
X1.83 (referred to by any other chunk\051, and expanded. The expansion process consists of substituting each) 72 318.33 P
X0.94 (embedded reference by the appropriate chunk - this is a recursive process, since the chunk referred to) 72 306.33 P
X(may itself contain other embedded references.) 72 294.33 T
X5 F
X(#/usr/local/bin/perl5) 90 257.33 T
X(#forwar) 90 233.33 T
X(d declarations.) 126.33 233.33 T
X(sub ParaMode;) 90 221.33 T
X(sub FileMode;) 90 209.33 T
X(sub CodeMode;) 90 197.33 T
X(sub ChunkMode;) 90 185.33 T
X(sub W) 90 173.33 T
X(asteMode;) 118.65 173.33 T
X(Initialize\050\051;) 90 149.33 T
X(# Start with the W) 90 125.33 T
X(aste State.) 173.11 125.33 T
X(W) 90 113.33 T
X(asteMode\050\051;) 99.1 113.33 T
X(# Main loop) 90 101.33 T
X(while \050$line = <STDIN>\051 {) 90 89.33 T
X(if \050Inter) 108 77.33 T
X(estingLine\050\051\051 {) 140.82 77.33 T
X72 72 540 720 C
X109.12 486 502.88 688 C
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X7 X
X0 0 0 1 0 0 0 K
X90 450 22 19 342.55 525.33 G
X0.5 H
X2 Z
X0 X
X90 450 22 19 342.55 525.33 A
X285.55 513.33 334.55 535.33 R
X7 X
XV
XN
X329.43 508.62 326.11 513.78 331.67 511.17 330.55 509.89 4 Y
X0 X
XV
X330.56 509.89 330.56 509.89 2 L
XN
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X7 X
X90 450 22 19 342.55 584.22 G
X0 X
X90 450 22 19 342.55 584.22 A
X285.55 572.22 334.55 594.22 R
X7 X
XV
XN
X329.43 567.51 326.11 572.67 331.67 570.05 330.55 568.78 4 Y
X0 X
XV
X330.56 568.78 330.56 568.78 2 L
XN
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X7 X
X90 450 22 19 342.55 644.78 G
X0 X
X90 450 22 19 342.55 644.78 A
X285.55 632.78 334.55 654.78 R
X7 X
XV
XN
X329.43 628.06 326.11 633.22 331.67 630.61 330.55 629.33 4 Y
X0 X
XV
X330.56 629.33 330.56 629.33 2 L
XN
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X3 10 Q
X(W) 130.98 581.45 T
X(aste) 140.05 581.45 T
X(Para) 208.55 581.45 T
X(File) 314.23 640.19 T
X(Code) 314.23 581.45 T
X(Chunk) 314.23 522.71 T
X187.59 587.31 199.12 584 187.59 580.69 187.59 584 4 Y
XV
X163.12 584 187.59 584 2 L
XN
X5 7 Q
X(Para) 170.12 589 T
X295.43 635.29 307.12 638 298.64 629.51 297.04 632.4 4 Y
XV
X226.12 593 297.04 632.4 2 L
XN
X174.66 571.69 163.12 575 174.66 578.31 174.66 575 4 Y
XV
X174.66 575 199.12 575 2 L
XN
X(All other pgf tags) 153.12 565.34 T
X(PgfT) 226.28 614.83 T
X(ag File) 239.95 614.83 T
X(PgfT) 253.28 575.83 T
X(ag code) 266.95 575.83 T
X295.59 587.31 307.12 584 295.59 580.69 295.59 584 4 Y
XV
X235.12 584 295.59 584 2 L
XN
X298.64 535.5 307.12 527 295.43 529.71 297.04 532.61 4 Y
XV
X226.12 572 297.04 532.6 2 L
XN
X(PgfT) 226.28 540.34 T
X(ag chunk) 239.95 540.34 T
X(String) 334.28 668.83 T
X(Char T) 301.28 606.83 T
X(ab, String, Xr) 322.68 606.83 T
X(efSr) 364.68 606.83 T
X(cT) 376.98 606.83 T
X(ext) 384.14 606.83 T
X(MT) 319.28 546.83 T
X(ext , String) 328.35 546.83 T
X429.2 572.8 441 575 432.16 566.89 430.68 569.84 4 Y
XV
X345 527 430.68 569.84 2 L
XN
X430.97 602.91 439.99 595 428.15 596.93 429.56 599.92 4 Y
XV
X336 644 429.57 599.92 2 L
XN
X426.46 586.31 438 583 426.46 579.69 426.46 583 4 Y
XV
X342 583 426.46 583 2 L
XN
X(End of para) 385.28 586.83 T
X3 10 Q
X(W) 443.58 581.45 T
X(aste) 452.65 581.45 T
X72 72 540 720 C
X0 0 612 792 C
X0 0 0 1 0 0 0 K
XFMENDPAGE
X%%EndPage: "10" 10
X%%Page: "11" 11
X612 792 0 FMBEGINPAGE
X[0 0 0 1 0 0 0]
X[ 0 0 0 0 1 1 1]
X[ 0 1 1 0 1 0 0]
X[ 1 0 1 0 0 1 0]
X[ 1 1 0 0 0 0 1]
X[ 1 0 0 0 0 1 1]
X[ 0 1 0 0 1 0 1]
X[ 0 0 1 0 1 1 0]
X 8 FrameSetSepColors
XFrameNoSep
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 10 Q
X0 X
X0 0 0 1 0 0 0 K
X(.. 11) 522.5 36 T
X0 0 0 1 0 0 0 K
X33 54 597 54 2 L
X3 H
X2 Z
X4 X
XN
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X5 F
X0 X
X(# Call the curr) 126 713.33 T
X(ent mode pr) 193.33 713.33 T
X(oc \050one of ParaMode,FileMode, CodeMode, ChunkMode;) 253.93 713.33 T
X(# W) 126 701.33 T
X(asteMode, or W) 143.41 701.33 T
X(asteOneStringMode\051) 220.07 701.33 T
X(&{$currModePr) 126 689.33 T
X(oc}\050$line\051;) 199.17 689.33 T
X( }) 108 677.33 T
X(}) 90 665.33 T
X(#All chunks have been slurped in.) 90 641.33 T
X(# Find out which chunks have been r) 90 617.33 T
X(eferr) 267.24 617.33 T
X(ed to by othe r chunks.) 289.36 617.33 T
X(for) 90 605.33 T
X(each $k \050keys %markerReferr) 102.66 605.33 T
X(ed\051 {) 241.57 605.33 T
X($chunkReferr) 108 593.33 T
X(ed {$markerT) 171.5 593.33 T
X(oHeading{$k}} = 1;) 234.19 593.33 T
X(}) 90 581.33 T
X(# Can curr) 90 557.33 T
X(ently open only one \336le.) 140.67 557.33 T
X(open \050F) 90 545.33 T
X(, "> $currFile"\051 || die "Could not open $currFile for writing";) 126.06 545.33 T
X(# The "tangle" pr) 90 521.33 T
X(ocess. Expand each top level chunk) 168.23 521.33 T
X(for) 90 509.33 T
X(each $c \050@chunkHeadings\051 {) 102.66 509.33 T
X(if \050! $chunkReferr) 108 497.33 T
X(ed{$c}\051 {) 188.82 497.33 T
X(ChunkExpand \050$c\051;) 126 485.33 T
X($chunksByName{$c} =~ s/\134\134xd\050[2345]\051 /$xlat[$1]/g; #T) 126 473.33 T
X(ranslate smart quotes) 385.59 473.33 T
X($chunksByName{$c} =~ s/\134\134\134\134/\134\134/g; #Convert \134\134 to \134) 126 461.33 T
X($chunksByName{$c} =~ s/\134\134>/>/g; # convert \134> to >) 126 449.33 T
X(print F $chunksByName{$c}, "\134n";) 126 437.33 T
X(}) 108 425.33 T
X(}) 90 413.33 T
X(close \050F\051;) 90 389.33 T
X(exit \0500\051;) 90 377.33 T
X(#--------------------------------------------------------------------------------------------------------------) 90 353.33 T
X(sub) 90 329.33 T
X1 F
X(ChunkExpand) 109.55 329.33 T
X5 F
X( {) 177.75 329.33 T
X( local \050$heading\051 = @_;) 108 317.33 T
X( print "ChunkExpand : $heading \134n" if $debugging;) 108 293.33 T
X( if \050de\336ned \050$chunksByName{$heading}\051\051 {) 108 269.33 T
X(# For each embedded marker found, call CHunkExpand r) 126 257.33 T
X(ecursively.) 404.69 257.33 T
X(# Note the /e option below.) 126 245.33 T
X(1 while) 126 233.33 T
X( \050$chunksByName{$heading} =~) 126 221.33 T
X(s/\134200\050[^\134200]*\051\134200/ChunkExpand\050$markerT) 144 209.33 T
X(oHeading{$1}\051/e\051;) 364.28 209.33 T
X(r) 126 197.33 T
X(etur) 128.97 197.33 T
X(n $chunksByName{$heading};) 148.16 197.33 T
X( } else {) 108 185.33 T
X(r) 126 173.33 T
X(etur) 128.97 173.33 T
X(n "??$heading??"; # T) 148.16 173.33 T
X(o indicate an unr) 251.12 173.33 T
X(esolved cr) 334.2 173.33 T
X(oss r) 384.23 173.33 T
X(efer) 404.28 173.33 T
X(ence.) 423.39 173.33 T
X( }) 108 161.33 T
X(}) 90 149.33 T
X(sub) 90 125.33 T
X1 F
X(W) 109.55 125.33 T
X(asteMode) 118.05 125.33 T
X5 F
X( {) 166.85 125.33 T
X( local \050$ev\051 = @_;) 108 113.33 T
X( if \050! de\336ned $ev\051 {) 108 101.33 T
X(@lookFor = \050$P) 126 89.33 T
X(ARA\051;) 195.21 89.33 T
X($currModePr) 126 77.33 T
X(oc = \134&W) 188.09 77.33 T
X(asteMode;) 235.43 77.33 T
X0 0 0 1 0 0 0 K
XFMENDPAGE
X%%EndPage: "11" 11
X%%Page: "12" 12
X612 792 0 FMBEGINPAGE
X[0 0 0 1 0 0 0]
X[ 0 0 0 0 1 1 1]
X[ 0 1 1 0 1 0 0]
X[ 1 0 1 0 0 1 0]
X[ 1 1 0 0 0 0 1]
X[ 1 0 0 0 0 1 1]
X[ 0 1 0 0 1 0 1]
X[ 0 0 1 0 1 1 0]
X 8 FrameSetSepColors
XFrameNoSep
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 10 Q
X0 X
X0 0 0 1 0 0 0 K
X(.. 12) 522.5 36 T
X0 0 0 1 0 0 0 K
X33 54 597 54 2 L
X3 H
X2 Z
X4 X
XN
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X5 F
X0 X
X(r) 126 713.33 T
X(etur) 128.97 713.33 T
X(n;) 148.16 713.33 T
X( }) 108 701.33 T
X(ParaMode\050\051;) 108 677.33 T
X(}) 90 665.33 T
X(sub) 90 641.33 T
X1 F
X(ParaMode) 109.55 641.33 T
X5 F
X( {) 159.95 641.33 T
X(local \050$ev\051 = @_;) 108 629.33 T
X(if \050! de\336ned $ev\051 {) 108 617.33 T
X(@lookFor = \050"^ *<PgfT) 126 605.33 T
X(ag `code\325", "^ *<PgfT) 226.25 605.33 T
X(ag `chunk\325", "^ *<PgfT) 326.63 605.33 T
X(ag `File\325"\051;) 430.41 605.33 T
X($currModePr) 126 593.33 T
X(oc = \134&ParaMode;) 188.09 593.33 T
X(r) 126 581.33 T
X(etur) 128.97 581.33 T
X(n;) 148.16 581.33 T
X( }) 108 569.33 T
X( print "ParaMode : $ev \134n" if $debugging;) 108 557.33 T
X( if \050$ev =~ /code/ \051 {) 108 545.33 T
X(CodeMode\050\051;) 126 533.33 T
X( } elsif \050$ev =~ /chunk/ \051 {) 108 521.33 T
X(ChunkMode\050\051;) 126 509.33 T
X( } elsif \050$ev =~ /File/ \051 {) 108 497.33 T
X(FileMode\050\051;) 126 485.33 T
X( } else {) 108 473.33 T
X(W) 126 461.33 T
X(asteMode\050\051;) 135.1 461.33 T
X(}) 108 449.33 T
X(}) 90 437.33 T
X(sub) 90 413.33 T
X1 F
X(FileMode) 109.55 413.33 T
X5 F
X( {) 153.95 413.33 T
X( local \050$ev\051 = @_;) 108 401.33 T
X( if \050! de\336ned $ev\051 {) 108 389.33 T
X(@lookFor = \050"^ *<String", $ENDOFP) 126 377.33 T
X(ARA\051;) 286.02 377.33 T
X($currModePr) 126 365.33 T
X(oc = \134&FileMode;) 188.09 365.33 T
X($currFile = "";) 126 353.33 T
X(r) 126 341.33 T
X(etur) 128.97 341.33 T
X(n;) 148.16 341.33 T
X( }) 108 329.33 T
X( print "FileMode : $ev \134n" if $debugging;) 108 317.33 T
X( if \050$ev =~ /^ *<String.*\134`\050.+\051\134\325>$/ \051 {) 108 305.33 T
X($currFile = $1;) 126 293.33 T
X( } else { # End of para) 108 281.33 T
X(W) 126 269.33 T
X(asteMode\050\051;) 135.1 269.33 T
X(}) 108 257.33 T
X(}) 90 245.33 T
X(sub) 90 221.33 T
X1 F
X(CodeMode) 109.55 221.33 T
X5 F
X( {) 165.15 221.33 T
X( local \050$ev, $h\051 = @_;) 108 209.33 T
X(if \050! de\336ned $ev\051 {) 108 197.33 T
X(@lookFor = \050"^ *<Char T) 126 185.33 T
X(ab", "^ *<String", "^ *<XRefSr) 237.3 185.33 T
X(cT) 368.6 185.33 T
X(ext", $ENDOFP) 378.84 185.33 T
X(ARA\051;) 446.62 185.33 T
X($currModePr) 126 173.33 T
X(oc = \134&CodeMode;) 188.09 173.33 T
X(r) 108 161.33 T
X(etur) 110.97 161.33 T
X(n;) 130.16 161.33 T
X(}) 108 149.33 T
X( print "CodeMode : $ev \134n" if $debugging;) 108 137.33 T
X( if \050$ev =~ /^ *<Char T) 108 125.33 T
X(ab/\051 {) 211.7 125.33 T
X($chunksByName{$currChunkHeading} .= "\134t";) 126 113.33 T
X( } elsif \050$ev  =~ /String \134`\050.*\051\134\325>$/\051 {) 108 101.33 T
X($chunksByName{$currChunkHeading} .= "$1"; # Concatenate code to curr) 126 89.33 T
X(ent chunk) 486.22 89.33 T
X(} elsif  \050\050$h\051 = \050$ev =~ /^ *<XRefSr) 108 77.33 T
X(cT) 263.81 77.33 T
X(ext \050.*\051>$/\051\051 {) 274.05 77.33 T
X0 0 0 1 0 0 0 K
XFMENDPAGE
X%%EndPage: "12" 12
X%%Page: "13" 13
X612 792 0 FMBEGINPAGE
X[0 0 0 1 0 0 0]
X[ 0 0 0 0 1 1 1]
X[ 0 1 1 0 1 0 0]
X[ 1 0 1 0 0 1 0]
X[ 1 1 0 0 0 0 1]
X[ 1 0 0 0 0 1 1]
X[ 0 1 0 0 1 0 1]
X[ 0 0 1 0 1 1 0]
X 8 FrameSetSepColors
XFrameNoSep
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 10 Q
X0 X
X0 0 0 1 0 0 0 K
X(.. 13) 522.5 36 T
X0 0 0 1 0 0 0 K
X33 54 597 54 2 L
X3 H
X2 Z
X4 X
XN
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X5 F
X0 X
X($markerReferr) 126 713.33 T
X(ed{$h} = 1; # Mark this chunk r) 193.48 713.33 T
X(efer) 336.95 713.33 T
X(ence as "r) 356.06 713.33 T
X(eferr) 403.94 713.33 T
X(ed to") 426.06 713.33 T
X(# Put the text in as an embedded r) 126 701.33 T
X(efer) 294.12 701.33 T
X(ence) 313.23 701.33 T
X($chunksByName{$currChunkHeading} .= "\134200$h\134200\134n";) 126 689.33 T
X(# The next string is the string of the cr) 126 677.33 T
X(oss r) 301.33 677.33 T
X(efer) 321.38 677.33 T
X(ence itself - having embedded the) 340.49 677.33 T
X(# cr) 126 665.33 T
X(oss r) 143.75 665.33 T
X(efer) 163.8 665.33 T
X(ence itself, we ar) 182.91 665.33 T
X(e not inter) 265.08 665.33 T
X(ested in this string.) 314.12 665.33 T
X(W) 126 653.33 T
X(asteOneStringMode\050\051;) 135.1 653.33 T
X( } elsif \050$ev =~ /$ENDOFP) 108 641.33 T
X(ARA/o\051 {) 225.1 641.33 T
X(# Assuming that each line of the code is in one "code" para . T) 126 629.33 T
X(ime to append a) 426.54 629.33 T
X(# newline) 126 617.33 T
X($chunksByName{$currChunkHeading} .= "\134n";) 126 605.33 T
X(W) 126 593.33 T
X(asteMode\050\051;) 135.1 593.33 T
X( }) 108 581.33 T
X(}) 90 569.33 T
X(sub) 90 545.33 T
X1 F
X(W) 109.55 545.33 T
X(asteOneStringMode) 118.05 545.33 T
X5 F
X( {) 214.05 545.33 T
X(# Called fr) 108 533.33 T
X(om CodeMode above.) 157.5 533.33 T
X( local \050$ev\051 = @_;) 108 521.33 T
X( if \050! de\336ned $ev\051 {) 108 509.33 T
X(@lookFor = \050"^ *<String"\051;) 126 497.33 T
X($currModePr) 126 485.33 T
X(oc = \134&W) 188.09 485.33 T
X(asteOneStringMode;) 235.43 485.33 T
X(r) 126 473.33 T
X(etur) 128.97 473.33 T
X(n;) 148.16 473.33 T
X( }) 108 461.33 T
X( CodeMode\050\051;) 108 449.33 T
X(}) 90 437.33 T
X(sub) 90 413.33 T
X1 F
X(ChunkMode) 109.55 413.33 T
X5 F
X( {) 169.55 413.33 T
X(local \050$ev\051 = @_;) 108 401.33 T
X( if \050! de\336ned $ev\051 {) 108 389.33 T
X(@lookFor = \050"^ *<MT) 126 377.33 T
X(ext", "^ *<String", $ENDOFP) 219.68 377.33 T
X(ARA\051;) 344.53 377.33 T
X($currChunkHeading = "";) 126 365.33 T
X($currMarkerT) 126 353.33 T
X(ext = "";) 187.44 353.33 T
X($currModePr) 126 341.33 T
X(oc = \134&ChunkMode;) 188.09 341.33 T
X(r) 126 329.33 T
X(etur) 128.97 329.33 T
X(n;) 148.16 329.33 T
X( }) 108 317.33 T
X( if \050$ev =~ /^ *<MT) 108 305.33 T
X(ext \050.*\051>$/\051  {) 194.08 305.33 T
X($currMarkerT) 126 293.33 T
X(ext = $1;) 187.44 293.33 T
X( } elsif \050$ev =~ /^ *<String.*\134`\050.+\051\134\325>$/ \051 {) 108 281.33 T
X($currChunkHeading .= $1;) 126 269.33 T
X( } else {) 108 257.33 T
X(# End of chunk para.) 126 245.33 T
X(print "ChunkMode : $1 \134n" if $debugging;) 126 233.33 T
X(if \050! de\336ned $chunksByName{$currChunkHeading}\051 {) 126 221.33 T
X(# Init the curr) 144 209.33 T
X(ent chunk with blank code.) 206.12 209.33 T
X($chunksByName{$currChunkHeading} = "";) 144 197.33 T
X(}) 126 185.33 T
X(if \050! de\336ned $headingSeenBefor) 126 173.33 T
X(e{$currChunkHeading}\051 {) 279.39 173.33 T
X(# New chunk heading name seen.) 144 161.33 T
X( push \050@chunkHeadings, $currChunkHeading\051;) 144 149.33 T
X( $headingSeenBefor) 144 137.33 T
X(e{$currChunkHeading} = 1;) 242.4 137.33 T
X(}) 126 125.33 T
X(if \050$currMarkerT) 126 113.33 T
X(ext ne ""\051 {) 199.04 113.33 T
X(# cr) 144 101.33 T
X(oss r) 161.75 101.33 T
X(efer) 181.8 101.33 T
X(ence between marker text and the actual heading) 200.91 101.33 T
X($markerT) 144 89.33 T
X(oHeading{$currMarkerT) 187.06 89.33 T
X(ext} = $currChunkHeading;) 300.4 89.33 T
X(}) 126 77.33 T
X0 0 0 1 0 0 0 K
XFMENDPAGE
X%%EndPage: "13" 13
X%%Page: "14" 14
X612 792 0 FMBEGINPAGE
X[0 0 0 1 0 0 0]
X[ 0 0 0 0 1 1 1]
X[ 0 1 1 0 1 0 0]
X[ 1 0 1 0 0 1 0]
X[ 1 1 0 0 0 0 1]
X[ 1 0 0 0 0 1 1]
X[ 0 1 0 0 1 0 1]
X[ 0 0 1 0 1 1 0]
X 8 FrameSetSepColors
XFrameNoSep
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X0 10 Q
X0 X
X0 0 0 1 0 0 0 K
X(.. 14) 522.5 36 T
X0 0 0 1 0 0 0 K
X33 54 597 54 2 L
X3 H
X2 Z
X4 X
XN
X0 0 0 1 0 0 0 K
X0 0 0 1 0 0 0 K
X5 F
X0 X
X(W) 126 713.33 T
X(asteMode\050\051;) 135.1 713.33 T
X(}) 108 701.33 T
X(}) 90 689.33 T
X(sub) 90 665.33 T
X1 F
X(Inter) 109.55 665.33 T
X(estingLine) 130.87 665.33 T
X5 F
X( {) 178.87 665.33 T
X(# Does the line belong to any of the lookahead tokens?) 108 653.33 T
X(for) 108 641.33 T
X(each $l \050@lookFor\051 {) 120.66 641.33 T
X(if \050$line =~ /$l/\051 {) 126 629.33 T
X(r) 144 617.33 T
X(etur) 146.97 617.33 T
X(n $l;) 166.16 617.33 T
X(}) 126 605.33 T
X( }) 108 593.33 T
X(r) 108 581.33 T
X(etur) 110.97 581.33 T
X(n undef;) 130.16 581.33 T
X(}) 90 569.33 T
X(sub) 90 545.33 T
X1 F
X(Initialize) 109.55 545.33 T
X5 F
X( {) 148.55 545.33 T
X($debugging = 0; # Change to 1 to get a trace.) 108 533.33 T
X($currFile = "-";) 108 521.33 T
X(# Output to stdout) 171.33 521.33 T
X($P) 108 509.33 T
X(ARA = \325^ *<Para\325;) 118.72 509.33 T
X($ENDOFP) 108 497.33 T
X(ARA = \325^ *> # end of Para\325;) 152.46 497.33 T
X(#T) 108 473.33 T
X(ranslation table for smart quotes.) 117.5 473.33 T
X($xlat[2] = "\134"";) 108 461.33 T
X($xlat[3] = "\134"";) 108 449.33 T
X($xlat[4] = "\134\325";) 108 437.33 T
X($xlat[5] = "\134\325";) 108 425.33 T
X(# Start of) 108 401.33 T
X(f with a default chunk heading, in case the pr) 150.4 401.33 T
X(ogrammer starts of) 371.1 401.33 T
X(f code without) 462.13 401.33 T
X(# a chunk heading) 108 389.33 T
X($currChunkHeading = "          DEF) 108 377.33 T
X(AUL) 264.82 377.33 T
X(T        ";) 282.93 377.33 T
X($chunksByName {$currChunkHeading} = "";) 108 365.33 T
X(push \050@chunkHeadings, $currChunkHeading\051;) 108 353.33 T
X(}) 90 341.33 T
X0 0 0 1 0 0 0 K
XFMENDPAGE
X%%EndPage: "14" 14
X%%Trailer
X%%BoundingBox: 0 0 612 792
X%%PageOrder: Ascend
X%%Pages: 14
X%%DocumentFonts: Times-Roman
X%%+ AvantGarde-Demi
X%%+ Helvetica-Bold
X%%+ Helvetica
X%%+ Helvetica-Oblique
X%%+ AvantGarde-Book
X%%+ Times-Bold
X%%+ Courier
X%%+ AvantGarde-BookOblique
X%%EOF
EOF fmweb.ps
if test 98643 -ne "`wc -c < 'fmweb.ps'`"
then
	echo 'shar: "fmweb.ps" CORRUPTED (not 98643 bytes)'
fi
fi ; : End of overwrite check
: End of shell archive
exit 0
-- 

================================================================================
Archive-Date: Mon, 10 Jul 1995 15:26:45 CDT
Sender: owner-litprog@SHSU.edu
From: esysserv@ix.netcom.com (John E. Verin )
Reply-To: LitProg@SHSU.edu, esysserv@IX.NETCOM.COM
Subject: ESS seeks COBOL programmers
Date: 10 Jul 1995 19:44:46 GMT
Message-ID: <3trvve$9ls@ixnews6.ix.netcom.com>
To: LitProg@SHSU.EDU

Enterprise Systems & Services, Inc. is a Corporate Data Management
Services company, located in Northeastern New Jersey. ESS performs
systems development, implementation and maintenance for data management
in Facilities/Property Management departments, as well as other realms
of data management.
ESS is presently seeking experienced COBOL programmers. We will have 3
to 6 month assignments with domestic and foreign clients. Knowledge of
French &/or German is a plus, but the language you will need most is
COBOL!
Primary requirements: Minimum 5 years experience; Intense work
capacity; Team work skills.
Please respond if you meet the challenge.
esysserv@ix.netcom.com

================================================================================
Archive-Date: Tue, 11 Jul 1995 15:43:31 CDT
Sender: owner-litprog@SHSU.edu
Date: Tue, 11 Jul 95 22:27:13 +0200
From: kaufmann@analog.shraero.co.at (Roland Kaufmann  SCHRACK AEROSPACE)
Reply-To: LitProg@SHSU.edu, kaufmann@ANALOG.SHRAERO.CO.AT
Message-ID: <9507112027.AA14928@analog.co.at.>
To: LitProg@SHSU.edu
Subject: Comments to fmweb

			   Hello Literati,
this are my 5 cents (?) of observations about the recently issued
``fmweb'' package, the example therein and some more general points. 
For those interested in using ``fmweb'', there is a note about a
prettyprinter at the end of this message.

``fmweb>'' Indicates citations from the web used to demonstrate ``fmweb'',
using a TeX-like syntax where necessary.

fmweb> FrameMaker ... has excellent document formatting capabilites
So there is no reason why it could not be used for Literate programming.

I personally have no experience using FrameMaker (please do not use
``Frame'', which is an english word with a well-defined meaning (I am
not aware of any copyright on that, but then I haven't really checked
;-)) to produce documents, so I cannot comment on the usefulness of
the approach.  The example web is much less readable than the original
CWEB or noweb versions due to improper use of proportional fonts (for
the code), a mixture of methods to highlight parts of text, e.g.

fmweb, page 1> ..{\ss noweb} is an .. of noweb.
fmweb, page 3> The purpose of {\tt\small wc} is ..
fmweb, page 3> .. the file {\ss\large wc.c} that is defined by the
fmweb, page 3> {\ss\large noweb} program {\ss\large wc.fm}
fmweb, page 4> The {\ss status} variable ...

aside from being ugly (depending on taste, of course), there is no
indication why things are printed differently -- there should be an
explanation of the notation used.  Lacking this, I can only guess that
visual, rather than logical markup has been used.

There is some confusion about ``smart'' quotes, but that is probably
an artifact from hastily reusing the noweb version.  It makes me doubt
how WYSIWYG the tool is.  It is not entirely an asthetic question,
because the second-to-last sentence is unclear to me:

fmweb, page 8> .. an appropriate error message for the options 
fmweb, page 8> `{\ss abc}', it made no complaints about the options
fmweb, page 8> `abc'!

Looking up (a bad photocopy! of) the noweb implementation in Norman
Ramsey's ``Literate Programming Simplified'' (IEEE Software, September
1994), the two options should be ``-abc'' and ``-labc'' respectively.
The point of programming literately is not to produce ``nice''
documents, but useful ones!

This brings up another point: who is reading these webs?  I myself
catch myself only very superficially reading a document, going back to
the keyboard and fixing some trivial typos, but rarely doing a
thorough review.  Of course, I should have more discipline, but I
think I am not alone in spending most of the time on the tube, reading
the *source*!  I think it is important to have the source as readable
as possible, but I am not sure whether WYSIWYG is the right approach.

Another factor is the novelty of the web -- be honest, who wants to
read ``wc'', why not documenting the Literate programming tool itself?
In the case of ``fmweb'', the Perl code of the ``tangling'' tool is
simply inserted, using a variable-wdith font and a few comments, using
the same font.  It might have made a more interesting read than ``wc''
and it's short enough (if only it weren't written in Perl ;-).

The author of fmweb claims that he has no time to learn the
intricacies of TeX, LaTeX or some other ``batch'' typesetting system.
I don't know about FrameMaker, but when I look at my WinWord manual
(829 pages) or the TeX Book (483 pages, and MUCH more readable), I
have my doubts which way is the easier one...

Besides, every reasonable computer can run TeX and everything required
to do literate programming, webs can be easily ported from one
environment to the other, but FrameMaker is a bit expensive for that?

The ``out-of-band signalling'' of formatting information in tools like
WinWord often means also out of reach --- it is very hard (and
tedious) to correct markups caused by a spurious mouse click, but then
again I am obviously biased against WYSIWYG.

Another interesting note in
fmweb, page 1> I tend to do small sections of the code using my
fmweb, page 1> regular [non-literate] development environment, and
fmweb, page 1> once I have a reasonable top-down solution in mind,
fmweb, page 1> copy it all over to a FrameMaker file and start
fmweb, page 1> refining it.
seems that the approach is not so effective after all.  Why not
writing the history of the program, i.e. explaining the small pieces
of code, developing the structure and putting it all together?

On a related point, has anyone out there experience with writing
specifications,  architectural and detailed design as literate
``programs''?  I am contemplating to try this for a VLSI chip design
using a hardware description language (VHDL) and would be interested
about any experience, comments, etc.

Last, but not least, 

prog2mif         "Program to MIF (FrameMaker Interchange Format)" translator:
                 Pretty printer for several languages, converts an ASCII
                 source file to a FrameMaker MIF file. Italicizes comments,
                 boldens key words. Does NOT reformat the text for indentation.
                 Supports ADA, C, C++, LISP, OBJC, M, PERL, PROTEL,
                 SH, Verilog and VHDL.
                 Author: janick@analysys.com (Janick Bergeron)

can be obtained from ftp://ftp.estec.esa.nl/pub/vhdl/tools/prog2mif
I would think that it might be useful in conjunction with ``fmweb''.

                                best regards
                                    Roland Kaufmann
/----------------------------------------------------------------------\
| Roland Kaufmann               Tel.:   +43 1 80199 5563               |
| Senior Systems Engineer       Fax:    +43 1 80199 5577               |
| Systems Design                e-mail: roland.kaufmann@shraero.co.at  |
| SCHRACK Aerospace             ftp: yes,  News: no,  WWW: yes         |
| Breitenfurterstr. 106-108                                            |
| A-1120 Vienna, AUSTRIA        IEEE Member 8542359                    |
\----------------------------------------------------------------------/
================================================================================
Archive-Date: Thu, 13 Jul 1995 07:47:05 CDT
Sender: owner-litprog@SHSU.edu
From: schrod@iti.informatik.th-darmstadt.de (Joachim Schrod)
Reply-To: LitProg@SHSU.edu, schrod@ITI.INFORMATIK.TH-DARMSTADT.DE
Subject: Your wishlist wanted: Inclusion of CWEB in LaTeX documents
Date: 13 Jul 1995 12:29:49 GMT
Message-ID: <3u33jt$el0@rs18.hrz.th-darmstadt.de>
To: tex-news@SHSU.EDU


[Please note: f'up to comp.programming.literate.]


I would be interested to get your opinion concerning the inclusion of
CWEB programs or program parts in LaTeX documents.

This posting does not address the usage of LaTeX for CWEB documents.
That works, check the end for availability and scheduled update
release dates. (Of course, your input is also welcome for that issue.)

Rather I'm concerned with the scenario that one wants to publish
something where one wants to include code that was written in CWEB.
That may be a book, a paper about an algorithm or a data structure, a
thesis that includes specifications or even code from the
corresponding practical work, a class work, etc.

Currently, I distinguish two cases: (1) document inclusion, and
(2) part inclusion. I want to use examples to present these cases and
explicate the possibilities and problems -- the points where I need
_your_ input.



DOCUMENT INCLUSION
==================

Let's assume that we have a CWEB document b23_tree.w:
    
    ----------------------------------------
    \documentclass{cweb}
    
    % ARGH!: packages & local macro defs
    
    \begin{document}
    
    <cweb code with specification/implementation for a `2-3 tree' module>
    
    @ \end{document}
    ----------------------------------------

And we want to include that code into a LaTeX document about data
structures:

    ----------------------------------------
    \documentclass{article}
        ...
    \begin{document}

    	[...]    

    \cwebInclude{b23_tree}
    
    	[...]
    
    \end{document}
    ----------------------------------------

It's quite clear that we want to get a typeset version of the woven
CWEB document there. So far, so good.

First problem:

 -- What do you expect happens to the packages & local macro defs
    used in b23_tree.w? What would you like to happen? What would you
    expect (realistically, taking into account CWEB&TeX restrictions) to
    happen?

 -- Is it acceptable for you to restrict yourself in the usage of
    LaTeX packages in those CWEB documents that shall be incorporated into
    other documents? (The real problem are packages that change layout --
    they should not change the layout of the outer document.)

 -- Is it acceptable for you to use those packages that introduce new
    markup also in your overall document? (That may require some fiddling
    if there are conflicts...)

 -- Is it acceptable that you cannot change layout of your CWEB
    document in the preambel, but have to use a (self-written) package
    or a sub-class of cweb for that?

Second problem:

 -- What shall happen to the stuff CWEAVE generates?
    
 -- Do you expect a table of contents to appear there?
 -- Do you expect the index to appear there?
 -- Do you expect the list of refinements to appear there?

Pagination and column headers are expected to be part of the overall
document, i.e., \cwebInclude will not change them.

What other problems do you expect I have not outlined above?

Please note, that I cannot and will note change the CWEB programs --
so don't expect stuff like adaptable pretty-printing.



DOCUMENT PART INCLUSION
=======================

Let's assume again, we have the CWEB document from above. Let's assume
we want to include the code for the insert operation in a book:

    ----------------------------------------
    \documentclass{article}
        ...
    \begin{document}
    
        [...]
    
    \cwebExtract{b23_tree}{5,6-20,23}
    
        [...]
    ----------------------------------------

That tag shall cause the extractions of chunks. (`sections' in
DEK-speak, I avoid that term since it causes confusion with LaTeX
sections.) Chunks numbered 5, 6 to 20, and 23 are extracted from the
woven output and typeset at this point.

First problem:

 -- Again, the packages & local macros of b23_tree.w: How to handle
    them here?

 -- I'm inclined to ignore them completely and demand from the author
    that he adds them to his or her overall document as well. (Maybe
    locally in a group.)
    
Second problem:
    
 -- Is it acceptable that chunk numbers must be ordered (i.e.,
    strict monoton sequenced)?


Any more wishes you want to add right now?  It's your chance, stand
up... :-)



CURRENT STATE, AVAILABILITY, AND SCHEDULED RELEASES
===================================================

The LaTeX support for CWEB is available by anonymous ftp from the
Literate Programming Archive, at
ftp.th-darmstadt.de:/pub/programming/literate-programming/c.c++/.
Currently that support only works in compatibility mode of LaTeX 2e,
or with LaTeX 2.09.


The README states that it's alpha software, but it has proven to be
very reliable in non-trivial developments efforts. Nevertheless, if
you don't have it, you won't want to fetch it:

In the first week of August I'll release a new version. That new
version will be a 2e document class. (Sorry, no 2.09 support any
more.) Furthermore, *document* *structures* will be supported. I.e.,
you can use chapters, sections, subsections, etc., to structure your
literate program. (I waited for somebody to contribute the code, but
it seems I'll have to do it myself... ;-) Submitted contributions
(e.g., internationalization by Christian Kumpf) will be included,
too.

That version will also be available from CTAN. It will be announced
in TeX & c.p.l newsgroups. (The current version is not available from
CTAN, as it's not yet completed. ``Thou shall not put `open
development code' on CTAN, thou get flamed for it on c.t.t...'')


The `inclusion of CWEB document in LaTeX documents' feature, as
mentioned above, will be availabe at the start of October. (I have
fixed release dates because I need that code for an own project that
has a deadline then.)



Your feedback, comments, gripes will be appreciated.
Thanks in advance,

	Joachim

--
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Joachim Schrod			Email: schrod@iti.informatik.th-darmstadt.de
Computer Science Department
Technical University of Darmstadt, Germany

	When it comes to Literate Programming, I get irrational.
							--- DEK, 16 Jul 93
================================================================================
Archive-Date: Thu, 13 Jul 1995 18:13:03 CDT
Sender: owner-litprog@SHSU.edu
From: Q Sun <quanger@u.washington.edu>
Reply-To: LitProg@SHSU.edu, quanger@U.WASHINGTON.EDU
Subject: Re: Visual Basic 3.0
Date: Thu, 13 Jul 1995 16:04:38 -0700
Message-ID: <Pine.A32.3.91j.950713160418.26178C-100000@homer14.u.washington.edu>
MIME-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII
To: LitProg@SHSU.EDU

On 9 Jul 1995, Anarch1256 wrote:

> Hello,   
> 
>     I am looking to buy a used copy of Visual Basic 3.0 w/ manuals. I am
> willing to pay $20- 30 for it, since a new copy only costs $100.          
>     E-Mail me ASAP if you are willing to sell.                            

How about $55?
================================================================================
Archive-Date: Fri, 14 Jul 1995 19:28:48 CDT
Sender: owner-litprog@SHSU.edu
From: oruud@oslonett.no (\yvind Ruud)
Reply-To: LitProg@SHSU.edu, oruud@OSLONETT.NO
Subject: New WWW-site, PLEASE READ!
Date: 14 Jul 1995 18:17:36 +0200
Message-ID: <3u65b0$pqv@sinsen.oslonett.no>
To: LitProg@SHSU.EDU

Hi all!,

I have just finished my home-page, and it contains lots of info about 
PROGRAMMING. Some of the info is taken from the REC.GAMES.PROGRAMMER FAQ, 
but it's laid out to take full advantage of the possibilities of WWW. All 
the files discussed can be DOWNLOADED easily, there are LINKS to the most 
useful FTP-sites, and you will also find lots of links to other 
programming-related WWW-pages. 

The page will be constantly updated and developed. I will announce any updates 
here.

The address is:

http://www.oslonett.no/home/oruud/homepage.htm

Enjoy!

 __________________________________________________________________________
|   ______            ____   \ Customer: Waiter, there's a bug in my soup! | 
|  (_____ \_ _/ |\ | /        \  Waiter: Oh, you see, the chef used to     |  
|  ______)  |   | \| \____/    \     program computers...          |  
|_______________________________\__________________________________________|  
|             http://www.oslonett.no/home/oruud/homepage.htm     |
|                        e-mail: oruud@oslonett.no                   |
|__________________________________________________________________________|  
================================================================================
Archive-Date: Mon, 17 Jul 1995 13:07:30 CDT
Sender: owner-litprog@SHSU.edu
Date: Mon, 17 Jul 1995 19:06:20 +0200
From: cgl@rc.service.rug.nl (Kees van der Laan)
Reply-To: LitProg@SHSU.edu, cgl@RC.SERVICE.RUG.NL
Message-ID: <9507171706.AA16447@rc.service.rug.nl>
To: litprog@shsu.edu
Subject: Joachim's CWEB inclusion in LaTeX, a question

Subject: Inclusion of CWEB docs in LaTeX documents?

Joachim Schrod aired his views on this.
What if the LP tool is already written in TeX, like
Gurari's AllProTeX? (Apart from that it does not provide
as yet the full functionalities like on the fly *sorted* index and 
pretty-printing.)

Best wishes, ---Kees---van der Laan

================================================================================
Archive-Date: Mon, 17 Jul 1995 14:12:25 CDT
Sender: owner-litprog@SHSU.edu
Date: Mon, 17 Jul 1995 19:06:20 +0200
From: cgl@rc.service.rug.nl (Kees van der Laan)
Reply-To: LitProg@SHSU.edu, cgl@RC.SERVICE.RUG.NL
Message-ID: <9507171706.AA16447@rc.service.rug.nl>
To: litprog@shsu.edu
Subject: Joachim's CWEB inclusion in LaTeX, a question

Subject: Inclusion of CWEB docs in LaTeX documents?

Joachim Schrod aired his views on this.
What if the LP tool is already written in TeX, like
Gurari's AllProTeX? (Apart from that it does not provide
as yet the full functionalities like on the fly *sorted* index and 
pretty-printing.)

Best wishes, ---Kees---van der Laan

================================================================================
Archive-Date: Tue, 18 Jul 1995 17:49:19 CDT
Sender: owner-litprog@SHSU.edu
From: bart@stellar.NoSubdomain.NoDomain (Bart Childs)
Reply-To: LitProg@SHSU.edu, bart@STELLAR.NOSUBDOMAIN.NODOMAIN
Subject: web-mode, pull-down-menus, hilit, color
Date: 18 Jul 1995 21:25:58 GMT
Message-ID: <3uh8t6$3pp@news.tamu.edu>
Keywords: web-mode, pull-down-menus, hilit, color
To: LitProg@SHSU.EDU

I have just placed a new version of the file

webm-man.tar.gz   on    ftp.cs.tamu.edu

It includes a FIRST draft of the revised manual and *.el files
for the inclusion of the use of pull-down menus and color thru hilit.

Leslie Stoneham did the first and Tom McCurdy did the second.  They
were graduate students here who have gone on to make money.  I would
appreciate any reports of experiences from people using these.

The pull-down-menu work extends the standard done in v 19 of emacs
to many of the web-mode commands.  Mouse oriented people will be able
to make much better use of web-mode through this.  I think that many
users will still be faster though the use of the control key or function
key sequences,  To Each His Own!

Tom's work with hilit mode sure leads to the possibilities of creating
beautiful literate programming ransom notes.  (He likes the term
`van Gogh' better.)  I think that with moderation, it could be a
better way of presenting italics, ..., because screens are such low
resolution devices.

We have been using these on SGI, SUN, and RS6k machines.
ONLY v19 !!!!!!

The last two sections of the manual address these extensions.  I am
sure that a big-time editing job should be done on the whole manual
and I need to reorganize the distribution.  However, I am way behind
and about to be out of touch for about two weeks.  Going to the
TeX Users Group meeting in St. Pete.

Cheers,  Bart Childs

================================================================================
Archive-Date: Tue, 18 Jul 1995 17:49:34 CDT
Sender: owner-litprog@SHSU.edu
From: bart@solarcs.tamu.edu (Bart Childs)
Reply-To: LitProg@SHSU.edu, bart@SOLARCS.TAMU.EDU
Subject: Teaching literate programming
Date: 18 Jul 1995 21:31:06 GMT
Message-ID: <3uh96q$48k@news.tamu.edu>
Keywords: CS/1, education, literate programming
To: LitProg@SHSU.EDU

I have placed a PostScript copy of the paper I will be presenting at the
TeX Users Group conference on July 21 in the file
pub/tex-web/web/DOCs/cs1_in_web.ps    on   ftp.cs.tamu.edu

I expect that after the conference I will put the latex2e source.

Cheers,  Bart Childs


================================================================================
Archive-Date: Tue, 18 Jul 1995 18:06:20 CDT
Sender: owner-litprog@SHSU.edu
From: "Denis B. Roegel" <Denis.Roegel@loria.fr>
Reply-To: LitProg@SHSU.edu, Denis.Roegel@LORIA.FR
Message-ID: <199507182306.BAA25502@pandore.loria.fr>
Subject: Re: Teaching literate programming
To: LitProg@SHSU.edu, bart@SOLARCS.TAMU.EDU
Date: Wed, 19 Jul 1995 01:06:21 +0200 (MET DST)
CC: roegel@lorraine.loria.fr (Denis B. Roegel)
MIME-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit

'Bart Childs'
>   
>   I have placed a PostScript copy of the paper I will be presenting at the
>   TeX Users Group conference on July 21 in the file
>   pub/tex-web/web/DOCs/cs1_in_web.ps    on   ftp.cs.tamu.edu
>   
>   I expect that after the conference I will put the latex2e source.
>   

Bart, I have just retrieved your file and noticed one typo: on page 9,
the METAPOST logo comes out wrong, presumably because you have been
using the old `logo' font.

Cheers,

Denis
================================================================================
Archive-Date: Wed, 19 Jul 1995 09:36:40 CDT
Sender: owner-litprog@SHSU.edu
From: york001@aol.com (York001)
Subject: DEVELOPERS NEEDED IN MINNEAPOLIS
Date: 19 Jul 1995 09:46:19 -0400
Message-ID: <3uj2bb$9s9@newsbf02.news.aol.com>
Reply-To: LitProg@SHSU.edu, york001@aol.com (York001)
To: LitProg@SHSU.EDU

Systems Engineers and Application Developers

York & Associates, Inc. is an information systems management consulting
firm located in Minneapolis, Minnesota.  Our firm comprises a staff of
technical experts who understand the business issues of information
systems and are dedicated to helping our clients integrate and better
manage information technology.  With extensive experience in supporting
mission-critical projects, the firm serves large and medium-sized
companies in the manufacturing, distribution, and service sectors.

York & Associates is currently seeking Systems Engineers and Application
Developers from all experience levels to participate in the analysis,
design, development and implementation of custom developed Client Server
business applications.  

If you have your college degree and hands-on experience or expertise
within the current and emerging technologies of today, such as those
listed below, York & Associates has a challenging and exciting opportunity
for you.

·	Oracle, Sybase, Ingres, Informix, Progress 
·	UNIX, Windows NT, Novell, VMS, OS/2, Nextstep
·	C, C++, SmallTalk, SQL, X-Windows/Motif
·	PowerBuilder, OMNI7, Visual BASIC, SQLWindows

For immediate consideration, please send, email, or fax your resume in
complete confidence to: 

Recruiting Administrator
York & Associates, Inc.
3800 West 80th Street, Suite 1150
Minneapolis, MN  55431 

FAX: (612) 831-0887
email: york001@aol.com

We are proud to be an Equal Oppurunity Employer.
================================================================================
Archive-Date: Wed, 19 Jul 1995 12:41:44 CDT
Sender: owner-litprog@SHSU.edu
From: naras@euler.bd.psu.edu (Balasubramanian Narasimhan)
Reply-To: LitProg@SHSU.edu, naras@EULER.BD.PSU.EDU
Subject: A simple hack for using Noweb.sty with Hyper.sty
Date: 19 Jul 1995 17:19:53 GMT
Message-ID: <NARAS.95Jul19131953@euler.bd.psu.edu>
To: LitProg@SHSU.EDU


The addition of just three simple control sequences and deletion of
another, makes noweb.sty almost work with hyper.sty, thus making the
same literate program a hypertex document, giving us the best of both
worlds (see http://euler.bd.psu.edu/~naras/bpois.dvi for an example in
progress that can be viewed with xhdvi). I say almost because the
``Used in'', ``Defines'', documentation is not hyperlinked, but
``Uses'', is.  I'll leave it someone better qualified than me to fix
that (or maybe Norman will do it when he is funded).  If I am not
mistaken, the hyperfying problems have to do with the generation of
page ranges, etc. and the way the lists are processed for the index. I
don't understand this part of support.nw too well to hack it.

Apply this patch to support.nw distributed in Noweb 2.6c.  Then make
sure you have hyper.sty (from CTAN) installed before using noweb.sty.
Just for clarity, I have mentioned where things are modified in the
file. Just search for "Hack Alert" after applying the patch and you
will find the changes.

*****************  Cut Here *********************
*** support.nw.old	Wed Jul 19 12:09:14 1995
--- support.nw	Wed Jul 19 13:16:42 1995
***************
*** 605,618 ****
  reference is actually defined, it then goes on to check whether the
  control sequence [[2on]]\LA{}{page referenced}\RA{} is defined and sets the
  [[\ref]] value to get [[a]] etc.\ if so.  The magic, of course, is in
! defining the [[2on]] bit appropriately.
  <<noweb.sty>>=
  \newcommand{\subpageref}[1]{%
!   \@ifundefined{r@#1}%
      {\pageref{#1}}%
      {\@ifundefined{2on\@pageref{#1}}%
        {\pageref{#1}}%
!       {\expandafter\expandafter\expandafter\nwthepagenum\csname r@#1\endcsname}}}
  @ %def \subpageref
  [[\subpagepair]] produces a [[{subpage}{page}]] pair.
  <<noweb.sty>>=
--- 605,620 ----
  reference is actually defined, it then goes on to check whether the
  control sequence [[2on]]\LA{}{page referenced}\RA{} is defined and sets the
  [[\ref]] value to get [[a]] etc.\ if so.  The magic, of course, is in
! defining the [[2on]] bit appropriately.  {\bf Hack Alert!} Added a 
! [[\hyperreference]] for use with Michael~Mehlich's [[hyper.sty]], 
! B.~N.~1995/06/26. 
  <<noweb.sty>>=
  \newcommand{\subpageref}[1]{%
!   \hyperreference{#1}{\@ifundefined{r@#1}%
      {\pageref{#1}}%
      {\@ifundefined{2on\@pageref{#1}}%
        {\pageref{#1}}%
!       {\expandafter\expandafter\expandafter\nwthepagenum\csname r@#1\endcsname}}}}
  @ %def \subpageref
  [[\subpagepair]] produces a [[{subpage}{page}]] pair.
  <<noweb.sty>>=
***************
*** 631,639 ****
  @ %def \@pageref
  @
  [[\sublabel]] is like the [[\label]] command, except that it writes
! [[\newsublabel]] onto the [[.aux]] file rather than [[\newlabel]].
  <<noweb.sty>>=
  \newcommand{\sublabel}[1]{%
    \@bsphack\if@filesw {\let\thepage\relax
     \def\protect{\noexpand\noexpand\noexpand}%
     \edef\@tempa{\write\@auxout{\string
--- 633,644 ----
  @ %def \@pageref
  @
  [[\sublabel]] is like the [[\label]] command, except that it writes
! [[\newsublabel]] onto the [[.aux]] file rather than [[\newlabel]]. 
! {\bf Hack Alert!} For hyperreferencing, all labels must be hypertext 
! anchors, so added a [[\blindhyperanchor]], B.~N.~1995/06/26.
  <<noweb.sty>>=
  \newcommand{\sublabel}[1]{%
+   \blindhyperanchor{#1}%
    \@bsphack\if@filesw {\let\thepage\relax
     \def\protect{\noexpand\noexpand\noexpand}%
     \edef\@tempa{\write\@auxout{\string
***************
*** 644,649 ****
--- 649,655 ----
  [[\nosublabel]] creates a label with a sub-page part of~0.
  <<noweb.sty>>=
  \newcommand{\nosublabel}[1]{%
+   \blindhyperanchor{#1}%
    \@bsphack\if@filesw {\let\thepage\relax
     \def\protect{\noexpand\noexpand\noexpand}%
     \edef\@tempa{\write\@auxout{\string
***************
*** 700,711 ****
  @ %def \last@page \sub@page
  @
  We use Rainer's new expandable definitions of [[\ref]] and
! [[\pageref]] to minimise the risk of nasty surprises.
  <<noweb.sty>>=
  % RmS 92/08/14: made \ref and \pageref robust
! \def\ref#1{\@ifundefined{r@#1}{{\bf ??}<<warn of undefined reference to [[#1]]>>}%
!     {\expandafter\expandafter\expandafter
!      \@car\csname r@#1\endcsname\@nil\null}}
  \def\pageref#1{\@ifundefined{r@#1}{{\bf ??}<<warn of undefined reference to [[#1]]>>}%
       {\expandafter\expandafter\expandafter
        \@cdr\csname r@#1\endcsname\@nil\null}}
--- 706,720 ----
  @ %def \last@page \sub@page
  @
  We use Rainer's new expandable definitions of [[\ref]] and
! [[\pageref]] to minimise the risk of nasty surprises. 
! {\bf Hack Alert!} To use the referencing mechanism of [[hyper.sty]],
! [[\ref]] must be commented out. Same for [[\pageref]], however, that 
! screws up page numbers in the index, B.~N., 1995/06/26.
  <<noweb.sty>>=
  % RmS 92/08/14: made \ref and \pageref robust
! %\def\ref#1{\@ifundefined{r@#1}{{\bf ??}<<warn of undefined reference to [[#1]]>>}%
! %    {\expandafter\expandafter\expandafter
! %     \@car\csname r@#1\endcsname\@nil\null}}
  \def\pageref#1{\@ifundefined{r@#1}{{\bf ??}<<warn of undefined reference to [[#1]]>>}%
       {\expandafter\expandafter\expandafter
        \@cdr\csname r@#1\endcsname\@nil\null}}








-- 


________________________________________________________________
B. Narasimhan                             naras@euler.bd.psu.edu
================================================================================
Archive-Date: Wed, 19 Jul 1995 15:04:40 CDT
Sender: owner-litprog@SHSU.edu
From: cygnus@vinny.csd.mu.edu (Anthony J. Biacco)
Reply-To: LitProg@SHSU.edu, cygnus@VINNY.CSD.MU.EDU
Subject: Running Telnet from inside a talker HELP!
Date: 19 Jul 1995 19:45:17 GMT
Message-ID: <3ujncd$40@spool.mu.edu>
To: LitProg@SHSU.EDU


Hi...ok, I got a wierd problem here. I have a talker/chatline
and I want a telnet command from inside the talker for users.
problems is how to do it and how to get the output from telnet to echo to 
the talker. Do I use /bin/telnet or add all the telnet source code in the 
talker's code? It's in C, btw and the OS is Linux.  Any help would be 
greatly appreciated. Email preferred :-)

-Tony       cygnus@vinny.csd.mu.edu    

"I doubt, therefore I might be."

================================================================================
Archive-Date: Wed, 19 Jul 1995 21:32:18 CDT
Sender: owner-litprog@SHSU.edu
From: rlarockici@aol.com (RLaRockICI)
Subject: C Programming Training Videos
Date: 19 Jul 1995 20:29:22 -0400
Message-ID: <3uk812$k0u@newsbf02.news.aol.com>
Reply-To: LitProg@SHSU.edu, rlarockici@aol.com (RLaRockICI)
To: LitProg@SHSU.EDU

Our company is currently looking for high quality training videos covering
the C programming language.  Does anyone know of a good video based
training program.  If so could you please send me the name of the company
and how I might reach them.  Thank you for your time.

- Ronald        RLaRockICI@aol.com
================================================================================
Archive-Date: Thu, 20 Jul 1995 10:22:29 CDT
Sender: owner-litprog@SHSU.edu
From: furlos@alum01.its.rpi.edu (Steve Furlong)
Reply-To: LitProg@SHSU.edu, furlos@ALUM01.ITS.RPI.EDU
Subject: LP for MS Windows programming
Date: 20 Jul 1995 00:42:59 GMT
Message-ID: <3uk8qj$418@usenet.rpi.edu>
To: LitProg@SHSU.EDU


Hi, all.

I'm pretty new to literate programming, but I'm already enthusiastic
about it.  In the abstract, that is.  Much of my work is on MS
Windows, using a variety of application generators and coding
environments.  None of the LP tools I've examined, and that includes
almost all listed in the FAQ, handle many issues involved in this
situation.

1. For the most part, Windows programs require a handful of source
files even for "hello world".  These include the .c and .h files,
plus .def, .rc and often others.  What is the best way to keep all
of these files in a literate system?  Have .w files for the .c and
.h and let the (usually smaller) files just reside as themselves,
or have .w files for every source file, even if the source file is
only five lines long?

2. Many Windows programs these days are created with application
environments, app wizards, and so on.  Examples include the
Microsoft, Borland, and Symantec C++ development environments, Visual
Basic, and Delphi.  Source code is (or can be) ASCII text, which 
could be post-processed into a literate file, _except_ that the
various environments usually want to read the source files time
and again, and wouldn't be able to handle the strange files.
	One (poor) solution is to create the first pass of the
app, then remove it from the environment, turn it into a literate
program, and never put it into the env again.  This of course
loses most of the benefits of the integrated environment.
	We could also use very large comments to capture the
design decisions, but that isn't a literate program.  More
importantly, it has been pretty well demonstrated that most
people don't do it.
	Another option is to include specially-formatted
comments to serve as links to sections in a separate text file.
Winword's macro language is powerful enough to merge the doc
and the source files.  The problem is that this means
maintaining at least two files, in separate environments.  I
can't see this working in practice on anything larger than a
toy "proof of concept" project.
	The only workable solution I see to the problem of
incorporating maximum decision and rationale info into the
source files in an integrated environment is to modify the
environment itself to allow tying a word processor to the source
code windows.  This is more than a simple customization to any
env I've worked with, which is most.
	Unfortunately, the apps developed in this situation are
among those most needed to capture decision info.  Too many
Visual Basic programmers, for instance, just hack together an
app any old way, kludging around language limitations with no
thought for maintainability.

Ideas, anyone?  Borland, are you listening?


Regards,
Steve Furlong
================================================================================
Archive-Date: Thu, 20 Jul 1995 18:35:54 CDT
Sender: owner-litprog@SHSU.edu
From: bart@solarcs.tamu.edu (Bart Childs)
Reply-To: LitProg@SHSU.edu, bart@SOLARCS.TAMU.EDU
Subject: web-mode users manual
Date: 20 Jul 1995 21:13:14 GMT
Message-ID: <3umgta$p20@news.tamu.edu>
Keywords: Included graphics
To: LitProg@SHSU.EDU

I had not viewed the users manual before putting it out there.
I blindly included some graphics from another document and they
do not print well.  I will not have a chance to really clean it
up, but if you will remove the change to \topmargin (5th line)
in webm-man.tex, it will at least be readable.

Regrets and regards,  Bart Childs


================================================================================
Archive-Date: Fri, 21 Jul 1995 09:04:00 CDT
Sender: owner-litprog@SHSU.edu
From: perin@med.cornell.edu (Lewis Perin)
Reply-To: LitProg@SHSU.edu, perin@MED.CORNELL.EDU
Subject: Re: LP for MS Windows programming
Date: Fri, 21 Jul 1995 09:52:37 EST
Message-ID: <perin.18.0031671F@med.cornell.edu>
To: LitProg@SHSU.EDU

In article <3uk8qj$418@usenet.rpi.edu> furlos@alum01.its.rpi.edu (Steve Furlong) writes:
>From: furlos@alum01.its.rpi.edu (Steve Furlong)
>Subject: LP for MS Windows programming
>Date: 20 Jul 1995 00:42:59 GMT


>Hi, all.

>I'm pretty new to literate programming, but I'm already enthusiastic
>about it.  In the abstract, that is.  Much of my work is on MS
>Windows, using a variety of application generators and coding
>environments.  None of the LP tools I've examined, and that includes
>almost all listed in the FAQ, handle many issues involved in this
>situation.

>1. For the most part, Windows programs require a handful of source
>files even for "hello world".  These include the .c and .h files,
>plus .def, .rc and often others.  What is the best way to keep all
>of these files in a literate system?  Have .w files for the .c and
>.h and let the (usually smaller) files just reside as themselves,
>or have .w files for every source file, even if the source file is
>only five lines long?

>2. Many Windows programs these days are created with application
>environments, app wizards, and so on.  Examples include the
>Microsoft, Borland, and Symantec C++ development environments, Visual
>Basic, and Delphi.  Source code is (or can be) ASCII text, which 
>could be post-processed into a literate file, _except_ that the
>various environments usually want to read the source files time
>and again, and wouldn't be able to handle the strange files.

Not just that - the debugger may not know what to do with a webfile.  This was 
a galling defect of Symantec 6.x, but Borland succeeds here.  I haven't tried 
Symantec 7 on this issue.

>        One (poor) solution is to create the first pass of the
>app, then remove it from the environment, turn it into a literate
>program, and never put it into the env again.  This of course
>loses most of the benefits of the integrated environment.
>        We could also use very large comments to capture the
>design decisions, but that isn't a literate program.  More
>importantly, it has been pretty well demonstrated that most
>people don't do it.
>        Another option is to include specially-formatted
>comments to serve as links to sections in a separate text file.
>Winword's macro language is powerful enough to merge the doc
>and the source files.  The problem is that this means
>maintaining at least two files, in separate environments.  I
>can't see this working in practice on anything larger than a
>toy "proof of concept" project.
>        The only workable solution I see to the problem of
>incorporating maximum decision and rationale info into the
>source files in an integrated environment is to modify the
>environment itself to allow tying a word processor to the source
>code windows.  This is more than a simple customization to any
>env I've worked with, which is most.
>        Unfortunately, the apps developed in this situation are
>among those most needed to capture decision info.  Too many
>Visual Basic programmers, for instance, just hack together an
>app any old way, kludging around language limitations with no
>thought for maintainability.

>Ideas, anyone?  Borland, are you listening?

Sorry, but I haven't any encouragement to offer.  In my experience, where a 
Windows-based application has a separable subsystem that has little if 
anything to do with the GUI it's quite possible to make it a literate 
programming subproject, but for the rest the advantages of using the 
application framework's facilities are just too great to forgo.  Faced with 
this I just write profuse C++ comments and remind myself that I can still use 
Emacs and CWEB for other projects.

Cheers,

Lew Perin
Work: perin@med.cornell.edu / (212)746-2946
Home: perin@ritz.mordor.com / (201)435-2679
================================================================================
Archive-Date: Fri, 21 Jul 1995 09:58:22 CDT
Sender: owner-litprog@SHSU.edu
Date: Fri, 21 Jul 95 10:58:19 EDT
From: Lee Wittenberg <leew@pilot.njin.net>
Reply-To: LitProg@SHSU.edu, leew@PILOT.NJIN.NET
To: LitProg@SHSU.edu, furlos@alum01.its.rpi.edu
Subject: Re: LP for MS Windows programming
Message-ID: <CMM-RU.1.4.806338699.leew@pilot.njin.net>

Steve Furlong writes:

> I'm pretty new to literate programming, but I'm already enthusiastic
> about it.  In the abstract, that is.  Much of my work is on MS
> Windows, using a variety of application generators and coding
> environments.  None of the LP tools I've examined, and that includes
> almost all listed in the FAQ, handle many issues involved in this
> situation.
> 
> 1. For the most part, Windows programs require a handful of source
> files even for "hello world".  These include the .c and .h files,
> plus .def, .rc and often others.  What is the best way to keep all
> of these files in a literate system?  Have .w files for the .c and
> .h and let the (usually smaller) files just reside as themselves,
> or have .w files for every source file, even if the source file is
> only five lines long?

I do some Windows (literate) programming myself, so my experience may
be helpful.  I find that noweb is quite good for combining different
source files in different languages.  My hello.nw source would
contain 
	<<hello.c>>=
	<<hello.h>>=
	<<hello.def>>=
	<<hello.rc>>=
chunk definitions, and the makefile uses notangle's -R option to
extract the appropriate files at the appropriate times.  The only file
I don't put into the web is the makefile itself, as it leads to an
"interesting" chicken-and-egg problem.

> 2. Many Windows programs these days are created with application
> environments, app wizards, and so on.  Examples include the
> Microsoft, Borland, and Symantec C++ development environments, Visual
> Basic, and Delphi.  Source code is (or can be) ASCII text, which 
> could be post-processed into a literate file, _except_ that the
> various environments usually want to read the source files time
> and again, and wouldn't be able to handle the strange files.
> 	One (poor) solution is to create the first pass of the
> app, then remove it from the environment, turn it into a literate
> program, and never put it into the env again.  This of course
> loses most of the benefits of the integrated environment.

I find that integrated environments impose too much of their own ideas
of how I should work, so that I generally go back to the command-line
compiler and a makefile, where I have complete control.

The newer (v4.5) Borland C/C++ compilers have the capability to let you
add your own tools, and specify how they are to be used in a project.
I've gotten noweb working with them, and CWEB almost working (there's
a bug in the 16-bit compiler that prevents it from compiling with the
"official" PC change files.  The 32-bit compiler works okay, but it's
only for Windows, but Borland does not provide an EasyWin library for
Win32, and I just haven't had the time -- or inclination -- to do
anything about it), so that might be a way for you to go.  [BTW, even
with this feature, I still prefer the command line compiler.]

> 	We could also use very large comments to capture the
> design decisions, but that isn't a literate program.  More
> importantly, it has been pretty well demonstrated that most
> people don't do it.

That's somewhat the way CLiP works, so it *can* be LP.

		-- Lee

------------------------------------------------------------------------
Lee Wittenberg              | Everything was in the lap of the gods,
Computer Science Department | and there was no telling what would 
Kean College of New Jersey  | happen when they stood up.
Union, NJ   07083           | 
                            | -- Richard Armour
leew@pilot.njin.net         |    "It All Started With Europa" (1955)
------------------------------------------------------------------------
================================================================================
Archive-Date: Sun, 23 Jul 1995 05:15:16 CDT
Sender: owner-litprog@SHSU.edu
From: thompson@sun1.coe.ttu.edu
Subject: comp.programming.literate FAQ
Date: 23 Jul 1995 04:44:17 GMT
Message-ID: <literate-programming-faq_806474625@rtfm.mit.edu>
Reply-To: LitProg@SHSU.edu, thompson@sun1.coe.ttu.edu
To: LitProg@SHSU.EDU

Archive-name: literate-programming-faq
Last-modified: 1995/06/22
Version: 1.1.16


Welcome to the Literate Programming Frequently Asked Questions List
-------------------------------------------------------------------

This version was created Thursday, 22 June 1995, and should considered
stale after 90 days.  Information contained in this document is the best
available at preparation.  The original file was dated October 15, 1993
(just for historical purposes).

Disclaimer: "This FAQ is presented with no warranties or guarantees of
ANY KIND including correctness or fitness for any particular purpose.
The author of this document has attempted to verify correctness of the
data contained herein; however, slip-ups can and do happen.  If you use
this data, you do so at your own risk."

Copyright 1993, 1994, 1995 by David B. Thompson.  All rights reserved
worldwide. Permission is granted to copy this document for free
distribution so long as it remains intact and unmodified.  For other
arrangements, contact the author/maintainer via email:
thompson@sun1.coe.ttu.edu.

What's New?
-----------

+ Updated cwebx3.0.
+ Updated fweb entry (notices added).
+ Added FunnelWeb3.0AC entry.


= ======================================================================

* Introduction or "What's this all about?"
------------------------------------------

This document is for new and experienced users of literate programming
tools.  The purpose is to explain the concept of literate programming and
to provide a resource for locating files of interest to literate
programmers and those interested in literate programming.

The Literate Programming (LitProg) Frequently Asked Questions (FAQ) list
is maintained by Dave Thompson, who can be reached at:

    thompson@sun1.coe.ttu.edu     * Preferred mailing address for FAQ
                                    related comments/questions.
    wqdbt@ttacs1.ttu.edu          * Forwarded to my pc.

Comment and constructive criticism is welcome.  Direct flames to
/dev/null (or > nul if you're a msdos user! ;-)  If you find an error,
please report it.  I'm particularly interested in establishing the
locations of generally available literate programming tools.  If you are
the author of such a tool and wish to have it included in this list,
please send email.

Please note this is a work-in-progress.  It is *not* complete, and
probably will not be complete for some months.  Nevertheless, the
information contained herein may be useful to some.  Use it as it is
intended.

- ----------------------------------------------------------------------

- Typography
------------

Major sections of the FAQ are divided by double lines (====).  Minor
sections and other divisions are separated by single lines (----).
Major topics use a "* " as a leader.  Minor topics use a "- " as a
leader.  This should simplify searching for topics.


= ======================================================================

Table of Contents:
------------------

* Introduction, or "What's this all about?"
    - Typography
* How do I get the FAQ?
    - Literate Programming FAQ
    - FWEB FAQ
* Is there a newsgroup?  (The comp.programming.literate newsgroup)
* What internet nodes are of interest to literate programmers?
* What is literate programming?
* How do I begin literate programming?
* What literate programming tools are available and where are they?
    - APLWEB
    - AWEB
    - CLiP
    - CWEB
    - CWEBx3.0
    - FunnelWeb
    - FunnelWeb3.0AC
    - FWEB
    - IMPACT
    - lit2x
    - Literate Programmer's Workshop (LPW)
    - MapleWEB
    - MWEB (Schrod/Detig)
    - MWEB (Sewell)
    - noweb
    - nuweb
    - ProTeX
    - RWEB
    - SchemeWEB
    - Spidery WEB
    - WEB
    - WinWordWEB
* Are there other tools I should know about?
    - C2LaTeX
    - c2cweb
    - c2man
    - cnoweb
    - Fold2web
    - FunnelWeb mode
    - noweb.el
    - nuweb.el
    - TIE
    - Web mode
* What other resources are available?
    - World Wide Web
    - TeX Resources
    - Virtual Coursework
* Are there any code examples?
    - Examples included with developer's tools
    - Cameron Smith's KR-CWEB
    - Stanford GraphBase
* Bibliographies.
* How to anonymously ftp.
* Acknowledgements.
* End notes.


= ======================================================================

* How do I get the FAQ?
-----------------------

- Literate Programming FAQ
--------------------------

You have many ways to get a current copy of this FAQ.  One is to use
anonymous ftp (if you don't know how, see a later section in this FAQ)
to connect to one of the Comprehensive TeX Arvchive Network (CTAN) sites
or the Literate Programming Archive and retrieve a copy of the file.
Open an ftp connection to one of the CTAN sites and retrieve the file:

    help/LitProg-FAQ

(For more information on CTAN and the literate programming archive, see
the section below entitled "Internet Nodes of Interest to Literate
Programmers.")

An alternative is to use the fileserver at Sam Houston State University
(SHSU).  Send a message to FILESERV@SHSU.EDU and include in your
message:

    SENDME LITPROG.FAQ

The file server will forward a copy of the file to you via email.


- ----------------------------------------------------------------------

- FWEB FAQ
----------

David Coker <coker@astro.sunyit.edu> now maintains the FWEB FAQ.  (We
all owe Marcus Speh a big THANK YOU for maintaining the FWEB FAQ for so
long!)  The current version number is 1.30a.  It can be retrieved in the
same way as this FAQ; either by anonymous ftp or through the SHSU file
server.  On the SHSU server, the file name is FAQ.FWEB.  Invoke your ftp
software, open a connection to NIORD.SHSU.EDU [192.92.115.8], attach to
the directory FAQ, and transfer the file FAQ.FWEB.

Alternatively, send a message to the file server, FILESERV@SHSU.EDU, and
include the following text in a one line message:

    SENDME FAQ.FWEB

The file server will send the current version of the file via email.

The FWEB FAQ exists in various formats, including HyperText (see other
resources below). In Europe, the complete distribution can also be
obtained from ftp.desy.de [131.169.10.115] in directory
/pub/faq/web/fweb/.  It is also available from the literate programming
archive (LPA) in the directory LPA/Documentation/faq/fweb (see the
references to LPA below for more information).


= ======================================================================

* Is there a newsgroup?
-----------------------

One of the most important resources is the literate programming
newsgroup, comp.programming.literate.  You can read this newsgroup using
your standard reader.  Altenatively, the newsgroup is gated to a mailing
list hosted by George Greenwade and Sam Houston State University.  You
can subscribe by sending mail to the list-server, LISTSERV@SHSU.EDU, and
include in the message one line of text:

    SUBSCRIBE LITPROG  "your name in quotes"

The list is unmoderated; messages sent to litprog@shsu.edu are
automatically distributed to all subscribers and cross-posted to
comp.programming.literate.

Archives of the mailing list and newsgroup are maintained on
niord.shsu.edu [192.92.115.8] in the directory litprog.


= ======================================================================

* What internet nodes are of interest to literate programmers?
--------------------------------------------------------------

The principal nodes of interest to literate programmers are the Literate
Programming Archive (LPA hereafter) and the CTAN (Comprehensive TeX
Archive Network).

The Literate Programming Archive (LPA) is:

  Node:       ftp.th-darmstadt.de [130.83.55.75]
  Directory:  programming/literate-programming
  Notes:      Fastest response during off-U.S. [yep] business hours.

Participating hosts in the Comprehensive TeX Archive Network are:
  ftp.dante.de  (Deutschland)         
       -- anonymous ftp                 /tex-archive (/pub/tex /pub/archive)
       -- gopher on node sun.dante.de
       -- e-mail via ftpmail@dante.de
       -- Administrator: <ftpmaint@dante.de>
  ftp.shsu.edu  (Texas, USA)      
       -- anonymous ftp and gopher      /tex-archive (/pub/tex /pub/archive)
       -- NFS mountable from ftp.SHSU.edu:/pub/ftp/tex-archive
       -- e-mail via ftpmail@ftp.SHSU.edu
       -- World Wide Web access on www.SHSU.edu
       -- Administrator: <CTAN-Mgr@SHSU.edu>
  ftp.tex.ac.uk (England)               
       -- anonymous ftp                 /tex-archive (/pub/tex /pub/archive)
       -- gopher on node gopher.tex.ac.uk
       -- NFS mountable from nfs.tex.ac.uk:/public/ctan/tex-archive
       -- World Wide Web access on www.tex.ac.uk
       -- Administrator: <ctan-uk@tex.ac.uk>

A list of CTAN archive sites and their mirrors can be found on:

  ftp.dante.de: /tex-archive/CTAN.sites

I presume that the other CTAN sites mirror this file, but have not checked.
As of my last check (September 1994), it contains:

  "In order to reduce network load, it is recommended that you use the
  Comprehensive TeX Archive Network (CTAN) host which is located in the
  closest network proximity to your site."
  
Known partial mirrors of the CTAN reside on (alphabetically):
  dongpo.math.ncu.edu.tw (Taiwan)       /tex-archive
  ftp.adfa.oz.au (Australia)            /pub/tex/ctan
  ftp.muni.cz (The Czech Republic)      /pub/tex/CTAN
  ftp.cs.ruu.nl (The Netherlands)       /pub/tex-archive
  ftp.uu.net (Virginia, USA)            /pub/text-processing/TeX
  nic.switch.ch (Switzerland)           /mirror/tex

Known mirrors of the CTAN reside on (alphabetically):
  ftp.center.osaka-u.ac.jp (Japan)      /CTAN
  ftp.ccu.edu.tw (Taiwan)               /pub/tex
  ftp.cs.rmit.edu.au  (Australia)       /tex-archive
  ftp.duke.edu (North Carolina, USA)    /tex-archive
  ftp.germany.eu.net (Deutschland)      /pub/packages/TeX
  ftp.gwdg.de (Deutschland)             /pub/dante
  ftp.jussieu.fr (France)               /pub4/TeX/CTAN
  ftp.loria.fr (France)                 /pub/unix/tex/ctan
  ftp.mpi-sb.mpg.de (Deutschland)       /pub4/tex/mirror/ftp.dante.de
  ftp.uni-bielefeld.de (Deutschland)    /pub/tex
  ftp.uni-stuttgart.de (Deutschland)    /tex-archive (/pub/tex)
  ftpserver.nus.sg (Singapore)          /pub/zi/TeX
  src.doc.ic.ac.uk (England)            /packages/tex/uk-tex
  sunsite.unc.edu (North Carolina, USA)	/pub/packages/TeX
  wuarchive.wustl.edu (Missouri, USA)   /packages/TeX


Other nodes and directories of interest include:

  Node:       niord.shsu.edu [192.92.115.8]
  Directory:  various (do some snooping!)
  Notes:      Has a gopher server.

  Node:       ftp.desy.de [131.169.10.115]
  Directory:  pub/web. Various documents, samples, and the FWEB FAQ.
  Notes:      Has a www server, http://info.desy.de:80/


= ======================================================================

* What is Literate Programming?
-------------------------------

Literate programming is the combination of documentation and source
together in a fashion suited for reading by human beings.  In fact,
literate programs should be enjoyable reading, even inviting!  (Sorry
Bob, I couldn't resist!)  In general, literate programs combine source
and documentation in a single file.  Literate programming tools then
parse the file to produce either readable documentation or compilable
source.  The WEB style of literate programming was created by D.E. Knuth
during the development of his TeX typsetting software.

All the original work revolves around a particular literate programming
tool called WEB.  Knuth says:

     The philosophy behind WEB is that an experienced system
     programmer, who wants to provide the best possible
     documentation of his or her software products, needs two
     things simultaneously: a language like TeX for formatting,
     and a language like C for programming.  Neither type of
     language can provide the best documentation by itself; but
     when both are appropriately combined, we obtain a system
     that is much more useful than either language separately.

     The structure of a software program may be thought of as a
     web that is made up of many interconnected pieces.  To
     document such a program we want to explain each individual
     part of the web and how it relates to its neighbours. The
     typographic tools provided by TeX give us an opportunity to
     explain the local structure of each part by making that
     structure visible, and the programming tools provided by
     languages such as C or Fortran make it possible for us to
     specify the algorithms formally and unambigously. By
     combining the two, we can develop a style of programming
     that maximizes our ability to perceive the structure of a
     complex piece of software, and at the same time the
     documented programs can be mechanically translated into a
     working software system that matches the documentation.


Another author (Eric W. van Ammers) wrote me a short article treating
his opinions on literate programming.  The text follows:


First observation on LP

    About 90% of the disussion on this list is about problems with
applying some WEB-family member to a particular programming language or
a special documentation situation. This is ridiculous, I think. Let me
explain shortly why...

Lemma 1:
    I have proposed for many years that programming has nothing to do
with programming langauges, i.e. a good programmer makes good programs
in any language (given some time to learn the syntax) and a bad
programmer will never make a good program, no matter the language he
uses (today many people share this view, fortunately).

Lemma 2:
    Literate Programming has (in a certain way not yet completely understood)
to do with essential aspects of programming.

Conclusion 1:
    A LP-tool should be independent of programming language.

Lemma 3:
    It seems likely that the so called BOOK FORMAT PARADIGM [ref. 1] plays an
important role in making literate programs work.

Lemma 4:
    There are very many documentation systems currently being used to produce
documents in the BOOK FORMAT.

Conclusion 2:
    A LP-tool should be independent of the documentation system that the
program author whishes to use.

My remark some time ago that we should discuss the generic properties of
an LP-tool was based on the above observation.


References:

[1] Paul W. Oman and Curtus Cook. Typographical style is more than cosmetic.
    CACM 33, 5, 506-520 (May 1990)


Second observation on LP

    The idea of a literate program as a text book should be extendend
even further. I would like to see a literate program as an (in)formal
argument of the correctness of the program.
    Thus a literate program should be like a textbook on mathematicics.
A mathematical textbook explains a theory in terms of lemma and
theorems. But the proofs are never formal in the sense that they are
obtaind by symbol manipulation of a proof checker. Rather the proofs are
by so called "informal rigour", i.e. by very precise and unambiguous
sentences in a natural language.

Eric W. van Ammers
Department of Computer Science
Wageningen Agricultural University
Dreijenplein 2				              E-mail:	ammers@rcl.wau.nl
6703 HB  Wageningen			            voice:	+31 (0)8370 83356/84154
The Netherlands				              fax:	  +31 (0)8370 84731


Another author (Norman Ramsey) wrote me and asked that his opinions be included in
the FAQ.  What follows are Norman's comments verbatim.

I see it's time for the ``how is literate programming different from
verbose commenting'' question.  Perhaps David Thompson will get this
into the FAQ.  Alert!  What follows are my opinions.  In no way do I
claim to speak for the (fractious) literate-programming community.

How is literate programming different from verbose commenting?

There are three distinguishing characteristics.  In order of
importance, they are:
  - flexible order of elaboration
  - automatic support for browsing
  - typeset documentation, especially diagrams and mathematics

Flexible order of elaboration means being able to divide your source
program into chunks and write the chunks in any order, independent of
the order required by the compiler.  In principle, you can choose the
order best suited to explaining what you are doing.  More subtly, this
discipline encourages the author of a literate program to take the
time to consider each fragment of the program in its proper sphere,
e.g., not to rush past the error checking to get to the ``good
parts.''  In its time and season, each part of the program is a good
part.  (This is the party line; your mileage may vary.)

I find the reordering most useful for encapsulating tasks like input
validation, error checking, and printing output fit for humans --- all
tasks that tend to obscure ``real work'' when left inline.
Reordering is less important when using languages like Modula-3, which
has exceptions and permits declarations in any order, than when using
languages like C, which has no exceptions and requires declaration
before use.


Automatic support for browsing means getting a table of contents,
index, and cross-reference of your program.  Cross-reference might be
printed, so that you could consult an index to look up the definition
of an identifier `foo'.  With good tools, you might get a printed
mini-index on every page if you wanted.  Or if you can use a hypertext
technology, cross-reference might be as simple as clicking on an
identifier to reach its definition.  

Indexing is typically done automatically or `semi-automatically', the
latter meaning that identifier definitions are marked by hand.
Diligently done semi-automatic indexes seem to be best, because the
author can mark only the identifiers he or she considers important,
but automatic indexing can be almost as good and requires no work.
Some tools allow a mix of the two strategies.

Some people have applied literate-programming tools to large batches
of legacy code just to get the table of contents, index, and
cross-reference.  


I don't use diagrams and mathematics very often, but I wouldn't want
to have to live without them.  I have worked on one or two projects
where the ability to use mathematical formulae to document the program
was indispensible.  I also wouldn't like to explain some of my
concurrent programs without diagrams.  Actually I write almost all of
my literate programs using only sections headers, lists, and the
occasional table. 


>Wouldn't it be easier to do one's literate programming using a wysiwyg
>word processor (e.g. Word for Windows) and indicate what is source
>code by putting it in a different font?

The data formats used in wysiwyg products are proprietary, and they
tend to be documented badly if at all.  They are subject to change at
the whim of the manufacturer.  (I'll go out on a limb and say there
are no significant wysiwyg tools in the public domain.  I hope the
Andrew people will forgive me.)  These conditions make it nearly
impossible to write tools, especially tools that provide automatic
indexing and cross-reference support.  The CLiP people have a partial
solution that works for tools that can export text --- they plant tags
and delimiters throughout the document that enable the reordering
transformation (``tangling'').

People use TeX, roff, and HTML because free implementations of these
tools are widely available on a variety of platforms.  TeX and HTML
are well documented, and TeX and roff are stable.  TeX is the most
portable.  I think I have just answered the FAQ ``how come all these
tools use TeX, anyway?'' :-)

Norman Ramsey


= ======================================================================

* How do I begin literate programming?
--------------------------------------

A recommended book is D.E. Knuth's collection of articles (1992)
"Literate Programming," Center for the Study of Language and
Information, Stanford University, ISBN 0-937073-80-6 (pbk).  This book
gives insight into Knuth's thoughts as he developed the web system of
literate programming (and TeX for typesetting).  It does not document
methods for literate programming.

A recommended book is Wayne Sewell's (1989) "Weaving a Program: Literate
Programming in WEB," Van Nostrand Reinhold, ISBN 0-442-31946-0 (pbk).
This book focuses on using Knuth's web system.

Some talk exists in the newsgroup/mailing list for a Usenet University
course in literate programming.  I'm sure discussion of this topic will
be welcomed.  If you are interested, please participate.


= ======================================================================

* What literate programming tools are available and where are they?
-------------------------------------------------------------------

A significant number of tools for literate programming are available.
Most have been ported from their original systems, so support multiple
computer platforms.  If you are the developer of such a tool, and would
like to make the software freely available, please send me email and
I'll reply with a form (like those below) for you to fill in.  (Or
short-circuit the process and kludge a form from below. :-)


- ----------------------------------------------------------------------

- APLWEB
--------

Developer:      Christoph von Basum <CvB@erasmus.hrz.uni-bielefeld.de>
Version:        Unknown
Hardware:       MSDOS
Languages:      IBM APL2 and STSC APL
Formatter:      Plain TeX
Availability:   Anonymous ftp from:
                  LPA:/apl
                  watserv1.uwaterloo.ca:/languages/apl/aplweb
Readme:         Unknown

Description:    None available.

Support:        Unknown

Note: The status of this particular package is unknown.


- ----------------------------------------------------------------------

- AWEB
------

Developer:      Unknown
Version:        Unknown
Hardware:       Unknown
Languages:      Ada
Formatter:      Unknown
Availability:   Anonymous ftp from:
                  LPA:/ada/web
Readme:         Unknown

Description:    None available

Support:        Not supported.


- ----------------------------------------------------------------------

- CLiP
------

Developer:      E.W. van Ammers and M.R. Kramer
Version:        Unknown
Hardware:       Vax/VMS, Unix, and MS-DOS
Languages:      Any programming language.
Formatter:      Any formatter (TeX, LaTeX, Troff, Runoff, etc) or any
                wordprocessor including WYSIWYG systems (Word Perfect,
                Win Word, Ami Pro, Word, etc.)
Availability:   Anonymous ftp from:
                  sun01.info.wau.nl:/CLIP/ms_dos    MS-DOS version
                  sun01.info.wau.nl:/CLIP/vax_vms   VAX/VMS version
                  CTAN:/web/clip
                  LPA:/machines/ms-dos
                  LPA:/machines/vax
Readme:         With bundle above

Description:

  CLiP does not use explicite commands to perform the extraction
  process. Rather it recognizes pseudostatemens written as comments in
  the programming language in question. CLiP distinguishes
  pseudostatments from ordinary comments because the former comply with
  a a particular style. This style can be adjusted to suit virtually any
  programming language. The CLiP approach to LP makes the system
  extremely versatile. It is independent of programming language and
  text processing environment. We designed CLiP to be compatible with
  hypertext systems as well but we have not yet experimented with this
  form of documentation.

  Features:
  + CLiP imposes virtually no limitations on the text-processing system
    used to produce the documentation. If the text-processor supports
    these items you can
    + structure the documentation according to your own taste.
    + include drawings, pictures, tables etc.
    + disclose your documentatio my means of X-ref tables, Indexes,
      Table of contents, Table of tables, Table of figures, etc.
    + typeset the documented code.
  + Extracts any number of modules from a maximum of 64 source files.
  + No pretty-printing. Code from the source files is copied "as is" to
    the module.
  + Appearance of code segments in the documentation matches those of
    the modules to ease the identification of code segements.
  + Supports partially specified data types.
  + Comprehensive user manual (preliminary version) and technical
    description.
  - No automatic generation of a X-ref table for program identifiers.

Support:        Bugs, problems and assistance by e-mail:
                  ammers@rcl.wau.nl


- ----------------------------------------------------------------------

- CWEB
------

Developer:      Silvio Levy and D.E. Knuth
Version:        3.0
Hardware:       Unix systems (dos and amiga ports available)
Languages:      C and C++
Formatter:      Plain TeX and LaTeX.
Availability:   Anonymous ftp from:
                  labrea.stanford.edu:/pub/cweb
                  LPA:/c.c++
                  CTAN:/web/c_cpp/cweb
                  DOS version in CTAN:/web/c_cpp/cwb30p8c
                  DOS version in LPA:/machines/ms-dos
                  Amiga version CTAN:/web/c_cpp/AmigaCWEB
                  Mac port of CTANGLE in LPA:/machines/mac
                  LaTeX support in LPA:/c.c++
Readme:         Bundled with above
Description:    No description provided.
Support:        Bugs to levy@math.berkeley.edu


- ----------------------------------------------------------------------

- CWEBx3.0:
-----------

Developer:	Marc van Leeuwen
Version:	Unknown
Hardware:	Any system using ASCII code
Languages:	ANSI C
Formatter:	Plain TeX
Availability:	Anonymous ftp from:
             	  ftp.cwi.nl/pub/cweb
Readme:		Bundled with above
Brief description:
            A modified implementation of CWEB, with some extensions.
            Provides a mode for full compatibility with Levy/Knuth CWEB.
            The most significant extras are:
            - Typedef declarations affect formatting througout source file
            - Include files are scanned for typedef definitions
            - Flexible selection of layout style
            - Possibility to refer to sections using symbolic labels
            - CTANGLE detects unbalanced braces and parentheses
            - CWEAVE can be made to report syntax errors more easily
            - Some additional mechanisms to avoid formatting problems
            - New and modular set of grammar rules, based on ANSI C syntax
            - Possibility to suppress #line directives
            - A new manual

Support:
            bugs and remarks to M.van.Leeuwen@cwi.nl


- ----------------------------------------------------------------------

- FunnelWeb
-----------

Developer:      Ross N. Williams: ross@guest.adelaide.edu.au
Version:        Unknown
Hardware:       MSDOS, Mac, VMS, Sun.  Other ports reported.
Languages:      No restrictions.
Formatter:      Plain TeX for printing.  Otherwise, no restrictions.
Availability:   Anonymous ftp from:
                  CTAN:/web/funnelweb
                  LPA:/independent
                  ftp.adelaide.edu.au:/pub/funnelweb
Readme:         With bundle above.

Description:

  FunnelWeb is a production-quality literate-programming tool that
  emphasises simplicity and reliability. Everything about FunnelWeb,
  from the simplicity of its language to the comprehensive tutorial in
  the user's manual, has been designed to make this as simple, as
  practical, and as usable a tool as possible.

  Features:
     + Provides a simple macro preprocessor facility.
     + Can produce typeset documentation.
     + Runs on Sun, VMS VAX, Macintosh, PC, and others.
     + Portable C source code distributed under GNU licence.
     + Comprehensive user's manual including tutorial.
     + Programming-language independent.
     + Can generate multiple output files.
     + Allows complete control over the output text.
     + Regression test suite with over 200 tests.
     + Fully worked example (in /pub/funnelweb/examples).
     - Requires TeX to produce typeset documentation.
     - Typesets program code using TT font only.

Support:  No formal support available.  Mailing list maintained with
          about 50 subscribers.  Informal assistance available from
          mailing list.


- ----------------------------------------------------------------------

- FunnelWeb 3.0AC
-----------------

Developer:      Enhanced by A.B.Coates (coates@physics.uq.edu.au)
                from FunnelWeb v3.0 by Ross N. Williams
                                     (ross@guest.adelaide.edu.au)
Version:        3.0AC
Hardware:       MSDOS, Mac, VMS, Sun, OSF/1, Linux, Sys.V, OS/2.
Languages:      No restrictions.
Formatter:      Tex, LaTeX, or HTML.
Availability:   Anonymous ftp from
                  ftp.physics.uq.oz.au:/pub/funnelwebAC30.tar.gz
Readme:         With bundle above; for FunnelWeb manual see WWW page
        http://www.physics.uq.oz.au:8001/people/coates/funnelweb.html

Description:
  FunnelWeb 3.0AC is an enhanced version of FunnelWeb (see the entry
  for FunnelWeb).  FunnelWeb is designed to be typesetter independent,
  though FunnelWeb v3.0 only supports (La)TeX as the typesetter.
  FunnelWeb 3.0AC also supports HTML, and creates appropriate
  hypertext links within the document among the code sections.
  FunnelWeb 3.0AC also supports automatic and manual insertion of line
  directives, so that compiler errors can be flagged back to the
  original FunnelWeb source file.  FunnelWeb 3.0AC is completely
  compatible with FunnelWeb v3.0 sources (with one minor exception;
  see the file README.ABC which comes with the FunnelWeb 3.0AC
  distribution).

Support:  Supported by A.B.Coates (coates@physics.uq.edu.au), subject
          to the time constraints imposed by his thesis.


- ----------------------------------------------------------------------

- FWEB
------

Developer:      John A. Krommes <krommes@princeton.edu>
Version:        1.30a (1.40 for the experienced, patient, and brave)
Hardware:       Unix, VMS, and DOS platforms (anything with ANSI C)
Languages:      C, C++, Fortran-77, Fortran-90, Ratfor, TeX; also, a
          		  language-independent mode.
Formatter:      Plain TeX and LaTeX.
Availability:   Anonymous ftp from:
                  ftp.pppl.gov:/pub/fweb
                  CTAN:/web/fweb
                  LPA:/fweb
                  DOS version in LPA:/machines/ms-dos
Readme:         In bundle with above.

Description:

  It also has a well-developed user's manual and its own FAQ (see
  above).  Beginning with 1.40, documentation is maintained in gnu
  texinfo format.  It runs on most platforms: VMS, PC, UNIX, and pretty
  much anything that the GNU C compiler (GCC) is supported for.

  Features:

   + Processes multiple languages during a single run (so one can mix C
     and Fortran, for example).
   + Language-independent mode (v1.40).
   + Ability to turn off pretty-printing (v1.40).
   + Built-in Ratfor translator.
   + Built-in macro preprocessor (closely follows ANSI C, with
     extensions).
   + A style file that allows the user to adjust many parameters and
     behavior patterns of FWEB.
   + Various operator-overloading features that provide additional
     pretty-printing capabilities to languages such as C++ and
     Fortran-90.
   + Numerous miscellaneous features and command-line options.

Support:        Bug reports and suggestions to krommes@princeton.edu

The following text was relayed by utcke@tu-harburg.d400.de recently.  A
new entry for this FAQ will eventually be prepared.

NOTICE (June 12, 1995)
  The 1.52 tar file was regenerated.  If your version of that file included
the file web/defaults.mk, you should say `make clean' before beginning the
installation process, or use the new tar file.  

NOTICE (June 10, 1995)
  Version 1.52 is available.  More bug fixes.  1.5x will remain in
beta-testing until about Sept. 1, 1995; further changes are hoped to be
minimal.  If you have previously picked up 1.50 or 1.51, you definitely should
install 1.52 instead.

So it seems there's really 1.5x available for the experienced, patient
and brave --- especially given the following statement (same source):

Version 1.30, which for several years has been declared to be the stable
version of choice, is gradually getting out of date.  I now recommend that
current users try VERY, VERY CAUTIOUSLY to upgrade to v1.50.  Don't do that
the week before a critical deadline.


- ----------------------------------------------------------------------

- IMPACT
--------

Developer:      Timothy Larkin, from Levy/Knuth CWEB 3.1
Version:        1.0
Hardware:       Macintosh; requires AppleEvents.
Languages:      C, C++
Formatter:      TeX
Availability:   CTAN archives
Readme:         A short readme file is included in the SEA archive.

Description:

  IMPACT implements CTangle from the Levy/Knuth CWEB 3.1. It operates as
  a foreground program, tangling files selected from the Mac File
  Picker. Or it can operate in the background, tangling files in
  response to odoc events sent by other applications, such as editors.

Support:

  I welcome any reports of bugs. The product will be updated as new
  versions of the CWEB appear. Other features may be added as users
  suggest them.


- ----------------------------------------------------------------------

- lit2x
-------

Developer:      Unknown
Version:        Unknown
Hardware:       Unknown
Languages:      Unknown
Formatter:      Unknown
Availability:   Anonymous ftp from:
                  LPA:/independent
Readme:         Unknown
Description:    None available
Support:        Unknown


- ----------------------------------------------------------------------

- Literate Programmer's Workshop (LPW)
--------------------------------------

Developer:      Norbert Lindenberg
Version:        1.1
Hardware:       Apple Macintosh
Languages:      C++, Object Pascal & others
Formatter:      self-contained WYSIWYG system
Availability:   Anonymous ftp from:
                  LPA:/machines/mac
                  CTAN:/web/lpw
                  ftp.apple.com:/pub/literate.prog
Readme:         With bundle above.  Also comes with 38-page manual.

Description:

  The Literate Programming Workshop is an environment for the integrated
  development of program source text and documentation in combined
  documents. It consists of a WYSIWYG word processor based on a style
  sheet approach, a mechanism to extract parts of the text in a
  document, and a project management system that handles multi-document
  projects. The system is designed to be used in conjunction with the
  Macintosh Programmer's Workshop: it prepares raw source text for the
  MPW compilers, accepts MPW error messages, and shows them in the
  context of the original documents. Automatic indexing and hypertext
  features allow for easy access to both source text and documentation.

  LPW is shareware.

Support:        Bugs, problems, and questions to lpw@aol.com.


- ----------------------------------------------------------------------

- MapleWEB
----------

Developer:      Unknown
Version:        Unknown
Hardware:       Unknown
Languages:      Maple
Formatter:      Unknown
Availability:   Anonymous ftp from:
                  LPA:/maple
Readme:         Unknown
Description:    None
Support:        Unknown


- ----------------------------------------------------------------------

- MWEB (Schrod/Detig)
---------------------

Developer:      Joachim Schrod
Version:        Unknown
Hardware:       Unknown
Languages:      Modula-2
Formatter:      Unknown
Availability:   Anonymous ftp from:
                  LPA:/modula-2
Readme:         Unknown
Description:    None
Support:        Not supported.


- ----------------------------------------------------------------------

- MWEB (Sewell)
---------------

Developer:      Sewell
Version:        Unknown
Hardware:       Unknown
Languages:      Modula-2
Formatter:      Unknown
Availability:   Anonymous ftp from:
                  LPA:/modula-2
Readme:         Unknown
Description:    None
Support:        Not supported.


- ----------------------------------------------------------------------

 - noweb
 -------

Developer:      Norman Ramsey <norman@bellcore.com>
Version:        2.7a
Hardware:       Unix and DOS platforms.
Languages:      All programming languages.
                Automatic indexing for C, Icon, Standard ML, TeX, Yacc
Formatter:      Plain TeX, LaTeX, and HTML (Mosaic/Netscape) formatters.
Availability:   Anonymous ftp from:
                  CTAN:/web/noweb
                  LPA:/independent
                  Last recourse, use bellcore.com:/pub/norman

Readme:         With bundle above, or see ``Literate Programming
                Simplified,'' IEEE Software, September 1994, pp97-105.

Description:

  noweb is designed to meet the needs of literate programmers while
  retaining the simplest possible input format.  Its primary
  advantages are simplicity, extensibility, and language-independence.
  noweb uses 5 control sequences to WEB's 27.  The simple noweb manual is
  only 2 pages; documenting the full power of noweave and notangle
  requires another 3 pages.  noweb works ``out of the box'' with any
  programming language, and a simple back end for a new text formatter
  can be written in about 50 lines of awk. The primary sacrifice
  relative to WEB is the loss of prettyprinting.

  noweb supports indexing and identifier cross-reference, including
  hypertext ``hot links'' courtesy of Mosaic or Netscape.  noweb
  includes a simple, efficient LaTeX-to-HTML converter, so you can use
  hypertext browsers on your legacy documents.  noweb can also process
  nuweb programs, so you can use noweb to convert a standard nuweb
  program to HTML with one command.

Support:        email to the author


- ----------------------------------------------------------------------

- nuweb
-------

Developer:      Preston Briggs: preston@cs.rice.edu
Version:        0.87
Hardware:       Unix systems: Sparcs, RS/6000s, HPs; (!) MSDOS and Amiga.
Languages:      Any programming language or combination of programming
                languages.
Formatter:      Latex
Availability:   Anonymous ftp from:
                  Unix: CTAN:/web/nuweb
                  DOS:  CTAN:/web/nuweb-pc
                  LPA:/independent
                  Amiga: CTAN:/web/nuweb/nuweb_ami
                  Amiga: wuarchive.wustl.edu/pub/aminet
Readme:         Send mail to preston@cs.rice.edu

Description:

  A single program that takes a web file written in a combination of
  latex and any programming language(s) and produces a latex file that
  can be pretty printed and a set of files containing code for
  compilation/interpretation by the appropriate language processors.

  Strengths include speed, simplicity, multiple languages, nice indices
  and cross-references, latex.  Doesn't require any special macros or
  macro files.

  Drawbacks: latex-dependent, no code pretty printing, harder to make
  indices than cweb.

  More good stuff: nice support for make, doesn't reformat source files,
  so they're easy to debug.  Lots of control without too much effort.
  That is, it doesn't do too much!

  Future directions... Very little change planned, except perhaps
  refinements in the indexing software.

Support:        Hack it yourself or send e-mail to preston@cs.rice.edu


- ----------------------------------------------------------------------

- ProTeX
--------

Developer:      Eitan Gurari <gurari@cis.ohio-state.edu>
Version:        ProTeX 1.1,  AlProTeX 1.4
Hardware:       Any platform with (La)TeX
Languages:      Any language
Formatter:      TeX or LaTeX
Availability:   Anonymous ftp from:
                  ftp.cis.ohio-state.edu : pub/tex/osu/gurari/
                  LPA:/independent
Readme:         With bundle above

Description:   
  + Easy to use
  + Extensible
  + Language independent
  + Multiple output files
  + Fast (single compilation provides output and dvi files)
  + No installation is needed besides copying the files (written in TeX)
  Introduction of main features and examples in pub/tex/osu/gurari/LitProg
  Complete manual in Eitan M. Gurari, "TeX and LaTeX: Drawing and 
  Literate Programming", McGraw-Hill, 1994

Support:        gurari@cis.ohio-state.edu


- ----------------------------------------------------------------------

- RWEB
------

Developer:      Unknown
Version:        Unknown
Hardware:       Unknown
Languages:      Unknown
Formatter:      Unknown
Availability:   Anonymous ftp from:
                  LPA:/reduce
Readme:         Unknown
Description:    Web generator in AWK.
Support:        Unknown


- ----------------------------------------------------------------------

- SchemeWEB
-----------

Developer:      John D. Ramsdell
Version:        2.1
Hardware:       Unix and DOS platforms
Languages:      Any dialect of Lisp.
Formatter:      LaTeX.
Availability:   The Unix version is in the Scheme Repository and it is
                available via anonymous ftp from:
                  cs.indiana.edu:/pub/scheme-repository/utl/schemeweb.sh
                  LPA:/lisp
                  CTAN:/tex-archive/web/schemeweb
                The DOS version is part of the PCS/Geneva Scheme system
                which is available via anonymous ftp from:
                  cui.unige.ch:/pub/pcs
                  LPA:/machines/ms-dos
Readme:         In bundle with above.

Description:

  SchemeWEB is a Unix filter that allows you to generate both Lisp and
  LaTeX code from one source file.  The generated LaTeX code formats
  Lisp programs in typewriter font obeying the spacing in the source
  file. Comments can include arbitrary LaTeX commands.  SchemeWEB was
  originally developed for the Scheme dialect of Lisp, but it can easily
  be used with most other dialects.

Support:        Bug reports to ramsdell@mitre.org.


- ----------------------------------------------------------------------

- SpideryWEB
------------

Developer:      Norman Ramsey <norman@bellcore.com>
Version:        Unknown
Hardware:       Unix and DOS platforms
Languages:      Most Algol-like languages, including C, Ada, Pascal,
                Awk, and many others.
Formatter:      Plain TeX and latex for text formatters.
Availability:   Anonymous ftp from:
                CTAN
                LPA:/spiderweb
Readme:         In distribution.

Description:

  A system for building language-dependent WEBs. Spider is frozen; no
  further development is planned.

Support:        Bug reports to spider-bugs@oracorp.com.


- ----------------------------------------------------------------------

- WEB
-----

Developer:      Donald Knuth
Version:        Unknown
Hardware:       Unknown
Languages:      Pascal
Formatter:      TeX (of course! ;-)
Availability:   Anonymous ftp from:
                  LPA:/pascal
Readme:         Unknown

Description:

This is the original software that started it all.  The original TeX
processor was written in WEB.

Support:        None known.


- ----------------------------------------------------------------------

- WinWordWEB
------------

Developer:      Lee Wittenberg <leew@pilot.njin.net>
Version:        Unknown
Hardware:       Needs Microsoft Word for Windows, v.2.x, and, of course,
                MS-Windows 3.x.
Languages:      Any programming language.
Formatter:      Word for Windows 2.x for text formatting and file
                maintenance.
Availability:   Anonymous ftp from:
                  bart.kean.edu:pub/leew
                  LPA:/machines/ms-dos
                World-Wide Web (WWW)
Readme:         WORDWEB.DOC in the downloadable package describes the
                system.

Description:

  WinWordWEB is a set of a Word for Windows macros (plus a paragraph
  style) that provide a crude literate programming environment.  The
  ``look and feel'' of the system is based on Norman Ramsey's noweb, but
  can easily be modified to suit individual tastes.

Support:

  None.  WinWordWEB was written as a prototype to see if a WYSIWYG
  literate programming system was possible.  It is intended as a jumping
  off point for future work by others. However, the system is
  surprisingly usable as it stands, and the author is interested in
  hearing from users (satisfied and dissatisfied).

  Anyone interested in actively supporting (and improving) the product
  should contact the author via email.


= ======================================================================

* Are there other tools I should know about?
--------------------------------------------

First of all, I'll list some not-quite-literate-programming tools.
Some may consider these to be pretty-printers.  Others may call them
literate programming tools.  In any event, they don't seem to be quite
in the same category as the tools listed above, so I'll include them
here.

- C2LaTeX
---------

Developer:      John D. Ramsdell
Version:        Unknown
Hardware:       Unix
Languages:      C
Formatter:      LaTeX but it's easy to change the formatter.
Availability:   Anonymous ftp from
                  omnigate.clarkson.edu:/pub/tex/tex-programs/c2latex.
Readme:         Absent.  Documentation is in the C source for c2latex.

Description:

  C2latex provides simple support for literate programming in C.  Given
  a C source file in which the comments have been written in LaTeX,
  c2latex converts the C source file into a LaTeX source file.  It can
  be used to produce typeset listings of C programs and/or documentation
  associated with the program.

  C2latex produces LaTeX source by implementing a small number of rules.
  A C comment that starts at the beginning of a line is copied
  unmodified into the LaTeX source file.  Otherwise, non-blank lines are
  surrounded by a pair of formatting commands (\begin{flushleft} and
  \end{flushleft}), and the lines are separated by \\*. Each non-blank
  line is formatted using LaTeX's \verb command, except comments within
  the line are formatted in an \mbox.

Support:        Send bug reports to ramsdell@mitre.org.


- ----------------------------------------------------------------------

- c2cweb
--------

Developer:      Werner Lemberg
Version:        1.4
Hardware:       DOS, OS/2, Unix (gcc) - CWEB source included
Languages:      C, C++
Formatter:      TeX
Availability:   Anonymous ftp from
                  CTAN:/web/c_cpp/c2cweb
Readme:         In distribution.

Description:

  c2cweb will transform plain C or C++ code into a CWEB file to get a
  pretty formatted output. A modified CWEAVE (which transforms the CWEB
  file into a TeX file, see below) is included also.


Support:        Werner Lemberg <a7621gac@awiuni11.bitnet>




- ----------------------------------------------------------------------

- c2man
-------

language:       C, nroff, texinfo, latex, html
package:        c2man
version:        2.0 patchlevel 33
parts:          documentation generator (C -> nroff -man, -> texinfo, ->latex,
                -> html)
author:         Graham Stoney <greyham@research.canon.oz.au>
location:       ftp from any comp.sources.misc archive, in volume42
                (the version in the comp.sources.reviewed archive is obsolete)
                ftp /pub/Unix/Util/c2man-2.0.*.tar.gz from dnpap.et.tudelft.nl
    Australia:  ftp /usenet/comp.sources.misc/volume42/c2man-2.0/*
                from archie.au
    N.America:  ftp /usenet/comp.sources.misc/volume42/c2man-2.0/*
                from ftp.wustl.edu
    Europe:     ftp /News/comp.sources.misc/volume42/c2man-2.0/*
                from ftp.irisa.fr
    Japan:      ftp /pub/NetNews/comp.sources.misc/volume42/c2man-2.0/*
                from ftp.iij.ad.jp
    Patches:    ftp pub/netnews/sources.bugs/volume93/sep/c2man* from lth.se
description:    c2man is an automatic documentation tool that extracts comments
                from C source code to generate functional interface
                documentation in the same format as sections 2 & 3 of the Unix
                Programmer's Manual. It requires minimal effort from the
                programmer by looking for comments in the usual places near the
                objects they document, rather than imposing a rigid
                function-comment syntax or requiring that the programmer learn
                and use a typesetting language. Acceptable documentation can
                often be generated from existing code with no modifications.
conformance:    supports both K&R and ISO/ANSI C coding styles
features:       + generates output in nroff -man, TeXinfo, LaTeX or HTML
format
                + handles comments as part of the language grammar
                + automagically documents enum parameter & return values
                + handles C (/* */) and C++ (//) style comments
                - doesn't handle C++ grammar (yet)
requires:       yacc/byacc/bison, lex/flex, and nroff/groff/texinfo/LaTeX.
ports:          Unix, OS/2, MSDOS, VMS.
portability:    very high for unix, via Configure
status:         actively developed; contributions by users are encouraged.
discussion:     via a mailing list: send "subscribe c2man <Your Name>" (in the
                message body) to listserv@research.canon.oz.au
help:           from the author and other users on the mailing list:
                c2man@research.canon.oz.au
announcements:  patches appear first in comp.sources.bugs, and then in
                comp.sources.misc.
updated:        1994/10/07


- ----------------------------------------------------------------------

- cnoweb
--------

Developer:      Jim Fox
Version:        1.4 (January 4, 1991)
Hardware:       Anything with C and TeX.
Languages:      C
Formatter:      Plain TeX.
Availability:   Anonymous ftp from:
                  CTAN
                  LPA:/c.c++
Readme:         Unknown, cnoweb.tex contains documentation.

Description:

  cnoweb is as it's name describes: write C, not web.  No tangling or
  weaving is implemented.  Documentation (between standard /* */
  delimiteres) is written in TeX.  cnoweb provides typesetting of
  documentation, an table of contents of routines, and pretty-printing
  of C source.

Support:        None known.


- ----------------------------------------------------------------------

- Fold2Web
----------

Developer:      Bernhard Lang <lang@tu-harburg.d400.de>
Version:        V0.8
Hardware:       MSDOS
Languages:      All (must allow comment lines)
Formatter:      LaTeX
Availability:   Anonymous ftp from: 
                  kirk.ti1.tu-harburg.de (134.28.41.50)
                    /pub/fold2web/readme
                    /pub/fold2web/fold2web.zip
Readme:         In distribution

Description:

  The idea behind the Fold2Web tool is the following: A programmer can
  write his program source with a folding editor and later map the
  folded source files automatically to WEB-files. The generated WEB-files
  can then be modified by inserting required documentations.
  
  The advantage by starting program developement with original sources is
  to get short design cycles during the compile/debug steps. By using a
  folding editor the global structuring information can be already
  captured in folds during this developement phase. Fold information is
  typically stored in comment lines and thus will not affect the
  efficiency of the compile/debug design cycle.
  
  Some folding editors and a folding mode for the emacs are available
  (e.g. see our FUE folding editor for MSDOS machines which is a modified
  micro emacs. Pick it at kirk in directory /pub/fold2web).
  
  After reaching a stable version of a program source its time to convert
  the source file to a WEB-file and do the program documentation.
  Fold2Web is written to convert folded source text of any programming
  language to nuweb files. The folded structure is kept by mapping folds
  to scraps. Fold markers which differ between languages due to different 
  ways of specifying comments can be configured for each language.
  
  Good results can also achived when given but poor documented program
  sources have to be modified. Such sources can be folded using a folding
  editor to extract the global structures. This offers a global view to
  the program structures and help to understand its functionality.
  Furthermore the program code is not affected, only comment lines are
  inserted. Once folded the program source can be automatically
  translated to a WEB document using the above tool.

Support:   email to lang@tu-harburg.d400.de


- ----------------------------------------------------------------------

- Funnelweb Mode
----------------

Developer:      Daniel Simmons <simmdan@kenya.isu.edu>
Version:        Unknown
Availability:   Litprog archives (was in email)
                Anonymous ftp from:
                  ftp.imada.ou.dk

Description:

The other day I did a quick hack to nuweb.el as included with the nuweb
distribution so as to make a funnelweb-mode.el.  I've only used it
briefly, and I'm sure that it can be improved quite a bit.  I've been
thinking about adding support for folding on sections, a pull-down menu
to select macro definitions (like the recent functions posted to
gnu.emacs.sources for a C function definition pull-down menu) and some
kind of tags support for funnelweb.

Support:        Unknown


- ----------------------------------------------------------------------

- noweb.el
----------

Developer:      Bruce Stephens <bruce@liverpool.ac.uk>
Version:        Unknown.
Availability:   LitProg archives (in an email message).

Description:

This is a very simple mode I just hacked up.  There's a lot wrong with
it, but I thought others may be interested, even as it stands.  It
*requires* text properties, and assumes those used in GNU Emacs 19.22;
it'll quite likely work with Lucid Emacs, but I haven't tried it.

I use it with auctex8.1 and cc-mode 3.229, both of which are loaded
separately (I think my emacs is dumped with them, in fact).

The idea is to have one mode (which calls itself c-mode, but actually
has LaTeX-mode keybindings) generally (this means that the code is
hilighted nicely), and have the code chunks use a different keymap.


Support:        Email to bruce@liverpool.ac.uk


- ----------------------------------------------------------------------

- nuweb.el
----------

Developer:      Dominique de Waleffe <ddw@acm.org>
Version:        1.99
Availability:   Anonymous ftp from:
                  LPA
                  CTAN

Description:

  Provides a major mode extending Auctex for editing nuweb files. Main
  features (in 2.0):
   	- Edit scrap bodies in a separate buffer in a different mode
      (selected using emacs defaults for files, specific indication
      -*-mode-*-, or a buffer-local variable)
	  - Extends Auctex commands so that nuweb is called before LaTeX,
	  - Easy navigation on scrap definition and use points.
	  - Now creates an imenu (C-M-mouse1) with user index entries, macro
      definition positions and file definition positions.

Support:        Email to ddw@acm.org

- ----------------------------------------------------------------------

- TIE
-----

Developer:      Unknown
Version:        Unknown
Hardware:       Unknown
Availability:   Anonymous ftp from:
                  LPA:/Tools
Readme:         Unknown

Description:

This software merges change files.

Support:        Unknown


- ----------------------------------------------------------------------

- Web mode
----------

Developer:        Bart Childs <bart@cs.tamu.edu>
Version:          Unknown
Tools supported:  web, fweb, cweb, funnelweb
Availability:     Anonymous ftp from
                    ftp.cs.tamu.edu:pub/tex-web/web/EMACS.web-mode
                    thrain.anu.edu.au:pub/web/EMACS.web-mode

Description:

This version works with versions 18 and 19 of Emacs to be best of my
knowledge.  I have cleaned up a number of documentation items ...
In the same directory is wm_refcard.tex which is an edited version of
the famous one to include some web-mode commands.

The files limbo* are related to its use and notice that half them
have an uppercase L in them for LaTeX.  The setup is based upon the
fact that we (I am not alone here) primarily use FWEB for C and Fortran
programming.

We are using version 1.40 of FWEB although John Krommes warns that it
is not mature and the manual is not yet updated.  The info files are!
We are using LaTeX almost exclusively.  That will likely change and we
will revert to version 1.30 if the final form of 1.40 cannot return
to the simple section numbers and avoid the HORRIBLE LATEX 0.1.7.2.4.6
type section numbers.


Support:        Unknown



= ======================================================================

* What other resources are available?
-------------------------------------

- World Wide Web
----------------

An untapped resource (by me anyway ;-) is the World Wide Web.  Marcus
Speh has expended considerable effort in this regard.  If you're
connected to WWW, then access:

  http://info.desy.de:80/user/projects/LitProg.html

If you aren't connected to WWW, telnet to info.cern.ch and explore.
You can reach Marcus' literate programming pages by typing:

  go http://info.desy.de:80/user/projects/LitProg.html

or use a WWW browser and access the URL

  ftp://rtfm.mit.edu/pub/usenet/news-answers/www/resources/literate-programming

Help for people who have only Email and neither WWW nor telnet, can be
obtained by Email from TEST-LIST@INFO.CERN.CH by sending a message,
  SEND <http_address>,
for example,
  SEND http://info.desy.de:80/user/projects/LitProg.html
to retrieve the LitProg library page.   A help file can be retrieved by
sending a message to the list server above with the text
  HELP
in the body of the message.  Instructions will be returned by email. For
literate programming documents, you can try anonymous ftp to
rtfm.mit.edu and retrieve the official Usenet resource file

  /pub/usenet/news.answers/www/resources/literate-programming


- ----------------------------------------------------------------------

- TeX Resources
---------------

Another resource of interest to literate programmers is the info-tex
mailing list.  If you're using (La)TeX as your typsetting system and
have access to internet, then you should investigate this mailing list.
Mail list service is available through the SHSU list-server.  To
subscribe, send a message to LISTSERV@SHSU.EDU, and include in the
message one line of text:

    SUBSCRIBE INFO-TEX "your name in quotes"

The list is unmoderated; messages sent to info-tex@shsu.edu are
automatically distributed to all subscribers and cross-posted to
comp.text.tex.

Archives of the mailing list and newsgroup are maintained on
niord.shsu.edu [192.92.115.8] in the directory info-tex.

Another reason the TeX resources should be important is that so many of
the literate programming tools rely on either plain TeX or LaTeX as
their text formatter.  (La)TeX software systems exist for most computing
platforms.  These systems can be found on CTAN and other major archive
sites.  Use archie to find them or simply ftp to one of the CTAN
sites and browse.


- ----------------------------------------------------------------------

- Virtual Coursework
--------------------

Marcus Speh plans an introductory course on Literate Programming on the
Internet, part of the first semester of "Global Network Academy" [GNA],
a non-profit corporation incorporated in the state of Texas, affilated
with the Usenet University project. The texts/sample programs for this
class will be made available via the World-Wide Web. A special room on GNA
Virtual Campus will be staffed by a consultant in one to two hour
shifts.  Students with questions can telnet to the virtual campus and
ask questions of the staff there.  If you are interested in
registering for the course either as a student or as a consultant,
please contact marcus@x4u.desy.de. You will receive a standard reply
message; no further action will be taken until June 94.  Interested
parties can check the hypertext notes for the completed C++ Course done in
a similar fashion, at URL http://info.desy.de:80/pub/uu-gna/html/cc/index.html

[Editor's note: Because of workload, Marcus requests that email
inquiries be limited to a statement of interest for either a student or
consultant position until June 1994.]


= ======================================================================

* Are there any code examples?
------------------------------

Examples of web programs are included with the FWEB, CWEB, and noweb
distributions.  nuweb is written in itself.

Cameron Smith converted the K&R calculator program into a literate
program.   It can be retrieved by anonymous ftp from:
  niord.shsu.edu [192.92.115.8] directory kr-cweb-sample as
    krcwsamp.zip
  or from
    LPA/Documentation

Ross Williams has released a funnelweb example.  You can retrieve this
file from node ftp.adelaide.edu.au [129.127.40.3] as
  /pub/funnelweb/examples/except.*
This file should be on CTAN as well.

Lee Wittenberg has posted a few litprog examples.  They are available
via anonymous ftp from:
  bart.kean.edu:/pub/leew/samples.LP

The Stanford GraphBase is a large collection of programs by Don Knuth for
doing all kinds of computations and games with graphs; it is written in
(Levy/Knuth) CWEB. More details in the distribution.  It is available
via anonymous ftp from:
  labrea.stanford.edu:/pub/sgb


= ======================================================================

* Bibliographies
----------------

Nelson Beebe has collected an extensive bibliography treating literate
programming.  His work is available for anonymous ftp from
ftp.math.utah.edu [128.110.198.2] in directory /pub/tex/bib as files:
    litprog.bib
    litprog.ltx
    litprog.twx.
Although I have not verified this, LPA is an alternate source for these
files.  Note that they are updated frequently (Nelson says several times
each week), so be sure to get a fresh copy before extensive use.
Joachim Schrod indicates that these files may be updated daily and can
be retrieved via anonymous ftp at LPA/documentation.


= ======================================================================

* How to anonymously ftp
------------------------

Pretty much everything mentioned here is available by anonymous FTP.
FAQ lists cross-posted to news.answers and rec.answers can be gotten
from rtfm.mit.edu [18.181.0.24], under /pub/usenet/news.answers or under
/pub/usenet/more.specific.group.name

"anonymous FTP" is just a way for files to be stored where anyone
can retrieve them over the Net.    For example, to retrieve the
latest version of the literate programming FAQ, do the following:

> ftp rtfm.mit.edu              /* connect to the site; message follows */
> anonymous                     /* type this when it asks for your name */
> <your email address>          /* type your address as the password    */
> cd /pub/usenet                /* go to the directory you want to be   */
> cd comp.programming.literate  /* one level down (no slash).           */
> dir                           /* look at what's there                 */
> get literate-progamming-faq   /* get the file; case-sensitive         */
> quit                          /* stop this mysterious thing           */

If your FTP program complains that it doesn't know where the site you
want to use is, type the numerical address instead of the sitename:

> ftp 18.181.0.24               /* connect with numerical address */

If you don't have ftp access, send e-mail to mail-server@rtfm.mit.edu
with the single word "help" in the body of the message.

Getting binary files (executables, or any compressed files) is only
slightly more difficult.   You need to set binary mode inside FTP before
you transfer the file.

> binary            /* set binary transfer mode  */
> ascii             /* set back to text transfer mode */

FAQs and spoiler lists are generally ascii files; everything else is
generally binary files.

Some common extensions on binary files in archive sites are:

  .Z           Compressed; extract with uncompress
  .tar.Z       Compressed 'tape archive'; uncompress then untar or tar -xvf
  .gz or .z    Gnu gzip; use gunzip (available from prep.gnu.ai.mit.edu)
  .sit         (Mac) StufIt archive
  .zip         Extract with Zip or Unzip
  .zoo         Yet another archive/compress program
  .lhe         (Amiga) ?
  .lzh         Lha archive program.
  .arj         (PC) Arj archive program.
  .exe         (PC) Sometimes self-extracting archives-just execute them.
  .uue or .UUE Transfer as text file; use uudecode to convert to binary
  .hqx         (Mac) BinHex format; transfer in text mode

Generic help can be found in the FAQs of comp.binaries.<your_system_type>
for how to transfer, extract, and virus-check binary files.  (At
rtfm.mit.edu)

If you can't FTP from your site, use one of the following ftp-by-mail
servers:

  ftpmail@decwrl.dec.com
  ftpmail@src.doc.ic.ac.uk
  ftpmail@cs.uow.edu.au
  ftpmail@grasp.insa-lyon.fr

For complete instructions, send a message reading "help" to the server.

If you don't know exactly what you're looking for, or exactly where it
is, there are programs and servers that can help you.  For more info,
send e-mail to mail-server@rtfm.mit.with with the body of the
message reading send usenet/news.answers/finding-sources


Thanks to Aliza R. Panitz (the "buglady") for this text.  I copied it
verbatim from her post on faq-maintainers with only minor modifications.


= ======================================================================

* Acknowledgements
------------------

This document would not have happened without the help of many people.
Among them are Marcus Speh, George Greenwade, Rob Beezer, Joachim
Schrod, Piet van Oostrum, and Ross N. Williams.  A special thanks to
Aliza R. Panitz for the text describing how to execute an anonymous ftp
for files of interest.

Any omissions from these acknowledgements should be considered an act of
stupidity on my part.  Of course, the authors of literate programming
tools mentioned above all play a vital role in the vitality of literate
programming. Furthermore, participants in the comp.programming.literate
newsgroup (and associated mailing list) all contributed in various
fashions.  Thank all of you.


= ======================================================================

* End notes
-----------

This document will continue to evolve.  I'm planning on adding entries
for additional literate programming tools and will expand the sections
on examples as more examples become available. Tools I will include are
WEB (the original pascal version) for starters. Others will be added as
I find and document them.  Omission of a particular tool should not be
considered a snub in any sense--simply an error or oversight on my part.

= End of File ==========================================================
================================================================================
Archive-Date: Sun, 23 Jul 1995 05:28:19 CDT
Sender: owner-litprog@SHSU.edu
From: kakima@ix.netcom.com (Kiyoshi Akima)
Reply-To: LitProg@SHSU.edu, kakima@IX.NETCOM.COM
Subject: Indexing
Date: 23 Jul 1995 03:27:05 GMT
Message-ID: <3usfi9$aik@ixnews2.ix.netcom.com>
To: LitProg@SHSU.EDU

Does anybody know how to insert entries into the Index _without_
getting section numbers in WEB or CWEB?  I want to have something like

  error messages
   bad argument  7
   can't open input file  11
   out of memory  10

I can get something like

  error messages  7, 10, 11
   bad argument  7
   can't open input file  11
   out of memory  10

but I'd like to skip the section numbers on the first line.

Thanks in advance,
Kiyoshi Akima
kakima@ix.netcom.com
================================================================================
Archive-Date: Mon, 24 Jul 1995 04:52:24 CDT
Sender: owner-litprog@SHSU.edu
From: heck@irt1.rt.e-technik.th-darmstadt.de (Oliver Hecker)
Reply-To: LitProg@SHSU.edu, heck@IRT1.RT.E-TECHNIK.TH-DARMSTADT.DE
Subject: label multiply defined error (from TEX) with NOWEB
Date: Mon, 24 Jul 1995 11:26:46
Message-ID: <heck.8.000B728B@irt1.rt.e-technik.th-darmstadt.de>
To: LitProg@SHSU.EDU

I am trying to process multiple *.nw files independently of each
other with noweb, only merging the *.tex files for the final
documentation. (using noindex and nodefs to produce cross references)

It now seems that noweb uses the same labels (for TEX references) in
different files. (The file names and classes/functions defined in these
files are named quite similar).

What am I doing wrong? Is there any workaround or do I have to change
the naming of my classes/functions (what I don't want to do) ?

BTW: I am using the noweb system on a dos machine.

Thank you

Oliver

(heck@irt1.rt.e-technik.th-darmstadt.de)
================================================================================
Archive-Date: Mon, 24 Jul 1995 07:02:58 CDT
Sender: owner-litprog@SHSU.edu
From: Jacob Nielsen <jacob@dannug.dk>
Reply-To: LitProg@SHSU.edu, jacob@DANNUG.DK
Subject: Re: LP for MS Windows programming
Date: Sun, 23 Jul 1995 19:15:08 GMT
Message-ID: <950723211508.204AAE+E.jacob@jnext>
MIME-Version: 1.0 (Generated by Eloquent)
Content-Type: text/plain; charset=US-ASCII
Keywords: Windows, application generators, literate programming
To: LitProg@SHSU.EDU

On 20 Jul 1995 00:42:59 GMT, furlos@alum01.its.rpi.edu (Steve Furlong)
wrote:

> 1. For the most part, Windows programs require a handful of source
> files even for "hello world".  These include the .c and .h files,
> plus .def, .rc and often others.  What is the best way to keep all
> of these files in a literate system?  Have .w files for the .c and
> .h and let the (usually smaller) files just reside as themselves,
> or have .w files for every source file, even if the source file is
> only five lines long?

Having a web file for each of the smaller files is not smart.
IMHO, making a one to one maping of files are a bad thing, especially
when those files are small. Making a one to many maping (one web file,
multible output) is much better, especially when the output depends on
each other (e.g. foo.c and foo.h usually depends on each other)

The tools nuweb and noweb both support the one to many mapping and I'm
sure many others does as well.

> 2. Many Windows programs these days are created with application
> environments, app wizards, and so on.  Examples include the
> Microsoft, Borland, and Symantec C++ development environments, Visual
> Basic, and Delphi.  Source code is (or can be) ASCII text, which
> could be post-processed into a literate file, _except_ that the
> various environments usually want to read the source files time
> and again, and wouldn't be able to handle the strange files.

[begin Disclaimer]

I've never used any of those application enviroments that spits out code
you have to edit---reading Steve's article, I'm glad mine just spits out
objects.

[end Disclaimer]

Giving the problems integrating literate programming and application
enviroments under Windows, I guess the only way is to seperate the GUI
and the program. This should enable you to write the computation part
using literate programming and struggle with the GUI using two interlinked
documents or just verbose commenting.

Ah well, lets hope Borland sees the light soon...

    Jacob
--
Jacob Nielsen
jacob@dannug.dk

The excellency of every art is its intensity, capable of making
all disagreeables evaporate, from their being in close relationship
with beauty and truth.
	JOHN KEATS
================================================================================
Archive-Date: Mon, 24 Jul 1995 10:50:25 CDT
Sender: owner-litprog@SHSU.edu
From: inglehar@eecs.uic.edu (Kim James)
Reply-To: LitProg@SHSU.edu, inglehar@EECS.UIC.EDU
Subject: Cycle enumeration
Date: 24 Jul 1995 15:42:16 GMT
Message-ID: <3v0f0o$7hg@news.eecs.uic.edu>
To: LitProg@SHSU.EDU

I need to obtain all the negative-weight simple cycles in a digraph,
and I'm
planning to use an algorithm that finds ALL the simple cycles first.

A basic brute-force algorithm, which considers every cycle only once,
is that
of Roberts and Flores (Comm. ACM 9(9) 1966, 690-694) as systematized by
Tiernan (Comm. ACM 13(12) 1970, 722-726).  (Described in Deo's "Graph
Theory," 1974, 287-291.)

Weinblatt (J. ACM 19(1) 1972, 43-56) came up with a far more efficient 
algorithm (timewise, but it hogs space) which minimizes the number of
arc
examinations.

Does anybody know if any newer, more efficient algorithms have been 
published?

Does anybody know the complexity of the two algorithms mentioned above?

Please e-mail responses directly to me.

Thank you,

James Inglehart                          inglehar@eecs.uic.edu
                                        
http://www.eecs.uic.edu/~jingleha
Artificial Intelligence Laboratory
Department of Electrical Engineering and Computer Science
University of Illinois at Chicago

================================================================================
Archive-Date: Mon, 24 Jul 1995 18:12:23 CDT
Sender: owner-litprog@SHSU.edu
From: nr@cs.purdue.edu (Norman Ramsey)
Reply-To: LitProg@SHSU.edu, nr@CS.PURDUE.EDU
Subject: Re: label multiply defined error (from TEX) with NOWEB
Date: 24 Jul 1995 17:53:00 -0500
Message-ID: <3v188c$64c@labrador.cs.purdue.edu>
CC: 
To: LitProg@SHSU.EDU

In article <heck.8.000B728B@irt1.rt.e-technik.th-darmstadt.de>,
Oliver Hecker <heck@irt1.rt.e-technik.th-darmstadt.de> wrote:
>I am trying to process multiple *.nw files independently of each
>other with noweb, only merging the *.tex files for the final
>documentation. (using noindex and nodefs to produce cross references)
>
>It now seems that noweb uses the same labels (for TEX references) in
>different files. (The file names and classes/functions defined in these
>files are named quite similar).

noweb uses the heuristic made famous by FORTH: names are reduced to
the first three characters plus the length.  Changing your file names
should be sufficient.  If you don't like that you could use -filter
with a sed script that adds a unique prefix to all the relevant labels
(see the Hacker's Guide for info about where labels appear).  Myself,
I would change the file names :-)

Norman

-- 
        ``They who can give up essential liberty to obtain a little temporary
          safety deserve neither liberty nor safety.'' --- B. Franklin
Norman Ramsey                 I support the Phil Zimmermann Legal Defense Fund.
norman@bellcore.com          (zldf@clark.net  http://www.netresponse.com/zldf)
================================================================================
Archive-Date: Mon, 24 Jul 1995 20:05:30 CDT
Sender: owner-litprog@SHSU.edu
From: Paolo Ciccone <pciccone@borland.com>
Reply-To: LitProg@SHSU.edu, pciccone@BORLAND.COM
Subject: Re: LP for MS Windows programming
Date: 25 Jul 1995 00:26:39 GMT
Message-ID: <3v1do0$10i@druid.borland.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
To: LitProg@SHSU.EDU

Jacob Nielsen <jacob@dannug.dk> wrote:
>
>Ah well, lets hope Borland sees the light soon...

Well, I'm listening but I'm not the person that will set the decisions for
BC++ or Delphi. I just finished porting FWEB to OS/2 (same executable run
under DOS) and the whole LP stuff is very interesting, I'm experimenting
with a internal tool, converting gradually the code from pure C++ to Web.
Personally i think that it's not very difficult to integrate LP in the BC++
IDE but the automatic generated code is another story.
Borland constantly reads the newsgroups for C++ and I know that recently
other groups have been opened for Delphi. I suggest to post there to make
the right people aware of your needs.


                                         Paolo


---
These are my opinions and have nothing to do with my employer.

TeamOS/2 Santa Cruz, CA


================================================================================
Archive-Date: Tue, 25 Jul 1995 11:01:31 CDT
Sender: owner-litprog@SHSU.edu
From: kumpf@igd.fhg.de (Christian Kumpf smurf)
Reply-To: LitProg@SHSU.edu, kumpf@IGD.FHG.DE
Subject: Re: Your wishlist wanted: Inclusion of CWEB in LaTeX documents
Date: 25 Jul 1995 14:14:26 GMT
Message-ID: <KUMPF.95Jul25161426@lychee.igd.fhg.de>
To: LitProg@SHSU.EDU

In article <3u33jt$el0@rs18.hrz.th-darmstadt.de> schrod@iti.informatik.th-darmstadt.de (Joachim Schrod) writes:

   DOCUMENT INCLUSION
   ==================
...
   First problem:

    -- What do you expect happens to the packages & local macro defs
       used in b23_tree.w? What would you like to happen? What would you
       expect (realistically, taking into account CWEB&TeX restrictions) to
       happen?

I think, your package should ignore (i.e. blow away) stuff before
\begin{document} during inclusion. The included document shouldn't
influence the layout of the outer document in any fashion. This
implies that functional packages (e.g. amstex, vref, etc.) needed from
the included document have to be loaded from the main document too.


   Second problem:

    -- What shall happen to the stuff CWEAVE generates?

    -- Do you expect a table of contents to appear there?
No. One TOC is enough for the whole document.

    -- Do you expect the index to appear there?
    -- Do you expect the list of refinements to appear there?

Optionally, i.e.
       \cwebInclude[index,refinements]{b23_tree}
should print index and list of refinements.
Further possibilities should be offered by part inclusion (s.b.) 


   DOCUMENT PART INCLUSION
   =======================

   Let's assume again, we have the CWEB document from above. Let's assume
   we want to include the code for the insert operation in a book:

       ----------------------------------------
       \documentclass{article}
	   ...
       \begin{document}

	   [...]

       \cwebExtract{b23_tree}{5,6-20,23}

	   [...]
       ----------------------------------------

   That tag shall cause the extractions of chunks. (`sections' in
   DEK-speak, I avoid that term since it causes confusion with LaTeX
   sections.) Chunks numbered 5, 6 to 20, and 23 are extracted from the
   woven output and typeset at this point.

   First problem:

    -- Again, the packages & local macros of b23_tree.w: How to handle
       them here?

    -- I'm inclined to ignore them completely and demand from the author
       that he adds them to his or her overall document as well. (Maybe
       locally in a group.)

   Second problem:

    -- Is it acceptable that chunk numbers must be ordered (i.e.,
       strict monoton sequenced)?

This should be no problem, if multiple extractions from the same
document are possible (which I would like).

One more whish to the index and list of refinements:
I want to have the possibility to merge the indizes from different
cweb-sources and tag them with an optional argument at the extraction:

       \cwebExtract[b23]{b23_tree}{6}
       \cwebExtract[avl]{avl_tree}{3,7}
       \cwebExtract[b23]{b23_tree}{5}

	  ....

       \cwebIndex
       \cwebRefinements

should produce an index like:

Index

i  avl 3, b23 5,6
j  avl 3,7


and a list of refinements like

List of Refinements

<Insert a node after lchild   avl 3> This is used in section avl 11.
<Insert a node after lchild   b23 6> This is used in section b23 5.

This shows following problem: The LoR mentions section avl 11, which
isn't included in this document. I don't have an idea how to deal with
such cases.

I think I can volunteer for the merging support. (This may require
some auxiliary programs, i.e. makeindex and another filter)

	Christian
--
|------------------+---------------------------------------
|___   __          | Computer Graphics Center             |
|  /  |    |\  | | | Mobile Information Visualization     |
| /   | -  | | | | | Wilhelminenstr. 7, D-64283 Darmstadt |
|/__  |__| |/  \_/ | Christian Kumpf, kumpf@igd.fhg.de    |
|                  | www: http://www.igd.fhg.de/~kumpf/   |
|----------------------------------------------------------
================================================================================
Archive-Date: Tue, 25 Jul 1995 14:05:34 CDT
Sender: owner-litprog@SHSU.edu
From: robertj260@aol.com (RobertJ260)
Subject: Aptitude and Logic Tests:Any Info?
Date: 25 Jul 1995 12:46:59 -0400
Message-ID: <3v3763$i47@newsbf02.news.aol.com>
Reply-To: LitProg@SHSU.edu, robertj260@aol.com (RobertJ260)
To: LitProg@SHSU.EDU


        Programming Aptitude Tests

Some companies(such as Symitar in San Diego) administer programming and/or
logic tests as a pre-condition of employment. These tests typically test
applicants knowledge of concepts, such as BASE 2,4,8,10,16; they also test
applicants ability to pseudo-code logic loops, such as sort routines, and
handling linked lists. They also test people's ability to logically follow
several complex tests without getting lost. Can anyone tell me if there
exists
any test-related documents or resource areas anywhere on the WWW, 
FTP sites, Newsgroups,or anywhere on the Internet? I would appreciate any 
and all help, including addresses, hints, starting points, etc. Thanks
much.

robertj260@aol.com
================================================================================
Archive-Date: Tue, 25 Jul 1995 15:05:06 CDT
Sender: owner-litprog@SHSU.edu
Date: Tue, 25 Jul 1995 12:59:53 -0700 (PDT)
From: Keith Ballinger <keith@seq.oit.osshe.edu>
Reply-To: LitProg@SHSU.edu, keith@SEQ.OIT.OSSHE.EDU
Subject: Re: Aptitude and Logic Tests:Any Info?
To: LitProg@SHSU.edu, RobertJ260 <robertj260@aol.com>
Message-ID: <Pine.3.88.9507251253.A12479-0100000@seq.oit.osshe.edu>
MIME-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII


> logic tests as a pre-condition of employment. These tests typically test
> applicants knowledge of concepts, such as BASE 2,4,8,10,16; they also test
> applicants ability to pseudo-code logic loops, such as sort routines, and
> handling linked lists. They also test people's ability to logically follow
> several complex tests without getting lost. Can anyone tell me if there
> exists
> robertj260@aol.com
> 
This isn't about lit. prog. but I will answer you anyway. I am not sure 
what is on the net, but Donald Knuth write a series of books called "The 
Art of Computer Programming" that deal with alot of this. Particularily 
the first book one would find helpful in learning the fundementals of 
computer logic: mathematics, reasoning, etc.
Keith

================================================================================
Archive-Date: Wed, 26 Jul 1995 09:30:16 CDT
Sender: owner-litprog@SHSU.edu
From: Karl Wolf <wolfkw@ecsuc.ctstateu.edu>
Reply-To: LitProg@SHSU.edu, wolfkw@ECSUC.CTSTATEU.EDU
Subject: Scripting Netscape with applescript
Date: 26 Jul 1995 14:25:55 GMT
Message-ID: <3v5j9j$cj3@babyblue.cs.yale.edu>
To: LitProg@SHSU.EDU

I am using netscape with "at ease". I want to set up a script which when
netscape quits,will delete all files that it creates on the desktop. Such
as quicktime movies.
================================================================================
Archive-Date: Wed, 26 Jul 1995 09:30:39 CDT
Sender: owner-litprog@SHSU.edu
From: Karl Wolf <wolfkw@ecsuc.ctstateu.edu>
Reply-To: LitProg@SHSU.edu, wolfkw@ECSUC.CTSTATEU.EDU
Subject: Scripting Netscape with applescript
Date: 26 Jul 1995 14:26:15 GMT
Message-ID: <3v5ja7$cki@babyblue.cs.yale.edu>
To: LitProg@SHSU.EDU

I am using netscape with "at ease". I want to set up a script which when
netscape quits,will delete all files that it creates on the desktop. Such
as quicktime movies.
================================================================================
Archive-Date: Thu, 27 Jul 1995 09:22:03 CDT
Sender: owner-litprog@SHSU.edu
Date: Thu, 27 Jul 95 10:22:11 EDT
From: Lee Wittenberg <leew@pilot.njin.net>
Reply-To: LitProg@SHSU.edu, leew@PILOT.NJIN.NET
To: litprog@shsu.edu
Subject: LP paper for SIGCSE conference
Message-ID: <CMM-RU.1.4.806854931.leew@pilot.njin.net>

Fellow LP'ers:

I'm going to submit an LP-related paper to this year's SIGCSE
(Computer Science Education) conference, and I figured that, before I
throw myself to the wolves (pronounced "referees" :-), I would solicit
comments and criticism from the subscribers of this list (presumably a
more friendly group).

If anyone would like to take a look at the paper, currently titled
"Using Literate Programming Notation in Introductory Programming
Courses", I've made a copy available via anonymous ftp at
bart.kean.edu in the file pub/leew/sigcse/litprog-notation.ps (a copy
in dvi format is also available for those who prefer it).

If you do take a look at the paper, please send your comments directly
to me (leew@pilot.njin.net), rather than posting them to the list (I
don't think I could bear the public humiliation :-).  The paper has to
be received by the program chair by 31 August, so please make sure you
get your comments back to me before 15 August (to give me time to make
the necessary revisions).

Thanks in advance.

		-- Lee

------------------------------------------------------------------------
Lee Wittenberg              | If, indeed, we could not afford to educate
Computer Science Department | everybody, we should choose the coarsest
Kean College of New Jersey  | and dullest by nature, rather than the 
Union, NJ   07083           | brightest, to receive what education we
                            | could give.  The naturally refined and
                            | intellectual can better dispense with aids
                            | to culture than those less fortunate in
                            | natural endowments.
                            | 
                            | -- Edward Bellamy
leew@pilot.njin.net         |    "Looking Backward" (1888)
------------------------------------------------------------------------
================================================================================
Archive-Date: Mon, 31 Jul 1995 16:03:01 CDT
Sender: owner-litprog@SHSU.edu
From: akirk@gcrex.trt.allied.com ()
Subject: MS-DOS BATCH PROGRAMMING
Date: 31 Jul 1995 20:10:59 GMT
Message-ID: <3vjdcj$ps5@asbe05.phx1.aro.allied.com>
Reply-To: LitProg@SHSU.edu, akirk@gcrex.trt.allied.com ()
To: LitProg@SHSU.EDU


Hello,

    I have a question involving DOS BATCH programming.  I am writing a DOS BATCH
program which requires to know the number of files in a given directory.  The
BATCH file will always be invoked from within the directory which has the files
I need to count.  Does anyone know of a system level call that can be performed
from within a .BAT file while running to do this?  After the number of files is
returned, I then want to perform a loop using this variable as a counter.  The 
counter will always be 1 higher than needed since I do not need to include the
BAT file itself.


Please respond to "akirk@asboeing.trt.allied.com"

Thanks Andrew--
================================================================================
Archive-Date: Mon, 31 Jul 1995 17:37:39 CDT
Sender: owner-litprog@SHSU.edu
From: schrod@iti.informatik.th-darmstadt.de (Joachim Schrod)
Reply-To: LitProg@SHSU.edu, schrod@ITI.INFORMATIK.TH-DARMSTADT.DE
Subject: Contents of the LitProg Archive (monthly posting)
Date: 1 Aug 1995 00:20:09 +0200
Message-ID: <3vjkupINNf27@spice.iti.informatik.th-darmstadt.de>
To: LitProg@SHSU.EDU

# literate-programming/Contents			14 Jul 95  -*- Indented-Text -*-
#------------------------------------------------------------

The material available from the Literate Programming Archive is
categorized, each category is put in a directory tree. While this
structure (which is described in the README files) supports browsing,
the need for quick access to a specific Literate Programming tool
remains.

This file shall assist you in this need. It presents the *WEB systems
and tools available, in an alphabetic order, and names the directory
where you can find it.
    In addition to the systems mentioned below, the LitProg Archive
features texts in the directory Documentation: FAQs, papers, and an
extensive bibliography in BibTeX format.

Since this file is updated manually, I cannot guarantee that it's up
to date. Send reports about inconsistencies of description and reality
to Joachim Schrod <schrod@iti.informatik.th-darmstadt.de>.


SYSTEM		    DIRECTORY			REMARK
------		    ---------			------
APLWEB		    apl				w/o source, but under the GPL!
					[this was an error by the author]
AWEB		    ada/aweb			not supported any more
cfa		    Tools			Change File Analyzer
CLiP						any language, any formatter, any
 -- source	    independent			    wordprocessor. Hypertext
 -- for DOS	    machines/ms-dos		    integration possible
 -- for VMS	    machines/vms
CTWILL		    c.c++			CWEAVE w/ mini indexes [DEK]
						unfinished, alpha quality
CWEB (Levy/Knuth)				C++, ANSI C, K&R C
 -- source	    c.c++
 -- portable source c.c++			as cweb-*-p*
 -- Amiga port	    machines/amiga
 -- Atari TOS port  machines/atari-tos		an old version [2.4 p5b]
 -- DOS port	    machines/ms-dos
 -- Mac port	    machines/mac
 -- Mac CTANGLE	    machines/mac		Impact: CTANGLE & Apple-Events
cweb style	    c.c++			CWEB programs as LaTeX documents
CWEB mode	    Tools			minor mode for GNU Emacs
c2cweb		    c.c++			transform C/C++ code => CWEB
CWEBx (van Leeuwen) c.c++			CWEB for ANSI C, in ANSI C
CWEB (Schrod)	    <not available>		not supported any more;
						send mail if you have
						historic interests :-)
fmweb		    independent			for FrameMaker, needs Perl5
Funnelweb	    independent
FWEB						multi-lingual WEB
 -- source	    fweb
 -- DOS port	    machines/ms-dos
 -- MS-Windows port machines/ms-windows
Impact		    machines/mac		CTANGLE & Apple-Events
Knit		    pascal			not supported any more
lit2x		    independent			[????] from Glasgow
LPW		    machines/mac		Literate Programming Workshop
						CAVEAT: Shareware!
MapleWEB	    spiderweb
MWEB (Schrod/Detig) modula-2			not supported any more
MWEB (Sewell)	    modula-2			not supported any more
noweb		    				uses the UNIX toolbox paradigm
 -- source	    independent
 -- DOS port	    machines/ms-dos
noweb mode	    Tools			minor mode for GNU Emacs
nuweb		    				lean system, written in C
 -- source	    independent
 -- Amiga port	    machines/amiga
 -- DOS port	    machines/ms-dos
ProTex		    independent			WEB system based on TeX
RWEB		    spiderweb			for Reduce
smlweb		    spiderweb			for Standard ML
SpiderWEB					WEB generator, in awk
 -- source	    spiderweb
 -- DOS port	    machines/ms-dos
 -- OS/2 port	    machines/os2
 -- Mac port	    machines/mac
tango/weevil	    independent			YA simple system, in C
TIE		    Tools			Change File Merger
WEB		    				The basis, it started with it...
 -- source	    pascal
 -- DOS port	    machines/ms-dos
WEB mode	    Tools			for GNU Emacs
WinWordWEB	    machines/ms-dos		WEB with Word for Windows


Literate Documentation Systems
------------------------------

(or LitDoc systems for short): Tools that do not support refinements
but enable the use of usual document preparation systems (e.g., LaTeX)
in program comments.

cnoweb		    c.c++
doc package	    /pub/tex/latex		CAVEAT: No LitProg A directory!
						oriented towards TeX code;
						part of the LaTeX2e distrib.
MAKEPROG	    independent			is here for my own convenience
						:-)
SchemeWEB	    lisp
wbuild		    /pub/X11/other/fwf		CAVEAT: No LitProg A directory!
						creating new X widget classes

--

The Literate Programming Archive, or LitProg Archive for short,
resides at ftp.th-darmstadt.de [130.83.47.112], directory
pub/programming/literate-programming/.

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Joachim Schrod			Email: schrod@iti.informatik.th-darmstadt.de
Literate Programming Archive, maintainer
Technical University of Darmstadt, Germany
================================================================================
Archive-Date: Mon, 31 Jul 1995 17:37:43 CDT
Sender: owner-litprog@SHSU.edu
From: schrod@iti.informatik.th-darmstadt.de (Joachim Schrod)
Reply-To: LitProg@SHSU.edu, schrod@ITI.INFORMATIK.TH-DARMSTADT.DE
Subject: Diff to Contents of the LitProg Archive (monthly posting)
Date: 1 Aug 1995 00:20:21 +0200
Message-ID: <3vjkv5INNf29@spice.iti.informatik.th-darmstadt.de>
To: LitProg@SHSU.EDU

*** Contents	Sat Jul  1 00:20:15 1995
--- /common/ftp/pub/programming/literate-programming/Contents	Fri Jul 14 18:06:54 1995
***************
*** 1,3 ****
! # literate-programming/Contents			19 Jan 95  -*- Indented-Text -*-
  #------------------------------------------------------------
  
--- 1,3 ----
! # literate-programming/Contents			14 Jul 95  -*- Indented-Text -*-
  #------------------------------------------------------------
  
***************
*** 34,37 ****
--- 34,38 ----
  CWEB (Levy/Knuth)				C++, ANSI C, K&R C
   -- source	    c.c++
+  -- portable source c.c++			as cweb-*-p*
   -- Amiga port	    machines/amiga
   -- Atari TOS port  machines/atari-tos		an old version [2.4 p5b]
***************
*** 40,48 ****
   -- Mac CTANGLE	    machines/mac		Impact: CTANGLE & Apple-Events
  cweb style	    c.c++			CWEB programs as LaTeX documents
! CWEB mode	    Tools			for GNU Emacs
  CWEBx (van Leeuwen) c.c++			CWEB for ANSI C, in ANSI C
! CWEB (Schrod)	    <not available>		not supported any more
! 						send me mail if you have
  						historic interests :-)
  Funnelweb	    independent
  FWEB						multi-lingual WEB
--- 41,51 ----
   -- Mac CTANGLE	    machines/mac		Impact: CTANGLE & Apple-Events
  cweb style	    c.c++			CWEB programs as LaTeX documents
! CWEB mode	    Tools			minor mode for GNU Emacs
! c2cweb		    c.c++			transform C/C++ code => CWEB
  CWEBx (van Leeuwen) c.c++			CWEB for ANSI C, in ANSI C
! CWEB (Schrod)	    <not available>		not supported any more;
! 						send mail if you have
  						historic interests :-)
+ fmweb		    independent			for FrameMaker, needs Perl5
  Funnelweb	    independent
  FWEB						multi-lingual WEB
***************
*** 61,64 ****
--- 64,68 ----
   -- source	    independent
   -- DOS port	    machines/ms-dos
+ noweb mode	    Tools			minor mode for GNU Emacs
  nuweb		    				lean system, written in C
   -- source	    independent
***************
*** 73,76 ****
--- 77,81 ----
   -- OS/2 port	    machines/os2
   -- Mac port	    machines/mac
+ tango/weevil	    independent			YA simple system, in C
  TIE		    Tools			Change File Merger
  WEB		    				The basis, it started with it...

--

The Literate Programming Archive, or LitProg Archive for short,
resides at ftp.th-darmstadt.de [130.83.47.112], directory
pub/programming/literate-programming/.

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Joachim Schrod			Email: schrod@iti.informatik.th-darmstadt.de
Literate Programming Archive, maintainer
Technical University of Darmstadt, Germany
