Date: Mon, 22 Feb 1993 10:00:09 CST From: FILESERV-Mgr@SHSU.edu Subject: FAQ.FWEB To: sojka@ics.muni.cs (To see the questions, display lines matching the regexp `^\[[1-9]'.) FWEB in Questions and Answers (01/93) ************************************** [last updated 5 Jan 1993] [Send comments to: Marcus Speh, marcus@x4u.desy.de] This article contains frequently asked questions and their answers concerning the FWEB system of "Literate Programming" from the "LitProg" mailing list, until January 1993. Most of the answers are taken from the postings, with little moderation from my side. The original postings are archived at `niord.shsu.edu' in directory `[FILESERV.LITPROG]'. Comments, corrections and suggestions from several people were used to improve single questions and answers (*note Acknowledgements::.). Most notably, John Krommes, FWEB's designer, provided a wealth of useful comments. I have dubbed him "JAK" in some places. Inside quotes, my own comments are marked "[... -MS]". Sections of the FWEB User's Manual are referred to by their section numbers, as in "[M-10.2]" (*note What is the difference between the FAQ and the manual?: Question 5.). Introduction and Editorial *************************** [1] What is FWEB? ================== For a thorough discussion of the WEB system, I refer to the extensive literature, collected in Nelson Beebe's bibliography (at `ftp.math.utah.edu' in directory `pub/tex/bib'). For pointers, see the upcoming "General FAQ" by Dave Thompson. The WEB system. --------------- In D.E. Knuth's [author of the original WEB, coauthor of CWEB] own words, [M-2.4] "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 (1) 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." FWEB - a multilingual WEB variant. ---------------------------------- FWEB which is being supported and upgraded by John Krommes is a substantial extension of CWEB, FWEB supports C, C++, Fortran, Fortran90, Ratfor, and TeX i.e. writing TeX macros (style files). It runs on most platforms: VMS, PC, UNIX, and pretty much anything that the GNU C compiler (GCC) is supported for. JAK [M-1]: "The principal design contributions to this version of WEB are 1. the concept of a current language, so that one can process code written in multiple languages in the same WEB run; 2. new production rules for Fortran, Ratfor, and TeX (and some modifications of Levy's (2) rules for C; 3. a C-like built-in macro preprocessor; 4. the ability to directly translate Ratfor into Fortran. In addition, many miscellaneous details have been changed and a variety of convenience features has been added." ---------- Footnotes ---------- (1) [which itself is written in Knuth's original Pascal WEB -MS] (2) [Levy and Knuth are the authors of the C variant of WEB -MS] [2] How can I subscribe to LitProg? ==================================== If you are not yet subscribed to LitProg, but you are interested, send a MAIL message to `LISTSERV@SHSU.BITNET, or listserv@shsu.edu, or LitProg-Request@shsu.edu' stating in the text of the MAIL: `SUBSCRIBE LITPROG your name in quotes'. The list itself is unmoderated: messages sent to `litprog@shsu.edu' are automatically distributed to all subscribers. [3] How can I get the FWEB FAQ? ================================ You may obtain the latest version of this FAQ via anonymous FTP from - `niord.shsu.edu' [192.92.115.8] in directory `[FILESERV.FWEB]', - `lyman.pppl.gov' [192.55.106.129] in directory */pub/fweb/faq*, - `ftp.imada.ou.dk' [129.142.128.14] in directory `/pub/faq', and `ftp.uni-stuttgart.de' [130.83.55.75] in directory `pub/soft/tex/web/fweb'. To retrieve the plain text file via e-mail, include SENDME FAQ.FWEB in the body of a mail message to FILESERV@SHSU.BITNET (fileserv@shsu.edu). Send the command SENDME FILELIST in a mail message to `FILESERV' to get valid information on the names of the downloaded files if you'd like to have another version of the fweb-faq (*note Which versions of the FAQ are available?: Question 4.). NOTE: do *not* include the message `SENDME FWEB' unless you want the full FWEB distribution! [4] Which versions of the FAQ are available? ============================================= Besides the text file `fweb-faq', the FAQ is available as a Texinfo, a PostScript, an Info or a DVI file. All these can be generated from the Texinfo source file `fweb-faq.texi'. The preprocessed DVI and PostScript files are not included anymore. See the simple makefile which accompanies the fweb-faq distribution for detailed information on how to process the Texinfo source. Short instructions are given in the file `README.fweb-faq'. If you do not know anything about Texinfo, don't worry: With the `texinfo.tex' macro package, the principal source file `fweb-faq.texi' can be TeXed (1) like any ordinary TeX file at the expense of not getting an index -- try it! If you would like to start with Texinfo, retrieve its latest version from `prep.ai.mit.edu' in directory `pub/gnu' (*note How can I contribute?: Question 6.). ---------- Footnotes ---------- (1) If you do not have TeX, you may GNU's `texi2roff' for formatting. [5] What is the difference between the FAQ and the manual? =========================================================== Most of the stuff in FAQs *is* in the manual, but people either don't read the manual, or it is too hidden to be found (the FWEB User's Manual currently has more than 200 pages). Thus the FAQ provides, if you will, an index to the manual for those questions that come up regularly. Where possible, sections of the User's Manual for the last release (FWEB version 1.23a) are referred to by their section numbers in square brackets, as in "[M-10.2]". [6] How can I contribute? ========================== If you think that structure or content of this part of the FAQ can be improved, or if you think you have discovered an error, either write to me or post your comment to LitProg (with `fweb-faq (version)' somewhere in the `Subject' line). If you find your name and email adress anywhere on these pages, I'd be grateful if you check whether I got them right and inform me otherwise. The same for errors in ftp site addresses and `Archive-Date' (look into the `Makefile' to learn how to make these visible). "The FAQ" for Literate Programming will probably not exist before the is a unified tool rather than a family of different environments. On LitProg, all these environments are subject to discussion, and a family of FAQ lists is planned, together with a master FAQ list for general questions. This general FAQ will be maintained by David B. Thompson . If you are interested in participating in one of the FAQ lists for LitProg, either contact George D. Greenwade (E-mail: `bed_gdg@shsu.edu' [Internet], `bed_gdg@shsu' [Bitnet], `shsu::bed_gdg' [DECnet]), who maintains LitProg as well as the `FILESERV' repository at Sam Houston State University, or simply announce your wish on the LitProg mailing list. If you want to write a FAQ yourself, get "FAQ writer's FAQ" (by Nathan Torkington and Ian Kluft) which originates from the faq-maintainers mailing list. It can also be obtained via email by including `SENDME FAQ.WRITING' in the body of a mail message to `FILESERV', or retrieved from `niord.shsu.edu' in `[FILESERV.FAQ]FAQ.WRITING'. If you want to write your FAQ list in Texinfo, use `fweb-faq.texi' as a template for the principal source file (*note Which versions of the FAQ are available?: Question 4.). [7] What else should be included in the FAQ? ============================================= * Merge the FAQs from the FWEB User's Manual with this list. * Remove items of more general character in favor of Dave Thompson's general FAQ for LitProg. * Give more details on the form of the FAQ file's Texinfo source? * Add thoughts on OOP using the FWEB system (*note Which WEB shall I use for C++: Question 16.)? * Should I include information on how to use FTP? * Should this or another member of the LitProg FAQ list family be cross-posted to USENET (`comp.text.tex', `news.answers')? Please send me your opinion on these items and suggest more things which should be done! Acknowledgements ================= Thanks to all those whose postings in LitProg I have used and who have sent me corrections, especially Bart Childs, Johannes Muller, David Thompson and Don Petcher for this number of the FAQ, and to Robert Chassell [FSF, GNU Texinfo and Elisp support] for help with some Texinfo bugs. Thanks to the sysadmins who put up the files on FTP sites, especially Thorbjoern Ravn Andersen (ftp.imada.ou.dk) and Joachim Schrod (ftp.th-darmstadt.de). Special thanks to George D. Greenwade for maintaining the list and the file archives at Sam Houston University, and to John Krommes for checking this FAQ list for his child. Personally, I feel indebted to Thorsten Ohl for having introduced me to FWEB in the first place, and having taught me many more things related to computing. FWEB sources/Manual/Installation ********************************* [8] Where can I get FWEB? ========================== You can get FWEB (version 1.23a) via anonymous FTP either from `lyman.pppl.gov', in directory `pub/fweb/v1.23': /anonymous@lyman.pppl.gov:/pub/fweb/v1.23: -rwxr-xr-x 1 4145 589 8396 Apr 14 22:45 INSTALL.FWEB* -rw-r--r-- 1 4145 589 18967 Apr 14 22:45 Makefile -rw-r--r-- 1 4145 589 3068 Apr 14 22:45 READ_ME.FWEB -rw-r--r-- 1 4145 589 94 Apr 14 22:45 TAR.exclude -rw-r--r-- 1 4145 589 1419071 Apr 14 22:45 TAR.v1.23.Z drwxr-sr-x 2 4145 589 512 Apr 14 22:45 demos/ drwxr-sr-x 2 4145 589 1536 Apr 15 18:06 manual/ ... Or from `niord.shsu.edu', in directory `[FILESERV.FWEB]': /anonymous@niord.shsu.edu:/ANON_DEV:/FILESERV/FWEB: FWEB-V1_23.TAR_Z;1 2772 21-JUL-1992 12:28 (RWE,RWED,RE,RE) FWEB-V1_23.ZIP;1 2370 21-JUL-1992 13:10 (RWE,RWED,RE,RE) ... INTRO.PS;1 175 22-JUL-1992 16:52 (RWE,RWED,RE,RE) ... The PostScript file `INTRO.PS' gives a short introduction to Literate Programming in general, combined with a simple Fortran example program in FWEB. [9] What is the latest version of FWEB? ======================================== The latest version of FWEB is 1.23a - some time in January 1993, version 1.30-beta is bound to come out. Versions that are explicitly intended to be beta versions are now indicated as such--e.g., v1.30-beta--in the banner line from the processors. JAK: "However, given the fragmented state of my time, in some sense they're all beta." The latest version can be retrieved via anonymous FTP as described in *Note Where can I get FWEB?: Question 8. [10] Where can I get FWEB for the PC? ====================================== The official FWEB PC executables are generated as part of each FWEB release. Retrieve them from the FWEB distribution site `lyman.pppl.gov' (*note Where can I get FWEB?: Question 8.) buried deep down in `pub/fweb/v1.23/boot/ibm/pc': ... 312 -rw-r--r-x 1 4145 589 304636 Apr 15 1992 ftangle.exe* 272 -rw-r--r-x 1 4145 589 268878 Apr 15 1992 ftangle0.exe* 280 -rw-r--r-x 1 4145 589 277032 Apr 15 1992 fweave.exe* ... `ftangle0.exe' is ftangle without the Ratfor preprocessor (*note Why is FWEB so huge?: Question 26.). Hans-Hermann Bode announced his precompiled files for the PC. They can be retrieved from `anonymous@niord.shsu.edu:[FILESERV.PC-WEB]': 00INDEX.;1 2 23-JUL-1992 16:26:54.85 ... FWEBEXE.README;1 6 11-JUN-1992 00:15:18.00 FWEBEXE.READ_ME;1 42 9-JUN-1992 12:13:34.00 FWEBEXE.ZIP;1 1525 23-JUL-1992 16:06:33.26 FWEBEXE.ZIP-LST;1 2 23-JUL-1992 16:22:24.54 ... or in Europe from `dione.rz.uni-osnabrueck.de' (in directory: `pub/msdos/tex/web'), and from `ftp.uni-stuttgart' (in directory `soft/tex/web/cweb'). [11] Is FWEB small enough to compile on a PC? ============================================== Yes. It is known to compile with MicroSoft C 6.00 and Turbo C. JAK: "As a remark, it took some considerable pain to make this work. The larger sources, such as `ftangle.web', had to be split into as many as 3 parts (handled by WEB macros and module names). The make file compiles each of those parts separately, then combines them at link stage. Before this was done, compilers tended to bomb with messages such as `Out of heap space'." On LitProg, Tero Laakkonen reported that FWEB also compiles under linux-096c with gcc-2.2.2 on a 80386. In general, John Krommes offers support for porting FWEB to new systems - contact . [12] Has anyone installed FWEB on an HP machine? ================================================= Either get GCC (the GNU C Compiler), or use (if you have it) the unbundled Hewlett-Packard ANSI C Compiler, which is invoked with `cc -Aa -D _HPUX_SOURCE' (as `cc(1)' explains in detail). Then `make' should proceed without any problems. Common Things People Want To Know ********************************** [13] Can I use LaTeX with FWEB? ================================ In principle, you may use any package of TeX macros you like. However, an arbitrary macro package may contain conflicts with macros used in `fwebmac.sty'. Such conflicts are supposed to be eliminated for LaTeX). As for LaTeX which is probably the package most widely used, you have to do two things at minimum [M-19.7.22]: 1. Use the command-line option `-PL' (or place them into your initialization file `~/.fweb' (*note Key differences for FWEB on different systems?: Question 25.). 2. Process fweave's output with `latex' instead of `tex'. In most cases, to use LaTeX with FWEB it suffices to just say `latex test' instead of `tex test'. (I.e., an attempt is made to hide internally whatever differences there are.) It never hurts, and sometimes helps, to use the command-line option `-PL' (select post-processor LaTeX). To print a `|' in a `verbatim' environment, use `@|', like: `\begin{verbatim} ... @| ... \end{verbatim}'. Since FWEB overrides the `\output' routine of LaTeX, some clever page layout facilities will not work - e.g. there are no floating bodies: while the `table' environment is lost, the `tabular' environment still works. See [M-19.22] for details. Bart Childs reports that the use of AMSTeX causes some problems but that it has been done. Difficulties with using LaTeX should be reported directly to Krommes. For bringing in `lex' and `yacc' scripts and the problem of using LaTeX's `\footnote', *Note Can I use lex and yacc scripts with FWEB?: Question 14. [14] Can I use lex and yacc scripts with FWEB? =============================================== Lewis Perin reported that he has succeeded bringing in `lex' and `yacc' UNIX scripts in for FWEB using LaTeX's `verbatim' environment. [15] Can I use the footnote environment from LaTeX? ==================================================== Lewis Perin reports that the superscripts of `\footnotes' appear in the main text while the actual footnote is nowhere to be seen. In his reply, Zdenek Wagner refers to a style file `ftn.sty' which he wrote to correct this (originally for use with CWEB, it seems). `ftn.sty' can be retrieved from `niord.shsu.edu' [192.92.115.8] in directory `[FILESERV.STY]'. [16] Which WEB shall I use for C++ ? ===================================== As CWEB's coauthor Silvio Levy said, starting from version 2.9 (beta), CWEB will understand C++ syntax as well. Successful compilation on the PC with Borland-C++ was reported on LitProg. In the opinion of many people, FWEB is the best CWEB available. It also supports C, C++, F90, Ratfor, Ratfor-90, and writing TeX macros wherein (f)tangle produces `.sty' files. As for the more general question of Object-Oriented Literate Programming, a very interesting discussion was started by Paul Lyon in December. Hopefully, this topic will make it to Dave Thompson's General FAQ for LitProg (*note How can I contribute?: Question 6.). [17] Does FWEB support Makefiles? ================================== Not yet. This is planned, though [M-10.2]. [18] FWEB with the GNU Emacs editor? ===================================== If you are developing your FWEB programs using the GNU Emacs editor, there is `web-mode.el' by Mark Motl ; the corresponding GNU Emacs "mode" can deal with WEB, CWEB and FWEB. It is capable of many things, including jumping to sections and modules, inserting (and previewing) index entries, hiding and exibiting the body of a `.web' file (showing the tree), inserting, quoting, and consistently renaming modules etc. It supports change files and journal files. It is especially useful when dealing with large `.web' files not to have to deal with "monolithic" FWEB files. For more information, you may obtain a 30pp. User's Manual and the source files from the author, from Bart Childs . The current version of `web-mode' (v 1.61, as of Dec 28, 1992) is faster, more robust, and the documentation in the manual is improved and more accurate now. You may also obtain this version as a 220 KByte shell archive from me . [19] How do I turn off double sided pagination in FWEB? ======================================================== In FWEB, the command `\identicalpageheadstrue' [to be put in the so called "limbo" part of your FWEB file] makes all page headers identical, but it puts the page numbers in the upper LEFT corner and the section numbers in the upper RIGHT corner. As Don Petcher pointed out, to do it the other way around you can either change the macro `\normaloutput' in `fwebmac.sty' as indicated: \def\normaloutput#1#2#3{\shipout\vbox{ \ifodd\pageno\hoffset=\pageshift\fi \vbox to\fullpageheight { \iftitle\global\titlefalse \else\hbox to\pagewidth {\vbox to10pt{}% \ifidenticalpageheads#3\else % THIS WAS ORIGINALLY #2 <--------- \ifodd\pageno #3% Makes page numbers alternate left \& right. \else#2\fi \fi }% \fi \vfill#1 }}% Parameter |#1| is the page itself \global\advance\pageno by1} or you can include the above version in your TeX file as a redefinition of the macro. [20] Can I define (and format) new reserved words? =================================================== Assume you want to declare `far' to indicate a function pointer: void far (*reset)(); In order for fweave to treat `far' like a reserved word in C (or any of the language supported by FWEB), say @f far int somewhere in your source. Weave does not by default recognize `|far|' as a reserved word (this property extends to cweave as well). The formatting with `@f' is *language-specific*; it only applies to identifiers used in the language in force at the point the format statement is encountered. This feature allows a WEB programmer to invent new reserved words and/or to unreserve some reserved identifiers [M-11.12]. [21] Symbolic debugging of FWEB files? ======================================= FWEB inserts sync lines `#line 137 foo.web' into the code, so any compiler/debugger worth its money should respect them. (Including those running under MS-DOS.) Extra FWEB comments in the tangled output can be suppressed by a simple command line switch. See [M-14.2] for a list of command line options. NB: well thought out code needs less time debugging - comments like "since I've started using anyWEB, my debugger has just been collecting dust ..." were reported from many people on the list. [22] Inserting meta-comments in FWEB files? ============================================ Johannes Muller reported strange output from fweave when defining two macros "debug" and "gubed" to enclose optional code for debugging purposes. As his global language, he chose C++. @m debug @( @m gubed @) @f debug do @f gubed while This worked fine for him using WEB with Pascal. `@(' and `@)' are control codes which mark the begin and end of a "meta-comment", i.e. commented out code that will appear in the output file [M-11.38]. Though I wasn't able to reproduce his errors, it should be remarked that the preferred way is to use the WEB preprocessor construction `@#if(0) ... @#endif' instead. JAK: "That Muller's example doesn't work probably points out a problem with the macro preprocessor". For debugging purposes, one can bracket pieces of code by `@#ifdef DEBUG ... @#endif', switching on DEBUG by the commandline flag `-mDEBUG' for ftangle [M-7.5]. [23] Automatic referencing in documentation sections? ====================================================== To produce the woven output For info on porting, see section 5 As Steve Avery reported, you can cheat and, somewhere after you start the module, just throw in something like `\let\refporting=\modno' and then reference it by `see section~\refporting'. In FWEB, `\modno' is set to the number of the module being typeset. Another way to refer to a section is described in [M-19.7.18]: @ Porting. \modlabel{PORTING} ... more ... @ Another section. \modlabel{ANOTHER} For info on Porting, see \WEBsection{PORTING}. `section' is inserted automagically. In the same fashion, the label `ANOTHER' allows the user to refer to that section number. In LaTeX, forward referencing works, in Plain TeX it doesn't. Unless you're using LaTeX, the latter recipe requires that `\modlabel{ANOTHER}' is defined before referring to it. If you want to say "module" instead of "section", use `\WEBmodule' (or equivalently `\module') instead of `\WEBsection'. [24] How do I make a title appear on the contents page? ======================================================== Bart Childs contributed three short files to solve that problem. These listings will disappear here once the full `web-mode.el' distribution (*note FWEB with the GNU Emacs editor?: Question 18.) is available at `FILESERV': * `limbo.material' may be used as the initial skeleton for all WEB files. There is a line containing `\def\title' which should be modified to include the `title'. Also note that the first few lines are to encourage a little more documentation about the source. A few lines further into this is a similar convenience to add an abstract that will appear on the cover page too. * `limbo.sty' is a convenient place to record macros that are commonly used in WEB files. * `time.tex', required by `limbo.material'. Note that the `limbo' style-file parameter can be used to automatically insert common material into the limbo section of an FWEB file. `limbo.material' ----------------- ----------------------- limbo.material ------------------ % % ??????.web, ?fweb version 1.23 % Author % Address % e-mail and phone % % LIMBO MATERIAL % \input limbo.sty \def\title{{\tt }} %% Comment the previous and uncomment this if you don't use web-mode %%\def\title{{\tt ?? I need a Title ??}} %%% begin Bottom of Contents Page macro \def\botofcontents{\vskip 0pt plus 1fil minus 1.5in {\bigskip\parskip6pt plus2pt \parindent20pt %% begin abstract \vskip0.5in \noindent{\bf Abstract. }\it }%% end abstract %% BC often puts this in as a comment about pre-release versions ... %\vskip0.5in %{\vfill\it %% comments on anything else ???? % %\vfil}% end of comments on anything else \vfil \rightline{My Name}% You can personalize your output here, for example. \rightline{\today }% today.tex should be preloaded, input it if not \rightline{\miltime }% time.tex should be preloaded, input it if not }% end of botofcontents % END OF LIMBO MATERIAL % % % BEGINNING OF WEB % %% Delete the next line after appropriate substitution. %% In fweb's you want an @c, @c++, @n, @n9, or @Lx at this point @* First Module. @* Index. `limbo.sty' ------------ ------------------------ limbo.sty ------------------------- % \input today %%%%% How Ridiculous, preload it!!!!!!!!! \font\ninett=cmtt9 \font\ninerm=cmr9 \let\mc=\ninerm % medium caps for names like UNIX \font\Csc=cmcsc10 % Computer Modern Computer Small Caps \def\PASCAL{{\rm Pascal}}% Does very little \def\WEB{{\ninett WEB}}% use like \WEB{} to make space significant \let\web=\WEB \def\FWEB{{\ninett FWEB}} \let\fweb=\FWEB \def\Fortran{{\Csc Fortran}} \def\Cee{{\bf C}} \def\Unix{{\mc UNIX}} \let\unix=\Unix \def\BSl{{\rm\char'134}} \def\<{$\langle\,$} \def\>{$\,\rangle$} % %%% begin Top of Contents Page macro % \def\topofcontents{\hsize 6in \vglue -30pt plus 1fil minus 1.5in \centerline{\title} \vskip 15pt \centerline{\today} \bigskip \vfill \def\?##1]{\hbox to 1in{\hfil##1.\ }}}% end of topofcontents `time.tex' ----------- -------------------------- time.tex ---------------------- \newcount\milhours\newcount\minutes\newcount\hours \def\thetime{\milhours=\time \divide\milhours by 60 \minutes=\milhours \multiply \minutes by -60 \advance\minutes by \time \hours=\time \divide\hours by 60 \ifnum \hours>12 \advance \hours by -12 \fi \the\hours:\ifnum \minutes > 9 \the\minutes \else 0\the\minutes \fi} \def\miltime{\milhours=\time \divide\milhours by 60 \minutes=\milhours \multiply \minutes by -60 \advance\minutes by \time \the\milhours:\ifnum\minutes>9 \the\minutes\else 0\the\minutes \fi} [25] Key differences for FWEB on different systems? ==================================================== The machine dependent files, especially `custom.h' and `defaults.mk' necessary for bootstrapping, can be found in the current distribution of FWEB (v1.23a) in subdirectory `/boot/'. See the `READ_ME.*' files there for details. To run FWEB, commonly used options can be put into an initialization file [M-14.3] (default name `.fweb'). The subdir's of `/boot/' contain sample `.fweb' files with necessary commandline options for the system on which FWEB was built. [26] Why is FWEB so huge? ========================== Most of FWEB's size can be attributed to the need of supporting vastly different languages. The input routines for a free form language are not usable for Fortran and vice versa. Furthermore, FWEB has a Ratfor processor built in (which is a *big* plus, though it is not strictly related to literate programming). JAK: "Two other reasons for the large size are 1. the built-in macro preprocessor, an extended version of that for ANSI C; 2. the style-file mechanism. On the positive side, FWEB does most of its memory allocations dynamically, so one can cut down the size of various tables if necessary. Type `ftangle -Y' to find out about the current allocations; use the `-y' option to change them. The statistics option `-s' is also helpful to find out how much a job actually uses." If you do not want the Ratfor preprocessor, you can make a smaller `ftangle' with the option `LOAD\_RATFOR=0' (see the file `web/ratfor0.web' of the FWEB distribution, and [5]). [27] What is the difference between CWEB and FWEB? =================================================== See [M-19.8], Appendix H, for a short list comparing these two variants of the WEB system. [28] What is the difference between FWEB and Funnelweb? ======================================================== The following was extracted from a text by Paul Lyon (and will eventually be merged with a FAQ for Funnelweb ...): "FWEB and Funnelweb are quite distinct. FWEB is built on top of the CWEB framework; although the parser in its weave processor can do more--all of ratfor, C, C++, and (though the support is not complete), TeX, it is still confined to those specific languages, and still imposes on the user the formatting conventions that please its author. To get something different you will have to hack the weave processor. (One could possibly get somewhere by modifying the TeX macro package that FWEB uses, but that might be the harder way to go, unless, of course, you are already a TeXpert) ... Funnelweb, on the other hand, does not try to parse the "source" code at all; it just takes the layout of the source as written, turns off the meaning of plain TeX special characters, sets typewriter font, and then invokes `\obeylines' and `\obeyspaces'; all this together causes TeX to print the source verbatim (the paragraph formatting is turned off, and TeX does not gobble spaces). The original WEB, CWEB, FWEB, and Spiderweb all parse and format the source, inserting TeX math codes for the operators, putting keywords in boldfont, adjusting the indentation, and so on. If you like the style chosen for the programme, it looks much nicer that way. Except for Spiderweb, which can be adapted to various languages by allowing a fair range of variation in specifying the pretty printing grammar using a large `awk' script to process the grammar spec and generate replacement code for significant chunks of weave, the pretty printing parser(s) in the other are hard coded. This has it uses besides making the typeset code more attractive; WEB, CWEB, FWEB, and Spiderweb all do an index of identifiers for the code that can differentiate, for the most part, between declaration and use of an identifier (they know enough about the grammar to do that, but not, of course, as much as a compiler or interpreter) ..." [Rest deleted: continues with more details on Funnelweb.] JAK: "Don't hack `fweave'! Many effects can be obtained by modifying `fwebmac.sty'. (If one knows enough to hack `fweave', he presumably knows enough to hack `fwebmac.sty' instead.) Note that the style-file mechanism does provide some degree of customization." Please report customizations that are really necessary to John Krommes. [29] Do FWEB files necessarily have to be monolithic? ====================================================== [Later, this item might move to the general FAQ by David B. Thompson] There is no real support for multiple source files under FWEB. What some might like to see is a solution similar to the one presented by Cameron Smith in his `KR-CWEB-SAMPLE' distribution. He had to hack CWEB's `cwebmac.sty' to get a neat table of contents and a combined index distinguishing between entries from different source files [in fact, `KR-CWEB-SAMPLE' illustrates many more things, all more or less related to breaking up a literate C program into multiple source files]. For illustration, this is how the table of contents should look like (sample from Cameron's files): source module 1: main Sect Page introduction..................1.1 1.1 main pgm......................1.4 1.2 index.........................1.10 1.4 source module 2: getop introduction..................2.1 2.1 etc. while entries of the combined index are separated like Index for source module 1: main ... Index for source module 2: getop ... ... Sections in source module 1: main used in section 4... ... For FWEB, the inclusion of files using `@i' is a partial solution [M-11-13] to avoid having to put all the source code in one file. So far, nobody has presented a solution in Cameron's spirit. This feature is put on JAK's list of possible future enhancements. It will not be in c1.30, though. Note that CWEB has got an `@i' option, too (although FWEB's is somewhat more general). Yet another approach (not limited to FWEB) is the use of a "smart" editor like GNU Emacs, combined with a "smart" tool like `web-mode' which is effectively hiding many of the mischiefs of monolithic source files from the programmer. (*note FWEB with the GNU Emacs editor?: Question 18.). [30] How did tangle and weave get their names? =============================================== [Later, this item might move to the general FAQ by David B. Thompson] In a reply, Cameron Smith wrote: "One of the problems with having a single preeminent writer in a language is that everyone always assumes that any enduring tidbit came from his pen ...". Fortunately, for the question "How did tangle and weave get their names", the circulus vitiosus of erroneously quoting William Shakespeare could be broken. The full answer: O, what a tangled web we weave When first we practise to deceive! -- Sir Walter Scott, _Marmion_, canto 6, verse xvii (1808) Cameron also suggested to include these lines by Richard Palais (1982): O, what a tangled WEB we weave When TeX we practise to conceive! Concerning FWEB, JAK reluctantly remarks [M-1]: "We shall call this new version FWEB when necessary ...". And more recently: "I now think the choice of `F' in FWEB was a mistake. `F' stands for Fortran, which motivated this project, but the ability of FWEB to handle multiple languages is one of its most distinctive and useful features. But it's probably too late now." The question to which extent "WEB" inherits from certain German words I'll leave to the native speakers (with a light heart). [31] How am I supposed to abbreviate "Literate Programming"? ============================================================= [Later, this item might move to the general FAQ by David B. Thompson.] There wasn't a clean vote on the mailing list. Most people seemed to agree that one should not misuse common abbreviations like "LP", "LPR" etc. Also, the acronym should be pronounceable (thus eliminating "LitPgm" e.g.). The list's name "LitProg", proposed by Cameron Smith, seems to be accepted by a majority now. This is also the acronym adopted for the FAQ list. General Questions/Bugs/Problems ******************************** [32] What if I think I found a bug in FWEB? ============================================ John Krommes actively supports FWEB -- he must be considered the ultimate source of wisdom. Once you think you've found a bug, put it out on the list. If nobody responds, cut your file down to the smallest subfile that still exhibits the problem you encountered. Then you may contact John. [33] Problem opening a new output file for tangled code? ========================================================= If you're using FWEB's `@o' option in order to open a new output file for tangled code (with local scope - i.e. for the duration of the current section only [M-11.21]), you may see output looking like this: > ftangle test This is ScRaMbLeD FTANGLE [SunOS/UNIX version 1.23a (April 13, 1992)]. Reading test.web ... *1 *4 *6 Writing the output file(s): (test.c)(getop.hQmSWs) Done. CPU = 0.3 sec.; REAL = 0.8 sec. CPU/REAL = 45.0%. [FTANGLE: No errors were found.] with spurious characters in the output file names. This is a bug which will be fixed in FWEB version 1.23b as promised in the `README' file of the FWEB distribution v1.23a. Preliminary Bug Report ...................... Aside the list, Don Petcher reports a more specific version of the problem (this seems to affect both the local `@o' and the global scope command `@O'): If you change output files with the `@O' command (or the `@o' command) and the second filename is shorter than the first, then the second filename gets spurious characters added. E.g. creating `*.cc' files and `*.h' files, the `*.h' file always gets an extra character after the first writing to the `*.cc' file. A temporary cludge is obvious - add an extra character to the `*' part of the `*.h' file. So your file names don't go together well, but you escape the problem. It now seems as if this bug is pretty much machine dependent. The recipe pointed out in the last edition of this list, adding characters to the name part of the secondary output file, only works for Don Petcher on his NeXT workstation. Stirred up by Johannes' complaint Don and I tried a couple of silly programs on his NeXT, on a HP9000, on an Apollo 700, on a Sun-4 and on a Silicon Graphics workstation (SGI). The result was that none of the machines behaves the same for the programs we tried. The Apollo did not exhibit the bug at all, for the NeXT Don's cludge works. The HP accepts output file names "g" and "g." but produces spurious characters for "g.h" - the Sun only accepts "g" but not "g." and "g.h". The SGI exhibits the error if the filename contains more than one underscore or if the filename is longer than six letters. JAK: "I think this is fixed. I will attempt to thoroughly test this out before releasing v1.30." [34] Maximum number of equal characters in different section names? ==================================================================== FWEB may have problems distinguishing section names, if one of them is an exact subset of a longer name rather than a length. This is a bug in the mind of some, but it may as well be regarded a good "feature" as it should be a warning that poor choices of names has happened. JAK: "I think it's a feature, not a bug. And unless I screwed something up, the behavior derives from CWEB." [35] Must I leave leading blanks in my fortran FWEB file? ========================================================== Yes, you should. This is proven by the following example coming from Bart Childs. @n @* The world is not perfect. This wonderfully short problem blows outputs garbage from fweave and ftangle if you don't have the leading six columns blank. Be careful, because in many cases FWEB works fine without the requisite leading blanks. @a program final_exam implicit none integer i, j do i = 1, 7, 2 do j = 6, 1, -1 write(*,*) i, j end do end do end To see the effect on fweave, indent with 4 leading blank spaces instead of 6. JAK: "The input reader for Fortran--77 *follows the rules* of Fortran--77--i.e., statement labels in columns 1--5, continuation character in column 6, columns 6--72 for code. However, note that Ratfor uses free-form syntax, and Fortran--90 also has a free-form syntax mode, which FWEB attempts to support." Index ****** * Menu: * #line: Question 21. * -PL, select pre-processor LaTeX: Question 13. * -s, FWEB statistics option: Question 26. * .fweb: Question 13. * /anonymous@lyman.pppl.gov/pub/fweb/v1.23: Question 8. * /anonymous@niord.shsu.edu/FILESERV/FWEB: Question 8. * @(: Question 22. * @): Question 22. * @f: Question 20. * @O: Question 33. * @o: Question 33. * @|, in LaTeX verbatim: Question 13. * AMSTeX: Question 13. * anonymous FTP: Question 3. * anonymous FTP: Question 8. * anonymous@dione.rz.uni-osnabrueck.de: Question 10. * anonymous@ftp.imada.ou.dk/pub/faq: Question 3. * anonymous@ftp.uni-stuttgart.de: Question 10. * anonymous@ftp.uni-stuttgart.de/pub/soft/tex/web/fweb: Question 3. * anonymous@lyman.pppl.gov: Question 10. * anonymous@niord.shsu.edu/FILESERV/FWEB: Question 3. * anonymous@niord.shsu.edu/[FILESERV.PC-WEB]: Question 10. * ANSI C: Question 12. * Appendix H: Question 27. * Archive-Date: Question 6. * Bart Childs : Question 34. * Bart Childs : Acknowledgements. * Bart Childs : Question 13. * Bart Childs : Question 24. * Bart Childs : Question 18. * Bugs: Question 32. * Bugs: General Questions/Bugs/Problems. * C: Question 1. * C++: Question 16. * C++: Question 1. * Cameron Smith : Question 30. * Cameron Smith : Question 29. * Change files: Question 18. * Command line options: Question 21. * Contents page: Question 24. * CWEB: Question 1. * CWEB: Question 16. * CWEB, @i option in: Question 29. * D.E. Knuth (DEK): Question 1. * David Thompson : Question 1. * David Thompson : Acknowledgements. * Debugger: Question 21. * Debugging: Question 22. * DEK (Donald E. Knuth): Question 1. * Design contributions: Question 1. * Distinguishing section names: Question 34. * Don Petcher : Question 33. * Don Petcher : Question 19. * Don Petcher : Acknowledgements. * Double sided pagination: Question 19. * FAQ for FWEB: Question 6. * FAQ Writer's Guide: Question 6. * FAQ, General: Question 6. * FILESERV: Question 6. * Floating bodies: Question 13. * Footnotes in LaTeX: Question 15. * Formatting: Question 1. * Fortran: Question 1. * Fortran--77: Question 35. * Fortran--90: Question 35. * Fortran90: Question 1. * Ftangle: Question 33. * ftangle, change allocation: Question 26. * ftangle, current allocation: Question 26. * ftn.sty: Question 15. * Function pointer: Question 20. * fweave: Question 28. * FWEB executables: Question 26. * FWEB for the PC: Question 10. * FWEB for the PC, precompiled files: Question 10. * FWEB sources: FWEB sources/Manual/Installation. * FWEB User's Manual: Top. * FWEB User's Manual, quoting: Question 5. * FWEB, future enhancements: Question 29. * FWEB, latest version: Question 9. * FWEB, painful work with: Question 11. * FWEB, v1.30-beta: Question 9. * fweb-faq: Question 6. * fweb-faq.dvi: Question 4. * fweb-faq.info: Question 4. * fweb-faq.ps: Question 4. * fweb-faq.texi: Question 4. * fwebmac.sty: Question 28. * fwebmac.sty: Question 19. * GCC: Question 12. * gcc-2.2.2: Question 11. * General Questions: General Questions/Bugs/Problems. * George D. Greenwade : Question 6. * Global scope: Question 33. * GNU C compiler (GCC): Question 1. * GNU Emacs editor: Question 18. * GNU Emacs editor: Question 4. * Hans-Hermann Bode : Question 10. * Hewlett-Packard: Question 12. * How can I contribute?: Question 6. * HP: Question 12. * Ian Kluft : Question 6. * Initialization file: Question 13. * Intel 80386: Question 11. * Introduction and Editorial: Introduction and Editorial. * JAK (John A. Krommes): Top. * JAK (John A. Krommes): Question 29. * JAK, quoted: Question 9. * JAK, quoted: Question 22. * JAK, quoted: Question 11. * JAK, quoted: Question 34. * JAK, quoted: Question 1. * JAK, quoted: Question 35. * JAK, quoted: Question 33. * JAK, quoted: Question 28. * Joachim Schrod : Acknowledgements. * Johannes Muller : Acknowledgements. * Johannes Muller : Question 22. * John A. Krommes (JAK): Top. * John Krommes : Question 11. * John Krommes : Question 1. * John Krommes : Question 32. * John Krommes : Acknowledgements. * Journal files: Question 18. * Language-specific: Question 20. * LaTeX: Question 13. * Lewis Perin : Question 15. * Lewis Perin : Question 14. * lex: Question 14. * limbo, style-file parameter: Question 24. * limbo.material: limbo.material. * limbo.material: Question 24. * limbo.sty: Question 24. * limbo.sty: limbo.sty. * linux-096c: Question 11. * Literate Programming, abbreviation for: Question 31. * LitProg Mailing List: Top. * LitProg-Request@shsu.edu: Question 2. * Local scope: Question 33. * Macro preprocessor: Question 1. * Macro preprocessor: Question 22. * mail-server@rtfm.mit.edu: Question 8. * Make: Question 12. * Makefile: Question 6. * Makefile: Question 17. * Makefiles, FWEB support: Question 17. * Marcus Speh : Top. * Mark Motl : Question 18. * Marmion, canto 6, verse xvii: Question 30. * Meta-comment: Question 22. * Microsoft C 6.00: Question 11. * MS-DOS: Question 21. * Multilingual WEB variant: Question 1. * Nathan Torkington : Question 6. * Native speaker: Question 30. * Nelson H. F. Beebe : Question 1. * niord.shsu.edu/FILESERV/LITPROG: Top. * Object-Oriented Literate Programming: Question 16. * Paul Lyon : Question 28. * PC: Question 1. * prep.ai.mit.edu:/pub/gnu: Question 4. * Programming, Literate (!): Question 1. * Question for the General FAQ: Question 1. * Question for the General FAQ: Question 31. * Question for the General FAQ: Question 29. * Question for the General FAQ: Question 30. * Ratfor: Question 1. * Ratfor: Question 35. * Ratfor processor: Question 26. * README.fweb-faq: Question 4. * Referencing: Question 23. * Reserved words: Question 20. * Richard Palais: Question 30. * Robert J. Chassell : Acknowledgements. * Sam Houston State University: Question 6. * Section names, referencing of: Question 23. * Silvio Levy : Question 1. * Silvio Levy : Question 16. * Sir Walter Scott : Question 30. * Steve Avery : Question 23. * SUBSCRIBE LITPROG: Question 2. * support porting FWEB: Question 11. * Sync lines: Question 21. * table: Question 13. * tabular: Question 13. * Tangle: Question 16. * Tero Laakkonen : Question 11. * TeX: Question 1. * Texinfo system: Question 4. * Thorbjoern Ravn Andersen : Acknowledgements. * Thorsten Ohl : Acknowledgements. * time.tex: Question 24. * time.tex: time.tex. * Title: Question 24. * Titlepage: Question 24. * To-do-list: Question 7. * Turbo C: Question 11. * UNIX: Question 1. * version 1.23b: Question 33. * VMS: Question 1. * Weave: Question 20. * WEB: Question 1. * WEB preprocessor: Question 22. * web-mode.el: Question 18. * William Shakespeare: Question 30. * yacc: Question 14. * Zdenek Wagner : Question 15. * [M-10.2]: Question 17. * [M-11.12]: Question 20. * [M-11.21]: Question 33. * [M-11.38]: Question 22. * [M-14.2]: Question 21. * [M-19.7.18]: Question 23. * [M-19.7.22]: Question 13. * [M-19.8]: Question 27. * [M-1]: Question 1. * [M-2.4]: Question 1. * [M-7.5]: Question 22. * \footnote, LaTeX: Question 15. * \identicalpageheadstrue: Question 19. * \modlabel: Question 23. * \output: Question 13. * \ref: Question 23. * \WEBsection: Question 23. * |, in LaTeX verbatim: Question 13.