The CWEBx distribution

The CWEBx system is a system for Structured Software Documentation (also known as Literate Programming) in the programming language C. It is a derivative of the CWEB system by Sylvio Levy and Donald E. Knuth, who originally conceived the idea of Literate Programming; CWEBx is a compatible extension of CWEB.

The CWEBx distribution is distributed as a gzipped tar archive. There is a summary of changes with respect to the previous release called CWEB 3.x, and the announcement as posted on the news group comp.programming.literate. More documentation is available in the distribution itself.


Due to the origins of CWEBx as an adaptation of CWEB, distribution is bound by the copyright of that software, and the time (around 1993) when the adaptation was made. The relevant copyright message reads
Copyright (C) 1987,1990 Silvio Levy and Donald E. Knuth

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.

The distrubution of CWEBx adds copyright lines for modifications made, but in accordance to the stipulation, no changes are made to the permission notice.


Before you can use CWEBx, you must have an (ANSI) C-compiler installed, as well as the TeX system for document preparation (a very basic installation suffices; no LaTeX or special fonts are required).

About Literate Programming

Very briefly, literate programming is a methodology to write computer programs in such a way that they not only instruct the computer how to perform some task, but also explain to you, and other people, how and why the computer does what it is expected to do (or, if you are less fortunate, to help you find out why it doesn't). Literate programming allows you to include explanations not only at the level of single statements, as traditional comments do, and at the global level, as documents accompanying the software can, but also at every intermediate level. This is achieved by breaking up a program into small pieces according to its logical (as opposed to textual) structure, and to present these pieces, each accompanied by an explanatory text, in an order most suited to understanding the design of the program; the result has some resemblance to a hypertext document (the use of the term WEB has the same connotation as in WorldWide Web, but its use in connection with literate programming dates back much further). Take a look at the sample program from the CWEBx manual to see what the resulting program (or actually, the document describing it) looks like; then look at the source for the sample program for comparison.

Marc van Leeuwen.