Archive-Date: Sun, 02 Jul 1995 17:22:17 CDT Sender: owner-litprog@SHSU.edu From: "Carlos L. Camacho" Reply-To: LitProg@SHSU.edu, luisp@NETCOM.COM Subject: Looking for NEW WinWordWeb or Equivalent Content-Type: text/plain; charset=us-ascii Message-ID: 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" : >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" 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" 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: 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 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 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 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: 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 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 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 # 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 X X X X X X X X > # end of Color X X X X X X X X > # end of Color X X X X X X X X > # end of Color X X X X X X X X > # end of Color X X X X X X X X > # end of Color X X X X X X X X > # end of Color X X X X X X X X > # end of Color X X X X X X X X > # end of Color X> # end of ColorCatalog X X X X > # end of Condition X> # end of ConditionCatalog X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X > # end of PgfFont X X X X X X X X X X X X X X X X X X X X X > # end of Pgf X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X > # end of PgfFont X X X X X X X X X X X > # end of TabStop X X X X X X X X X X X X X X X X X > # end of Pgf X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X > # end of PgfFont X X X X X X X X X X X X X X X X X X X X X > # end of Pgf X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X > # end of PgfFont X X X X X X X X X X X X X X X X X X X X X > # end of Pgf X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X > # end of PgfFont X X X X :\\t'> X X X X X X X > # end of TabStop X X X X X X X X X X X X X X X X X > # end of Pgf X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X > # end of PgfFont X X X X X X X X > # end of TabStop X X X X > # end of TabStop X X X X X X X X X X X X X X X X X > # end of Pgf X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X > # end of PgfFont X X X X X X X X > # end of TabStop X X X X > # end of TabStop X X X X > # end of TabStop X X X X > # end of TabStop X X X X > # end of TabStop X X X X > # end of TabStop X X X X > # end of TabStop X X X X > # end of TabStop X X X X > # end of TabStop X X X X > # end of TabStop X X X X > # end of TabStop X X X X > # end of TabStop X X X X > # end of TabStop X X X X > # end of TabStop X X X X > # end of TabStop X X X X > # end of TabStop X X X X > # end of TabStop X X X X > # end of TabStop X X X X > # end of TabStop X X X X > # end of TabStop X X X X > # end of TabStop X X X X > # end of TabStop X X X X > # end of TabStop X X X X > # end of TabStop X X X X > # end of TabStop X X X X X X X X X X X X X X X X X > # end of Pgf X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X > # end of PgfFont X X X X :\\t'> X X X X X X X > # end of TabStop X X X X X X X X X X X X X X X X X > # end of Pgf X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X > # end of PgfFont X X X X X X X X X X X > # end of TabStop X X X X X X X X X X X X X X X X X > # end of Pgf X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X > # end of PgfFont X X X X X X X X > # end of TabStop X X X X X X X X X X X X X X X X X > # end of Pgf X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X > # end of PgfFont X X X X X X X X X X X X X X X X X X X X X > # end of Pgf X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X > # end of PgfFont X X X X X X X X X X X X X X X X X X X X X > # end of Pgf X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X > # end of PgfFont X X X X X X X X X X X X X X X X X X X X X > # end of Pgf X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X > # end of PgfFont X X X X X X X X > # end of TabStop X X X X X X X X X X X X X X X X X > # end of Pgf X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X > # end of PgfFont X X X X .\\t'> X X X X X X X > # end of TabStop X X X X X X X X X X X X X X X X X > # end of Pgf X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X > # end of PgfFont X X X X .\\t'> X X X X X X X > # end of TabStop X X X X X X X X X X X X X X X X X > # end of Pgf X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X > # end of PgfFont X X X X X X X X > # end of TabStop X X X X > # end of TabStop X X X X > # end of TabStop X X X X > # end of TabStop X X X X > # end of TabStop X X X X > # end of TabStop X X X X > # end of TabStop X X X X > # end of TabStop X X X X > # end of TabStop X X X X > # end of TabStop X X X X > # end of TabStop X X X X > # end of TabStop X X X X > # end of TabStop X X X X > # end of TabStop X X X X > # end of TabStop X X X X > # end of TabStop X X X X > # end of TabStop X X X X > # end of TabStop X X X X > # end of TabStop X X X X > # end of TabStop X X X X > # end of TabStop X X X X X X X X X X X X X X X X X > # end of Pgf X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X > # end of PgfFont X X X X .\\t'> X X X X X X X > # end of TabStop X X X X X X X X X X X X X X X X X > # end of Pgf X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X > # end of PgfFont X X X X X X X X > # end of TabStop X X X X > # end of TabStop X X X X > # end of TabStop X X X X > # end of TabStop X X X X > # end of TabStop X X X X > # end of TabStop X X X X > # end of TabStop X X X X > # end of TabStop X X X X > # end of TabStop X X X X > # end of TabStop X X X X > # end of TabStop X X X X > # end of TabStop X X X X > # end of TabStop X X X X > # end of TabStop X X X X > # end of TabStop X X X X > # end of TabStop X X X X > # end of TabStop X X X X > # end of TabStop X X X X > # end of TabStop X X X X > # end of TabStop X X X X > # end of TabStop X X X X > # end of TabStop X X X X > # end of TabStop X X X X > # end of TabStop X X X X > # end of TabStop X X X X X X X X X X X X X X X X X > # end of Pgf X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X > # end of PgfFont X X X X X X X X > # end of TabStop X X X X X X X X X X X X X X X X X > # end of Pgf X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X > # end of PgfFont X X X X X X X X > # end of TabStop X X X X X X X X X X X X X X X X X > # end of Pgf X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X > # end of PgfFont X X X X : '> X X X X X X X X X X X X X X X X X X X X > # end of Pgf X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X > # end of PgfFont X X X X X X X X X X X X X X X X X X X X X > # end of Pgf X> # end of PgfCatalog X # end of ElementDefCatalog X X X X X X X X X X X X X X X X X X > # end of Font X X X > # end of Font X X X > # end of Font X X X X > # end of Font X> # end of FontCatalog X X X X X X X X > # end of Ruling X X X X X X X X > # end of Ruling X X X X X X X X > # end of Ruling X X X X X X X X > # end of Ruling X X X X X X X X > # end of Ruling X> # end of RulingCatalog X X X X X > # end of TblColumnH X X > # end of TblColumnBody X X X X X X X X X X X X X X X X X X X X X X X X X X X X X > # end of PgfFont X X X X > # end of Pgf X > # end of TblColumnF X > # end of TblColumn X X X X > # end of TblColumnH X X > # end of TblColumnBody X X X X X X X X X X X X X X X X X X X X X X X X X X X X X > # end of PgfFont X X X X > # end of Pgf X > # end of TblColumnF X > # end of TblColumn X X X X > # end of TblColumnH X X > # end of TblColumnBody X X X X X X X X X X X X X X X X X X X X X X X X X X X X X > # end of PgfFont X X X X > # end of Pgf X > # end of TblColumnF X > # end of TblColumn X X X X > # end of TblColumnH X X > # end of TblColumnBody X X X X X X X X X X X X X X X X X X X X X X X X X X X X X > # end of PgfFont X X X X > # end of Pgf X > # end of TblColumnF X > # end of TblColumn X X X X > # end of TblColumnH X X > # end of TblColumnBody X X X X X X X X X X X X X X X X X X X X X X X X X X X X X > # end of PgfFont X X X X > # end of Pgf X > # end of TblColumnF X > # end of TblColumn X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X > # end of TblTitlePgf1 X X X X X X X > # end of TblFormat X X X X X > # end of TblColumnH X X > # end of TblColumnBody X X X X X X X X X X X X X X X X X X X X X X X X X X X X X > # end of PgfFont X X X X > # end of Pgf X > # end of TblColumnF X > # end of TblColumn X X X X > # end of TblColumnH X X > # end of TblColumnBody X X X X X X X X X X X X X X X X X X X X X X X X X X X X X > # end of PgfFont X X X X > # end of Pgf X > # end of TblColumnF X > # end of TblColumn X X X X > # end of TblColumnH X X > # end of TblColumnBody X X X X X X X X X X X X X X X X X X X X X X X X X X X X X > # end of PgfFont X X X X > # end of Pgf X > # end of TblColumnF X > # end of TblColumn X X X X > # end of TblColumnH X X > # end of TblColumnBody X X X X X X X X X X X X X X X X X X X X X X X X X X X X X > # end of PgfFont X X X X > # end of Pgf X > # end of TblColumnF X > # end of TblColumn X X X X > # end of TblColumnH X X > # end of TblColumnBody X X X X X X X X X X X X X X X X X X X X X X X X X X X X X > # end of PgfFont X X X X > # end of Pgf X > # end of TblColumnF X > # end of TblColumn X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X > # end of TblTitlePgf1 X X X X X X X > # end of TblFormat X> # end of TblCatalog X X X > # end of View X X X X X X X X > # end of View X X X X > # end of View X X X > # end of View X X X > # end of View X X X > # end of View X> # end of Views X X '> X > # end of VariableFormat X X <$daynum\>, <$year\>'> X > # end of VariableFormat X X /<$daynum\>/<$shortyear\>'> X > # end of VariableFormat X X <$daynum\>, <$year\> <$hour\>:<$minute00\> <$ampm\>'> X > # end of VariableFormat X X /<$daynum\>/<$shortyear\>'> X > # end of VariableFormat X X <$daynum\>, <$year\>'> X > # end of VariableFormat X X /<$daynum\>/<$shortyear\>'> X > # end of VariableFormat X X '> X > # end of VariableFormat X X '> X > # end of VariableFormat X X '> X > # end of VariableFormat X X '> X > # end of VariableFormat X X '> X > # end of VariableFormat X X '> X > # end of VariableFormat X X '> X > # end of VariableFormat X X X > # end of VariableFormat X X of <$tblsheetcount\>)'> X > # end of VariableFormat X> # end of VariableFormats X X \xd3 on page\x11 <$pagenum\>'> X > # end of XRefFormat X X '> X > # end of XRefFormat X X \xd3 on page\x11 <$pagenum\>.'> X > # end of XRefFormat X X , \xd2 <$paratext\>,\xd3 on page\x11 <$pagenum\>'> X > # end of XRefFormat X X on page\x11 <$pagenum\>'> X > # end of XRefFormat X X \\<<$paratext\>\\\> , (<$paranum\>, p. <$pagenum\>)'> X > # end of XRefFormat X X ]'> X > # end of XRefFormat X> # end of XRefFormats X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X> # end of Document XlitTOC.doc'> X X X X X X> # end of BookComponent X # end of InitialAutoNums X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X> # end of Dictionary X X X X X X X X X > # end of DashedPattern X X X X X X X X X X X X X X X X X X X > # end of Ellipse X X X X X X X > # end of Rectangle X X X X X X X X X X X X X > # end of ArrowStyle X X X X X > # end of PolyLine X X X X > # end of Group X X X X X X > # end of Ellipse X X X X X X X > # end of Rectangle X X X X X X X X > # end of PolyLine X X X X > # end of Group X X X X X X > # end of Ellipse X X X X X X X > # end of Rectangle X X X X X X X X > # end of PolyLine X X X X > # end of Group X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X > # end of Font X X > # end of TextLine X X X X X X X > # end of TextLine X X X X X X X > # end of TextLine X X X X X X X > # end of TextLine X X X X X X X > # end of TextLine X X X X X X > # end of PolyLine X X X X X X X X X X X > # end of Font X X > # end of TextLine X X X X X X > # end of PolyLine X X X X X X X X X > # end of PolyLine X X X X X X X > # end of TextLine X X X X X X X > # end of TextLine X X X X X X X > # end of TextLine X X X X X X X X X > # end of PolyLine X X X X X X > # end of PolyLine X X X X X X X > # end of TextLine X X X X X X X > # end of TextLine X X X X X X X > # end of TextLine X X X X X X X > # end of TextLine X X X X X X > # end of PolyLine X X X X X X > # end of PolyLine X X X X X X > # end of PolyLine X X X X X X X > # end of TextLine X X X X X X X X X X X > # end of Font X X > # end of TextLine X > # end of Frame X> # end of AFrames X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X > # end of PgfFont X > # end of Pgf X > # end of TblColumnH X X X X X X X X X X X X X X X X X X X X X X X X X X X X > # end of PgfFont X > # end of Pgf X > # end of TblColumnBody X X X X X X > # end of Pgf X > # end of TblColumnF X > # end of TblColumn X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X > # end of PgfFont X > # end of Pgf X > # end of TblColumnH X X X X X X X X X X X X X X X X X X X X X X X X X X X X > # end of PgfFont X > # end of Pgf X > # end of TblColumnBody X X X X X X > # end of Pgf X > # end of TblColumnF X > # end of TblColumn X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X > # end of PgfFont X > # end of Pgf X > # end of TblColumnH X X X X X X X X X X X X X X X X X X X X X X X X X X X X > # end of PgfFont X > # end of Pgf X > # end of TblColumnBody X X X X X X > # end of Pgf X > # end of TblColumnF X > # end of TblColumn X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X > # end of PgfFont X > # end of Pgf X > # end of TblColumnH X X X X X X X X X X X X X X X X X X X X X X X X X X X X > # end of PgfFont X > # end of Pgf X > # end of TblColumnBody X X X X X X > # end of Pgf X > # end of TblColumnF X > # end of TblColumn X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X > # end of PgfFont X > # end of Pgf X > # end of TblColumnH X X X X X X X X X X X X X X X X X X X X X X X X X X X X > # end of PgfFont X > # end of Pgf X > # end of TblColumnBody X X X X X X > # end of Pgf X > # end of TblColumnF X > # end of TblColumn X > # end of TblFormat X X X X X # end of Notes X X X X X > X > # end of Para X > # end of TblTitleContent X X X # end of Notes X X X X > X > # end of Para X > # end of CellContent X > # end of Cell X # end of Notes X X X X > X > # end of Para X > # end of CellContent X > # end of Cell X > # end of Row X > # end of TblH X X X # end of Notes X X X X > X > # end of Para X > # end of CellContent X > # end of Cell X # end of Notes X X X X > X X > X > # end of Para X > # end of CellContent X > # end of Cell X > # end of Row X X X # end of Notes X X X X > X > # end of Para X > # end of CellContent X > # end of Cell X # end of Notes X X X X > X > # end of Para X > # end of CellContent X > # end of Cell X > # end of Row X X X # end of Notes X X X X > X > # end of Para X > # end of CellContent X > # end of Cell X # end of Notes X X X X > X X > X > # end of Para X > # end of CellContent X > # end of Cell X > # end of Row X X X # end of Notes X X X X > X > # end of Para X > # end of CellContent X > # end of Cell X # end of Notes X X X X > X X > X > # end of Para X > # end of CellContent X > # end of Cell X > # end of Row X X X # end of Notes X X X X > X > # end of Para X > # end of CellContent X > # end of Cell X # end of Notes X X X X > X X > X X > X X > X X > X X > X > # end of Para X > # end of CellContent X > # end of Cell X > # end of Row X X X # end of Notes X X X X > X > # end of Para X > # end of CellContent X > # end of Cell X # end of Notes X X X X > X > # end of Para X > # end of CellContent X > # end of Cell X > # end of Row X X X # end of Notes X X X X > X > # end of Para X > # end of CellContent X > # end of Cell X # end of Notes X X X X > X X > X X > X > # end of Para X > # end of CellContent X > # end of Cell X > # end of Row X X X # end of Notes X X X X > X > # end of Para X > # end of CellContent X > # end of Cell X # end of Notes X X X X > X X > X > # end of Para X > # end of CellContent X > # end of Cell X > # end of Row X X X # end of Notes X X X X > X > # end of Para X > # end of CellContent X > # end of Cell X # end of Notes X X X X > X > # end of Para X > # end of CellContent X > # end of Cell X > # end of Row X X X # end of Notes X X X X > X > # end of Para X > # end of CellContent X > # end of Cell X # end of Notes X X X X > X X X > X 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 X X X X X X X X X X X X X X > # end of DashedPattern X X X X X > # end of TextRect X X X X X X X > # end of TextRect X X X X X X X > # end of TextRect X> # end of Page X X X X X X X X X X X X X X X > # end of DashedPattern X X X X X > # end of TextRect X X X X X X X > # end of TextRect X X X X X X X > # end of TextRect X X X X X X X X X X > # end of PolyLine X> # end of Page X X X X X X X X X X X > # end of DashedPattern X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X > # end of Font X X > # end of TextLine X X X X X X X > # end of TextLine X X X X X X X X X X X X X X X X X X X X > # end of PolyLine X > # end of Frame X X X X X X X > # end of TextLine X X X X X X X X X X X X X X X X > # end of PolyLine X X X X X X > # end of PolyLine X > # end of Frame X X X X X X X X X X X X X X X > # end of PolyLine X > # end of Frame X X X X X X X X X > # end of Frame X X X X X X X > # end of TextLine X> # end of Page X X X X X X X X X X X X X X X > # end of DashedPattern X X X X X > # end of TextRect X> # end of Page X X X X X X X X X X X X X X X X > # end of DashedPattern X X X X X > # end of TextRect X> # end of Page X X X X X X X X X X X X X X X X > # end of DashedPattern X X X X X > # end of TextRect X> # end of Page X X X X X X X X X X X X X X X X > # end of DashedPattern X X X X X > # end of TextRect X> # end of Page X X X X X X X X X X X X X X X X > # end of DashedPattern X X X X X > # end of TextRect X> # end of Page X X X X X X X X X X X X X X X X > # end of DashedPattern X X X X X > # end of TextRect X> # end of Page X X X X X X X X X X X X X X X X > # end of DashedPattern X X X X X > # end of TextRect X> # end of Page X X X X X X X X X X X X X X X X > # end of DashedPattern X X X X X > # end of TextRect X> # end of Page X X X X X X X X X X X X X X X X > # end of DashedPattern X X X X X > # end of TextRect X> # end of Page X X X X X X X X X X X X X X X X > # end of DashedPattern X X X X X > # end of TextRect X> # end of Page X X X X X X X X X X X X X X X X > # end of DashedPattern X X X X X > # end of TextRect X> # end of Page X X X X X X X X X X X X X X X X > # end of DashedPattern X X X X X > # end of TextRect X> # end of Page X X X X X X X X X X X X X X X X > # end of DashedPattern X X X X X > # end of TextRect X> # end of Page X X X X X X X X X X X X X X X X > # end of DashedPattern X X X X X > # end of TextRect X> # end of Page X X X X X X X X X X X X X X X X > # end of DashedPattern X X X X X > # end of TextRect X> # end of Page X X X # end of Notes X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X > # end of PgfFont X X X X X X X X X X X X X X X X X X X X X > # end of Pgf X X > X > # end of Para X> # end of TextFlow X X X # end of Notes X X X X > X > # end of Para X> # end of TextFlow X # end of Notes X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X > # end of PgfFont X X X X X X > # end of TabStop X X X X > # end of TabStop X X X X X > # end of Pgf X X X X X X X > # end of Variable X > X > # end of Para X> # end of TextFlow X # end of Notes X X X > # end of Pgf X X > X > # end of Para X> # end of TextFlow X # end of Notes X X X > # end of Pgf X X > X > # end of Para X> # end of TextFlow X # end of Notes X X X > # end of Pgf X X > X > # end of Para X> # end of TextFlow X X X # end of Notes X X X X > # end of Pgf X X X X X X > # end of Font X X > # end of Conditional X X X > # end of Font X X > X > # end of Para X X X X X X X X > # end of TabStop X > # end of Pgf X X X > X X X X > X X X X X X > # end of Font X X X > # end of Font X X > X > # end of Para X X X X > X > # end of Para X X X X X > X X X X X X > # end of XRef X X X X X > X X > X > # end of Para X X X X > X X > X X > X X X > X X > X X > X X > X > # end of Para X X X X > X X > X > # end of Para X X X X > X > # end of Para X X X X X X > X X > X X X > # end of Font X X X > # end of Font X X > X X > X X > X X > X X > X > # end of Para X X X X X X > # end of Font X X X > # end of Font X X > X X > X > # end of Para X X X X X > X X > X X > X > # end of Para X X X X > X X > X X > X > # end of Para X X X X > X X X > X X > X X > X X X > X X > X X > X > # end of Para X X X X > X > # end of Para X X X X > X > # end of Para X X X X X X > X X > X > # end of Para X X X X X X > X X > X X > X > # end of Para X X X X X > X X > X > # end of Para X X X X > # end of Font X X X > # end of Font X X > X X > X X X > # end of Font X X X > # end of Font X X X > X X X > # end of Font X X X > # end of Font X X > X > # end of Para X X X X > X > # end of Para X X X X X > X X > X > # end of Para X X X X X X X X > # end of Marker X X X X > X X > X > # end of Para X X X X X > X > # end of Para X X X X > X X > X > # end of Para X X X X > X > # end of Para X X X Conditional Text -\> Show/Hide..., and hide the conditional '> X > X X > X > # end of Para X X X X > X X > X > # end of Para X X X X > X > # end of Para X X X X X > X > # end of Para X X X X X > X > # end of Para X X X X X > X > # end of Para X X X X X > X > # end of Para X X X X X > X > # end of Para X X X X > # end of Para X X X X > # end of Para X X X X > # end of Pgf X X X > # end of Conditional X X > X > # end of Para X X X X > # end of Para X X X X > X X > X X > X X > X X > X > # end of Para X X X X X > X X > X X > X > # end of Para X X X X > X > # end of Para X X X X > # end of Para X X X X X > X > # end of Para X X X X X X X > # end of Font X X X > # end of Font X X > X X > X > # end of Para X X X X > X X > X > # end of Para X X X X > X > # end of Para X X X X > X > # end of Para X X X X > X X X X > # end of Font X X X > # end of Font X X X X > # end of Font X X X > # end of Font X X X X > # end of Font X X > X > # end of Para X X X X X > X > # end of Para X X X X X X X > # end of XRef X X > # end of Font X , (2:, p. 3)'> X X > # end of Font X X > X > # end of Para X X X X X X X > # end of XRef X X > # end of Font X , (3:, p. 3)'> X X > # end of Font X X > X > # end of Para X X X X X X X > # end of XRef X X > # end of Font X , (4:, p. 4)'> X X > # end of Font X X > X > # end of Para X X X X X X X > # end of XRef X X > # end of Font X , (23:, p. 8)'> X X > # end of Font X X > X > # end of Para X X X X X X X > # end of XRef X X > # end of Font X , (5:, p. 4)'> X X > # end of Font X X > X > # end of Para X X X X X > # end of Font X X X > # end of Font X X X > # end of Font X X > X > # end of Para X X X X > # end of Para X X X X X X X X > # end of Marker X X > X > # end of Para X X X '> X > X > # end of Para X X X X > # end of Para X X X X X X X X > # end of Marker X X > X > # end of Para X X X X > X > # end of Para X X X X > X > # end of Para X X X X > X > # end of Para X X X X > X > # end of Para X X X X > X > # end of Para X X X X > X > # end of Para X X X X > # end of Para X X X X X X X X X > # end of Marker X X > X > # end of Para X X X X X > # end of Font X X X > # end of Font X X X > # end of Font X X X > # end of Font X X > X X > X > # end of Para X X X X > # end of Para X X X X > X > # end of Para X X X X > X > # end of Para X X X X > X > # end of Para X X X X > X > # end of Para X X X X > # end of Para X X X X X > # end of Font X X X > # end of Font X X > X > # end of Para X X X X > # end of Para X X X X X X X X > # end of Marker X X > X > # end of Para X X X X > X > # end of Para X X X X X X > X > # end of Para X X X X X > X > # end of Para X X X X X > X > # end of Para X X X X X > X > # end of Para X X X X > X > # end of Para X X X X X X X X X > # end of XRef X X > # end of Font X , (6:, p. 4)'> X X > # end of Font X X > X > # end of Para X X X X X > X > # end of Para X X X X X X X X X > # end of XRef X X > # end of Font X , (7:, p. 4)'> X X > # end of Font X X > X > # end of Para X X X X X X X X X > # end of XRef X X > # end of Font X , (8:, p. 5)'> X X > # end of Font X X > X > # end of Para X X X X X X X X X > # end of XRef X X > # end of Font X , (21:, p. 8)'> X X > # end of Font X X > X > # end of Para X X X X X > X > # end of Para X X X X > X > # end of Para X X X X > # end of Para X X X X > X X X > X X > X X > X > # end of Para X X X X > X X > X > # end of Para X X X X X X X X > # end of Marker X X X > # end of Font X X X > # end of Font X X > X > # end of Para X X X X > X > # end of Para X X X X > X > # end of Para X X X X > X > # end of Para X X X X > X > # end of Para X X X X > # end of Para X X X X X X X X > # end of Marker X X > X > # end of Para X X X X > X > # end of Para X X X X > X > # end of Para X X X 1 && *argv[1] == \xd4 -\xd5 ) {'> X > X > # end of Para X X X X X > X > # end of Para X X X X X X > X > # end of Para X X X X X > X > # end of Para X X X X > X > # end of Para X X X X > X > # end of Para X X X X > # end of Para X X X X X > X X > X > # end of Para X X X X > X > # end of Para X X X X > # end of Para X X X X X X X X > # end of Marker X X > X > # end of Para X X X X > X > # end of Para X X X X > X > # end of Para X X X X X X X X X X > # end of XRef X X > # end of Font X , (11:, p. 5)'> X X > # end of Font X X > X > # end of Para X X X X X X X X X > # end of XRef X X > # end of Font X , (15:, p. 6)'> X X > # end of Font X X > X > # end of Para X X X X X X X X X > # end of XRef X X > # end of Font X , (17:, p. 6)'> X X > # end of Font X X > X > # end of Para X X X X X X X X X > # end of XRef X X > # end of Font X , (19:, p. 7)'> X X > # end of Font X X > X > # end of Para X X X X X X X X X X > # end of XRef X X > # end of Font X , (12:, p. 6)'> X X > # end of Font X X > X > # end of Para X X X X X X X X X > # end of XRef X X > # end of Font X , (20:, p. 7)'> X X > # end of Font X X > X > # end of Para X X X X X X > X > # end of Para X X X 0);'> X > X > # end of Para X X X X > # end of Para X X X X X > # end of Font X X X > # end of Font X X > X X > X > # end of Para X X X X X > # end of Font X X X > # end of Font X X > X > # end of Para X X X X > # end of Para X X X X X > X > # end of Para X X X X > X > # end of Para X X X X > X > # end of Para X X X X > # end of Para X X X X X > X > # end of Para X X X X > X > # end of Para X X X X > X > # end of Para X X X X > # end of Para X X X X X X X X > # end of Marker X X X > # end of Font X X X > # end of Font X X X > # end of Font X X X > # end of Font X X > X > # end of Para X X X 0 '> X X X X > X > # end of Para X X X X X > X > # end of Para X X X X X > X > # end of Para X X X X X > X > # end of Para X X X X X > X > # end of Para X X X X > X > # end of Para X X X X > # end of Para X X X X X X X X X > # end of Marker X X > X > # end of Para X X X X > X > # end of Para X X X X > # end of Para X X X X > X X > X > # end of Para X X X X > # end of Para X X X X X > X > # end of Para X X X X > X > # end of Para X X X X > X > # end of Para X X X X X X > # end of Font X X > X > # end of Para X X X X > X > # end of Para X X X X > X > # end of Para X X X X > X > # end of Para X X X X > X > # end of Para X X X X > X > # end of Para X X X X > X > # end of Para X X X X > X > # end of Para X X X X > X > # end of Para X X X X > X > # end of Para X X X X > X > # end of Para X X X X > X > # end of Para X X X X > X > # end of Para X X X X > # end of Para X X X X X X X X > # end of Marker X X > X > # end of Para X X X X > X > # end of Para X X X X > X > # end of Para X X X X > X > # end of Para X X X X > # end of Para X X X X > X X X > # end of Font X X X > # end of Font X X > X X > X > # end of Para X X X X X > X > # end of Para X X X X > X > # end of Para X X X X > X > # end of Para X X X X > X > # end of Para X X X X X X X X > # end of Marker X X > X > # end of Para X X X X X > # end of Font X X X > # end of Font X X X X X > # end of Font X X X > # end of Font X X > X X > X > # end of Para X X X X > # end of Para X X X X > X > # end of Para X X X X X X X X X > # end of XRef X X > # end of Font X , (18:, p. 7)'> X X > # end of Font X X > X > # end of Para X X X X X X > X > # end of Para X X X X \xd4 \xd4 && c < 0177) {'> X > X > # end of Para X X X X X X X > X > # end of Para X X X X X X > X > # end of Para X X X X X X X > X > # end of Para X X X X X X X > X > # end of Para X X X X X X > X > # end of Para X X X X X X > X > # end of Para X X X X X > X > # end of Para X X X X X > X > # end of Para X X X X X > X > # end of Para X X X X X > X > # end of Para X X X X X > X > # end of Para X X X X > X > # end of Para X X X X > # end of Para X X X X > X > # end of Para X X X X X X X X > # end of Marker X X X > # end of Font X X X > # end of Font X X X > # end of Font X X X > # end of Font X X > X > # end of Para X X X = buf_end) {'> X > X > # end of Para X X X X X > X > # end of Para X X X X X > X > # end of Para X X X X X > X > # end of Para X X X X X > X > # end of Para X X X X X > X > # end of Para X X X X > X > # end of Para X X X X > # end of Para X X X X X > # end of Font X X X > # end of Font X X > X X > X X > X > # end of Para X X X X X X X X > # end of Marker X X > X > # end of Para X X X X > X > # end of Para X X X X > X > # end of Para X X X X > X > # end of Para X X X X > X > # end of Para X X X X > X > # end of Para X X X X > X > # end of Para X X X X > # end of Para X X X X X X X X > # end of Marker X X > X > # end of Para X X X X > X > # end of Para X X X X > X > # end of Para X X X X > X > # end of Para X X X X > # end of Para X X X X > # end of Para X X X X X > # end of Font X X X > # end of Font X X X > # end of Font X X X > # end of Font X X > X > # end of Para X X X X X X X X X > # end of Marker X X > X > # end of Para X X X 1) {'> X > X > # end of Para X X X X X > X > # end of Para X X X X X > X > # end of Para X X X X > X > # end of Para X X X X > # end of Para X X X X X > X X > X X > X > # end of Para X X X X X > X > # end of Para X X X X > X > # end of Para X X X X X X X X > # end of Marker X X > X > # end of Para X X X X > X > # end of Para X X X X X > X > # end of Para X X X X X > X > # end of Para X X X X X > X > # end of Para X X X X > X > # end of Para X X X X X > X > # end of Para X X X X X X > X > # end of Para X X X X X X X > X > # end of Para X X X X X X X X > X > # end of Para X X X X X X X > X > # end of Para X X X X X X X X X > X > # end of Para X X X X X X X > X > # end of Para X X X X X X X X > X > # end of Para X X X X X X X > X > # end of Para X X X X X X X X > X > # end of Para X X X X X X X X X > X > # end of Para X X X X X X X X X X X X X X X X X > X > # end of Para X X X X X X X X X > X > # end of Para X X X X X X X X > X > # end of Para X X X X X X X > X > # end of Para X X X X > X > # end of Para X X X X > # end of Para X X X X X > # end of Font X X X > # end of Font X X > X X X > # end of Font X X X > # end of Font X X X > # end of Font X X X > # end of Font X X > X X X > # end of Font X X X > # end of Font X X > X > # end of Para X X X X > X X > X > # end of Para X X X X > # end of Para X X X X X X > # end of Font X X X > # end of Font X X > X > # end of Para X X X conditional text, and hide the conditional tag named \xd2 Fluff\xd3 . Save the '> X > X X X > X > # end of Para X X X X > # end of Para X X X X X > X > # end of Para X X X X X > X > # end of Para X X X X X > X X X > X X > X X > X X > X > # end of Para X X X X > X X > X X > X X > X X > X X > X > # end of Para X X X X X X > X X > X X > X X > X > # end of Para X X X X X X X X > # end of Font X X > X > # end of Para X X X X > X > # end of Para X X X X > # end of Para X X X X > X > # end of Para X X X X X > X > # end of Para X X X X > X > # end of Para X X X X > X > # end of Para X X X X > X > # end of Para X X X X > X > # end of Para X X X X > # end of Para X X X X > X > # end of Para X X X X > # end of Para X X X X > X > # end of Para X X X X > X > # end of Para X X X X > X > # end of Para X X X ) {'> X > X > # end of Para X X X X X > X > # end of Para X X X X X X X > X > # end of Para X X X X X X > X > # end of Para X X X X X X > X > # end of Para X X X X X > X > # end of Para X X X X > X > # end of Para X X X X > # end of Para X X X X > X > # end of Para X X X X > # end of Para X X X X > X > # end of Para X X X X > X > # end of Para X X X X X X > X > # end of Para X X X X > X > # end of Para X X X X > # end of Para X X X X > X > # end of Para X X X X X $currFile'> X X X X X X X > X > # end of Para X X X X > # end of Para X X X X > X > # end of Para X X X X > X > # end of Para X X X X X X > X > # end of Para X X X X X X > X > # end of Para X X X X X X X > X > # end of Para X X X X X X X > X > # end of Para X X X X X /\>/g;'> X to \>'> X > X > # end of Para X X X X X X X X X X X > X > # end of Para X X X X X X > X > # end of Para X X X X > X > # end of Para X X X X > # end of Para X X X X > X > # end of Para X X X X > X > # end of Para X X X X > # end of Para X X X X X > X > # end of Para X X X X > # end of Para X X X X X X X > # end of Font X X X > # end of Font X X > X > # end of Para X X X X X X > X > # end of Para X X X X > X > # end of Para X X X X X X X X X X > X > # end of Para X X X X > # end of Para X X X X X X > X > # end of Para X X X X X X > X > # end of Para X X X X X X > X > # end of Para X X X X X X > X > # end of Para X X X X X X X > X > # end of Para X X X X X X X > X > # end of Para X X X X X X > X > # end of Para X X X X X X > X > # end of Para X X X X X X X X X X X > X > # end of Para X X X X X X > X > # end of Para X X X X > X > # end of Para X X X X > # end of Para X X X X X X X > # end of Font X X X > # end of Font X X > X > # end of Para X X X X X > X > # end of Para X X X X X X > X > # end of Para X X X X X X > X > # end of Para X X X X X X > X > # end of Para X X X X X X X > X > # end of Para X X X X X X > X > # end of Para X X X X > # end of Para X X X X X X > X > # end of Para X X X X > X > # end of Para X X X X > # end of Para X X X X X X X > # end of Font X X X > # end of Font X X > X > # end of Para X X X X X X > X > # end of Para X X X X X X > X > # end of Para X X X X X X X X X X X X X X X X X X > X > # end of Para X X X X X X > X > # end of Para X X X X X X > X > # end of Para X X X X X X > X > # end of Para X X X X X X X X X X > X > # end of Para X X X X X X > X > # end of Para X X X X X X > X > # end of Para X X X X X X > X > # end of Para X X X X X X > X > # end of Para X X X X X X > X > # end of Para X X X X X X > X > # end of Para X X X X X X > X > # end of Para X X X X X X > X > # end of Para X X X X X X > X > # end of Para X X X X > X > # end of Para X X X X > # end of Para X X X X X X X > # end of Font X X X > # end of Font X X > X > # end of Para X X X X X X > X > # end of Para X X X X X X > X > # end of Para X X X X X X X X X X > X > # end of Para X X X X X X > X > # end of Para X X X X X X X > X > # end of Para X X X X X X > X > # end of Para X X X X X X > X > # end of Para X X X X X X X X X X > X > # end of Para X X X X X $/ ) {'> X > X > # end of Para X X X X X X > X > # end of Para X X X X X X X > X > # end of Para X X X X X X > X > # end of Para X X X X X X > X > # end of Para X X X X > X > # end of Para X X X X > # end of Para X X X X X X X > # end of Font X X X > # end of Font X X > X > # end of Para X X X X X X > X > # end of Para X X X X X X > X > # end of Para X X X X X X X X X X X X X X X X X X > X > # end of Para X X X X X X > X > # end of Para X X X X X > X > # end of Para X X X X X X > X > # end of Para X X X X X X X X X X > X > # end of Para X X X X X X > X > # end of Para X X X X X X X X X X > X > # end of Para X X X X X $/) {'> X > X > # end of Para X X X X X X X X X X > X > # end of Para X X X X X $/)) {'> X > X > # end of Para X X X X X X X X > X > # end of Para X X X X X X > X > # end of Para X X X X X X X X X X > X > # end of Para X X X X X X > X > # end of Para X X X X X X > X > # end of Para X X X X X X > X > # end of Para X X X X X X > X > # end of Para X X X X X X > X > # end of Para X X X X X X > X > # end of Para X X X X X X X X X > X > # end of Para X X X X X X > X > # end of Para X X X X X X > X > # end of Para X X X X > X > # end of Para X X X X > # end of Para X X X X X X X > # end of Font X X X > # end of Font X X > X > # end of Para X X X X X > X > # end of Para X X X X X > X > # end of Para X X X X X X > X > # end of Para X X X X X X X X X X > X > # end of Para X X X X X X > X > # end of Para X X X X X X > X > # end of Para X X X X X X > X > # end of Para X X X X X X > X > # end of Para X X X X > X > # end of Para X X X X > # end of Para X X X X X X X > # end of Font X X X > # end of Font X X > X > # end of Para X X X X X X > X > # end of Para X X X X X X > X > # end of Para X X X X X X X X X X X X X X > X > # end of Para X X X X X X X > X > # end of Para X X X X X X X > X > # end of Para X X X X X X > X > # end of Para X X X X X X > X > # end of Para X X X X X X > X > # end of Para X X X X X $/) {'> X > X > # end of Para X X X X X X > X > # end of Para X X X X X $/ ) {'> X > X > # end of Para X X X X X X > X > # end of Para X X X X X X > X > # end of Para X X X X X X > X > # end of Para X X X X X X X X X X > X > # end of Para X X X X X X > X > # end of Para X X X X X X X > X > # end of Para X X X X X X X X X > X > # end of Para X X X X X X > X > # end of Para X X X X X X > X > # end of Para X X X X X X X > X > # end of Para X X X X X X X X > X > # end of Para X X X X X X X X > X > # end of Para X X X X X X > X > # end of Para X X X X X X X X X > X > # end of Para X X X X X X X > X > # end of Para X X X X X X X X > X > # end of Para X X X X X X > X > # end of Para X X X X X X X > X > # end of Para X X X X X X > X > # end of Para X X X X > X > # end of Para X X X X > # end of Para X X X X X X X > # end of Font X X X > # end of Font X X > X > # end of Para X X X X X > X > # end of Para X X X X X > X > # end of Para X X X X X X > X > # end of Para X X X X X X X X X > X > # end of Para X X X X X X > X > # end of Para X X X X X X > X > # end of Para X X X X X X > X > # end of Para X X X X > X > # end of Para X X X X > # end of Para X X X X X X X > # end of Font X X X > # end of Font X X > X > # end of Para X X X X X X > X > # end of Para X X X X X X X X > X > # end of Para X X X X X > X > # end of Para X X X X # end of Para\xd5 ;'> X > X > # end of Para X X X X > # end of Para X X X X X > X > # end of Para X X X X X > X > # end of Para X X X X X > X > # end of Para X X X X X > X > # end of Para X X X X X > X > # end of Para X X X X > # end of Para X X X X X > X > # end of Para X X X X X > X > # end of Para X X X X X > X > # end of Para X X X X X > X > # end of Para X X X X X > X > # end of Para X X X X > X > # end of Para X X X X > # end of Para X X X X X X > # end of Para X X X X > # end of Para X> # end of TextFlow X X # end of Notes X X X X '> X X '> X > X > # end of Para X X X '> X X '> X > X > # end of Para X X X X X X X X X X X X X X X > # end of TabStop X X X X > # end of TabStop X X > # end of Pgf 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 FMFILL X11 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 FMFILL X25 FMFILL X26 <3333333333333333> FMFILL X27 <0000ffff0000ffff> FMFILL X28 <7ebddbe7e7dbbd7e> FMFILL X29 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(
, \0502:, p. 3\051) 90 345.61 T X( , \0503:, p. 3\051) 90 330.89 T X( , \0504:, p. 4\051) 90 316.16 T X( , \05023:, p. 8\051) 90 301.44 T X(
, \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 ) 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( , \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( , \0507:, p. 4\051) 110.77 409.89 T X( , \0508:, p. 5\051) 125.72 395.16 T X( , \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( , \05011:, p. 5\051) 277.69 521.61 T X( , \05015:, p. 6\051) 113.54 506.89 T X( , \05017:, p. 6\051) 113.54 492.16 T X( , \05019:, p. 7\051) 128.91 477.44 T X( , \05012:, p. 6\051) 110.77 462.72 T X( , \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( , \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 = \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"^ *$/ \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"^ *$/\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 =~ /^ *$/\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"^ *$/\051 {) 194.08 305.33 T X($currMarkerT) 126 293.33 T X(ext = $1;) 187.44 293.33 T X( } elsif \050$ev =~ /^ *$/ \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^ * # 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} @ \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 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: 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" 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: 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. <>= \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. <>= --- 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. <>= \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. <>= *************** *** 631,639 **** @ %def \@pageref @ [[\sublabel]] is like the [[\label]] command, except that it writes ! [[\newsublabel]] onto the [[.aux]] file rather than [[\newlabel]]. <>= \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. <>= \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. <>= \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. <>= % RmS 92/08/14: made \ref and \pageref robust ! \def\ref#1{\@ifundefined{r@#1}{{\bf ??}<>}% ! {\expandafter\expandafter\expandafter ! \@car\csname r@#1\endcsname\@nil\null}} \def\pageref#1{\@ifundefined{r@#1}{{\bf ??}<>}% {\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. <>= % RmS 92/08/14: made \ref and \pageref robust ! %\def\ref#1{\@ifundefined{r@#1}{{\bf ??}<>}% ! % {\expandafter\expandafter\expandafter ! % \@car\csname r@#1\endcsname\@nil\null}} \def\pageref#1{\@ifundefined{r@#1}{{\bf ??}<>}% {\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: 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 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: 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 <>= <>= <>= <>= 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: 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 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: 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: 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: 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 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 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 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 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 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 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 - ---------------------------------------------------------------------- - 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 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 " (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 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 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 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 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 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 , 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 */ > /* 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. 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: 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 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 , Oliver Hecker 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 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 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: 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 This is used in section avl 11. 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 Reply-To: LitProg@SHSU.edu, keith@SEQ.OIT.OSSHE.EDU Subject: Re: Aptitude and Logic Tests:Any Info? To: LitProg@SHSU.edu, RobertJ260 Message-ID: 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 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 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 Reply-To: LitProg@SHSU.edu, leew@PILOT.NJIN.NET To: litprog@shsu.edu Subject: LP paper for SIGCSE conference Message-ID: 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 . 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 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 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 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