-*-Text-*- % This file, README.AMIGA, is part of CWEB-p. % The CWEB programs by Silvio Levy are based on programs by D. E. Knuth. % ANSI-C conforming changes and Turbo-C++ implementation are made by % Hans-Hermann Bode , additional support for other % ANSI-C compilers (e.g. c89) provided by Klaus Guntermann % . % Additional support of the SAS/C 6.0 compiler on AMIGA provided by % Andreas Scherer (sorry, no e-mail) based on ideas of Carsten Steger. % The programs are distributed WITHOUT ANY WARRANTY, express or implied. % This readme file last updated March 16th 1993 by Andreas Scherer. % Copyright (C) 1987,1990,1992 Silvio Levy and Donald E. Knuth % Copyright (C) 1991,1992 Hans-Hermann Bode % Copyright (C) 1992 Klaus Guntermann % Copyright (C) 1993 Andreas Scherer % Permission is granted to make and distribute verbatim copies of this % document provided that the copyright notice and this permission notice % are preserved on all copies. % Permission is granted to copy and distribute modified versions of this % document under the conditions for verbatim copying, provided that the % entire resulting derived work is distributed under the terms of a % permission notice identical to this one. % Please send comments, suggestions, etc. concerning to the original CWEB to % levy@math.berkeley.edu. % Send suggestions and complaints concerning to the ANSI-C/Turbo-C++ % implementation to HHBODE@DOSUNI1.BITNET. % Send suggestions and complaints concerning to the SAS/C 6.0 % implementation to Andreas Scherer, % Abt-Wolf-Straße 17, 96215 Lichtenfels, Federal Republic of Germany This is the ANSI-C/Turbo-C++ implementation of Silvio Levy's and Donald E. Knuth's CWEB system, compiled and provided with changefiles for ANSI C and Turbo C++ and a makefile for Turbo Make by Hans-Hermann Bode, including additional changes to improve support of ANSI-C compilers and a makefile for c89 by Klaus Guntermann, and including additional changes to support the SAS/C 6.0 compiler on AMIGA. Note that the changes for the Turbo-C++ compiler are made conditional (they will become effective only if the symbol __TURBOC__ is defined, which automatically is the case when compiled with Turbo C++), so users of other systems with ANSI-C compilers might be able to compile the sources without editing. This directory contains the following files from the original CWEB distribution (`.' denotes the local directory): ./makefile.org makefile from the original distribution ./readme.org readme file from the original distribution ./common.h header file to be included in ctangle.w and cweave.w ./common.w common code for ctangle and cweave ./ctangle.w the tangle processor ./cweave.w the weave processor ./cweb.1 manual page (nroff format) ./cweb.el elisp file for GNU Emacs ./cwebmac.tex macros for formatting ./cwebman.tex the user manual ./prod.w production rules to be included in cweave.w ./examples directory containing examples of CWEB programming ./examples/wc.w - UNIX word-count utility ./examples/treeprint.w - tree-structured directory lister by Norman Ramsey ./examples/wmerge.w - WEB-like file merger by Silvio Levy ./examples/extex.w - spellchecking filter for TeX and CWEB by Don Knuth ./examples/wordtest.w - spellchecker by Don Knuth ./examples/xlib_types.w - include file for XView programs ./examples/xview_types.w- ditto ./examples/kspell.el - Emacs interface to extex/wordtest ./examples/makefile - generic makefile for CWEB applications ./examples/readme - readme file from the examples directory Note that the changefiles provided in the original distribution for vms are removed here. The following files are added in this distribution: general: ./cweb.man manual page (ASCII format) ./common-p.hch change file for common.h ./common-p.ch change file for common.w ./ctangl-p.ch change file for ctangle.w ./cweave-p.ch change file for cweave.w ./prod-p.ch change file for prod.w ./ccwebmac.ch change file for cwebmac.tex (including C++ macros) ./ccwebmacg.ch change file for cwebmac.tex (including German macros) ./cwebmang.ch change file for cwebman.tex ./common-p.h WMERGEd product of common.h and common-p.hch ./prod-p.w WMERGEd product of prod.w and prod-p.ch ./ccwebmac.tex WMERGEd product of cwebmac.tex and ccwebmac.ch ./ccwebmacg.tex WMERGEd product of cwebmac.tex and ccwebmacg.ch ./cwebmang.tex WMERGEd product of cwebman.tex and cwebmang.ch ./common.c CTANGLEd product of common.w and common-p.ch ./ctangle.c CTANGLEd product of ctangle.w and ctangl-p.ch ./examples/wmerge-p.ch change file for wmerge.w ./examples/wmerge.c CTANGLEd product of wmerge.w and wmerge-p.ch special for users of c89 or other ANSI C compilers: ./makefile.c89 makefile for c89 ./readme.c89 this file for users of c89 special for PC users: ./makefile.pc makefile for Turbo C++ ./readme.pc informations for PC users special for AMIGA users: ./readme.amiga informations for AMIGA users ./makefile.amiga makefile for SAS/C 6.0 ./ctangle executable tangle processor, ANSI-C/SAS-C version ./cweave executable weave processor, ANSI-C/SAS-C version ./examples/wmerge executable WEB merge program, ANSI-C/SAS-C version ./examples/wmerge.lnk LINKFILE for SAS/C compiler Please note that most examples have not been converted to ANSI C yet. The additional files with extensions .h, .w, .tex, and .c are reproducable from the other sources by means of an executable WMERGE, CTANGLE, and an ANSI-C compiler. Before starting, you should run cwebman.tex (needs cwebmac.tex!) through TeX and print out the manual. If you are not going to use this distribution on a AMIGA, you can reclaim some disk space by removing all AMIGA related files. You will have to compile the binaries using your ANSI-C compiler. Make sure, that the files you got are in proper format (if you took them from a ZIP archive, line ends might still contain carriage return and linefeed characters, which may not be appropriate for your operating system). How to create the binaries: 1. Rename the makefile.amiga to Makefile or SMakefile, for use with SMake. Note that makefile.org is lacking some dependencies, so better start from makefile.c89 when on a Un*x system. 2. If your compiler is not named SC, you have to change the CC definition to the proper call in the Makefile, e.g. for the ANSI-C version of gcc use CC = gcc -ansi Check also the other lines in Makefile so that all directory definitions are set properly for your local system and configuration. 3. Touch common.c, ctangle.c, and examples/wmerge.c to make them up-to-date. To make ctangle, cweave and the wmerge processor say `make all'; this should produce actions similar to the following, possibly with harmless warning messages from the compiler, and e.g. the options and the name of the compiler may be as modified in Makefile: sc define=DEBUG define=STAT nolink ctangle.c sc define=DEBUG define=STAT nolink common.c slink FROM $(OBJS) ctangle.o TO ctangle LIB $(LIBS) ./ctangle cweave cweave-p.ch sc define=DEBUG define=STAT code=FAR nolink cweave.c slink FROM $(OBJS) cweave.o TO cweave LIB $(LIBS) (cd examples; sc define=DEBUG define=STAT link wmerge.c) To get some reassurance that things are OK, you can say `make cautiously', which ensures that CTANGLE will reproduce itself. (Otherwise the source files common.w and ctangle.w won't actually have been used.) To install cweave, ctangle, wmerge, ccwebmac.tex, the manual page, and an emacs macro file, say `make install'. You may also decide to move the files manually to their proper places. See the Makefile for details, what to move, and for suggestions, where to move it. Incidentally, if you try the recompilation with another compiler, you may have no luck without changing the sources. In this case, it is necessary to do all the required changes in the .c file first, until you can compile ctangle.c and common.c. But it is necessary then, to add the same modifications to the change file. Finally processing ctangle.w and the extended change file for ctangle with the modified ctangle will create the same contents as the manual modifications. If such changes are needed for a common compiler, please notify the authors about this and send the extended changes. 4. Do not edit one of the .w files under any circumstances. Do all modifications in the associated .ch files, but keep in mind that you'll need a working ctangle processor to generate the updated .c files. Furthermore, do not edit common.h, prod.w, or cwebmac.tex. Make your modifications to common-p.hch, prod-p.ch, or ccwebmac.ch instead. To incorporate the changes you will need a working wmerge program. This will be prepared when ctangle and cweave are created. There is a tangled wmerge.c also in case you don't have a working ctangle processor so far. 5. If you want a full documentation of the tangle and weave programs, type `make doc'. The documentation created will include the changes needed for the ANSI-C/C++ extensions. 6. To delete all intermediate files created in the make processes say `make clean'. 7. The weave and tangle processors now recognize a CWEBINCLUDE environment variable if common.c is compiled with INCLUDEDIR defined (which is the default in makefile.c89 and makefile.amiga). When an include file (@i command) cannot be found in the current or given directory, its name (completely as given!) is prefixed by the contents of CWEBINCLUDE and a second try is made. A multi-path search is not supported yet, i.e., CWEBINCLUDE---if not empty---must contain a single path name and must end with a `/'. Example in (Bourne-)sh or ksh: CWEBINCLUDE=/usr/local/lib/cweb/ export CWEBINCLUDE Furthermore, the file name in an @i command should never indicate an absolute path, otherwise the mechanism described above will not work. 8. The tangle and weave processors of this implementation are able to process traditional C, ANSI C, and C++. The latter feature, however, is just a first attempt, i.e., most C++ sources should be handled satisfactory, but some C++ constructions may yield unpleasant results in typesetting by CWEAVE. If you encounter problems, send a report to HHBODE@DOSUNI1.BITNET. Note that CTANGLE always uses a default extension .c for its output file; this may not be appropriate for C++ compilers, but you can work around this by supplying a third argument in the command line (see cwebman). 9. You can define a font for comments in the C part of the modules by means of the \cmntfont macro. It defaults to \tenss, i.e., ten-point sans-serif; if you don't like this, say, e.g., \let\cmntfont=\tenrm to get a ten-point roman comment font or whatever. This command should be placed in the limbo section of your sources or in your own version of ccwebmac.tex.