% This file generates the user manual; TeX it, don't read it!

\def\tangref{3} % where the main explanation of CTANGLing is given
\input cwebmac
\def\page{\box255 } \normalbottom
\parskip 0pt plus 1pt
\def\RA{\char'31 } % right arrow
\def\hang{\hangindent 4em\ignorespaces}
\font\eightrm=cmr8
\font\ninerm=cmr9
\font\ninett=cmtt9
\font\eighttt=cmtt8
\font\twelvett=cmtt12
\font\quoterm=cmssq8
\font\quoteit=cmssqi8
\font\authorfont=cmr12
\font\sectionfont=cmbx12

\def\pb{\.{|...|}}
\def\v{\.{\char'174}} % vertical (|) in typewriter font
\def\lpile{\def\cr{\hfill\endline}\matrix} % I only use \lpile by itself
\abovedisplayskip=.5\abovedisplayskip
\belowdisplayskip=.5\belowdisplayskip
\abovedisplayshortskip=.5\abovedisplayshortskip
\belowdisplayshortskip=.5\belowdisplayshortskip
\advance\baselineskip by -.5pt
\advance\pageheight by \baselineskip % the manual just got a bit longer
\advance\fullpageheight by \baselineskip
\setpage

\outer\def\section #1.{\penalty-500\bigskip
        \centerline{\sectionfont\def\.##1{{\twelvett##1}} #1}\nobreak\vskip 6pt
        \everypar{\hskip-\parindent\everypar{}}}

\def\lheader{\mainfont\the\pageno\hfill\sc\runninghead\hfill}
\def\rheader{\hfill\sc\runninghead\hfill\mainfont\the\pageno}
\def\runninghead{����������� ������������ {\tentt CWEB} (������ 3.0)}

% This verbatim mode assumes that ! marks are !! in the text being copied.
\def\verbatim{\begingroup
  \def\do##1{\catcode`##1=12 } \dospecials
  \parskip 0pt \parindent 0pt \let\!=!
  \catcode`\ =13 \catcode`\^^M=13
  \tt \catcode`\!=0 \verbatimdefs \verbatimgobble}
{\catcode`\^^M=13{\catcode`\ =13\gdef\verbatimdefs{\def^^M{\ \par}\let =\ }} %
  \gdef\verbatimgobble#1^^M{}}

\null\vfill
\centerline{\titlefont The {\ttitlefont CWEB} System of
    Structured Documentation}
\vskip 18pt\centerline{(Version 3.0)}
\vskip 24pt
\centerline{\authorfont Donald E. Knuth and Silvio Levy}
\vfill

\noindent
\TeX\ is a trademark of the American Mathematical Society.

\bigskip\noindent
The printed form of this manual is copyright \copyright\ 1994
  by Addison-Wesley Publishing Company, Inc.  All rights reserved.
\smallskip\noindent
The electronic form is copyright \copyright\ 1987, 1990, 1993
  by Silvio Levy and Donald E. Knuth.
\smallskip\noindent
The russian translation is copyright \copyright\ 1999
  by Sergey V. Korop \.{<svk@lib.ru>}

\bigskip\noindent
Permission is granted to make and distribute verbatim copies of the
electronic form of this document provided that the electronic copyright
notice and this permission notice are preserved on all copies.

\smallskip\noindent
Permission is granted to copy and distribute modified versions of the
electronic form 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.

\smallskip\noindent
Individuals may make copies of the documentation from the electronic files
for their own personal use.

\pageno=0 \titletrue\eject

\null\vfill
\centerline{\titlefont 񈑒��� ������������ ���������������� {\ttitlefont CWEB}}
\vskip 18pt\centerline{(⅐��� 3.0)}
\vskip 24pt
\centerline{\authorfont 䎍���� �. ꍓ� � 񈋜��� 녂�}
\vfill

\noindent
\TeX\ �������� �������� ������ American Mathematical Society.

\bigskip\noindent
\copyright\ 1994. ���� �� ������� ����� ����������� ��������
Addison-Wesley Publishing Company, Inc.  ⑅ ����� ���������.
\smallskip\noindent
\copyright\ 1987, 1990, 1993. �� �� ����������� ����� �����
�����������  ����������� 񈋜��� 녂� � 䎍����� �. ꍓ��.
\smallskip\noindent
\copyright\ 1999. ���� �� ������� ����: 񅐃�� ꎐ�� \.{<svk@lib.ru>}

\bigskip\noindent
� ������ ��������� �������� �������� ������� ��������������� � �� ����������
���������, ����������� ���������� ��������.

\bigskip\noindent
Permission is granted to make and distribute verbatim copies of the
electronic form of this document provided that the electronic copyright
notice and this permission notice are preserved on all copies.


\smallskip\noindent
Permission is granted to copy and distribute modified versions of the
electronic form 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.

\smallskip\noindent
Individuals may make copies of the documentation from the electronic files
for their own personal use.

\smallskip\noindent
����������� ��������������� ������ ����� ����������� ������ ����� ���������
��� �������, ��� ��������� �� ��������� ������ �� ����������� ������
� ��� ���������� ������������ �� ���� ������.


\smallskip\noindent
����������� ��������������� ���������� ����� ����������� ������ �����
��������� �� �������� ������� �����������, � ��� �������, ��� �����������
������  ���������������� �� ��������, ���������� ����.

\smallskip\noindent
������� ���� ����� ������ ����� ������������ �� ����������� ������
��� ������� �������������.

\pageno=0 \titletrue\eject


\titletrue
\centerline{\titlefont 񈑒��� ������������ ���������������� {\ttitlefont CWEB}}


\vskip 15pt plus 3pt minus 3pt
\centerline{\authorfont 䎍���� �. ꍓ� � 񈋜��� 녂�}

\vskip 24pt plus 3pt minus 3pt
\noindent
���� �������� �������� ��������� ������ ������� \.{WEB} �.~ꍓ��,
�������������� � ����� \CEE/ 񈋜��� 녂�. � ������� ������ �������� �
1987~�., \.{CWEB} ����������� �������� ꍓ�� � 녂� �� ������ ���
������������� � �������.  � ��������� ������ �� �������� ��� ��������
������� � ����������, �� ��� �� �����, ��������� �� �������, �����������
� ����������� ������ ���������� � ����� ������������ 녂�
(\.{levy@math.berkeley.edu}).

��������, �������� � ������������ ``The \.{WEB} System of Structured
Documentation'' ꍓ��, ����� ���� ����� ������������ � ���� ����������,
��������� \.{CWEB} � \.{WEB} ����� ����� ��������� � (� ��������)
���������. � ��������� �������� \.{CWEB} �������� ���������� \.{WEB}:
��������, \.{CWEB} �� ��������� � ���������� ����������� �������� �
��������� ����� \.{WEB}, ��������� ���� \CEE/ � ��� ������������ �����
��� ������ �� ����. ����������, ���������� \.{WEB} ������������ �������
������������ � ����������������� ����� \.{@'77} � \.{@"3f} ��������
��������� � ����� \CEE/ \.{077} � \.{0x3f}. ⑅ ������ �����������
\.{WEB} ��������� � ���������.

� �������� ���� ������������� ����, ��� ������ ����������� � �����������
���������� � ���������� \.{CWEB}. ��� ��������������� �� �������� Steve
Avery, Nelson Beebe, Hans-Hermann Bode, Klaus Guntermann, Norman Ramsey �
Joachim Schnitter, ������� ������������ ����������� ���, � ����� Cameron
Smith, �� ��������� ����������� �� ������������. Ramsey ������
"��������� ����������������" ("literate programming",---��� �. ꍓ� ��������
�������� ���������������� � �������������� \.{CWEB}---{\sl ����. �����.\/})
��������� ��� ������ ������ ����� ��������
\.{SPIDER} [��. {\sl Communications of the ACM\/ \bf32} (1989),
1051--1055].  Bode ����������� \.{CWEB} � ����� \CPLUSPLUS/, ��� ���
����� �� ������ ��� ������ �� \CEE/ ������������� � \CPLUSPLUS/.

\section ₅�����.
񓒜 ��������� \.{CWEB} � ���, ��� ������������, �������� �������� ����
��������� ��������� �������������, ������ ������������ ������������
������, �������� \TeX{}, ��� ���������� ������������ � ������, ��������
\CEE/, ��� ����������������. � ���, �� ������ ��� �� ���� ��
������������� ����� ������������, �� ������ ������� ������� ����������,
����������� ���� ����� ���������, ��� �������.

񒐓����� ������������ ��������� ����� ���� ������������, ��� ``����''
(``web'' --- ``�������''), ��������� �� ��������� ������� ��������� ������.
����� ���������������
����� ���������, ���������� ������� ������ ����� ����� � ��
��������������� � �������. 񐅄���� ��������� �������, ���������������
\TeX{}, ��������� ��� ������� ��������� ��������� ������ ����� ���������,
� �������� ���������������� ����� \CEE/ --- ��������� � ����������
��������������� ���������. ������ ��, �� �������� �����
����������������, ����������� �������������� ��������� ��������� �������
��������, � ������������ --- ������ ����������������� ���������, ��� �������
������������� �������������� �������� ������������ ��������� � ������������.

񈑒��� \.{CWEB} ������� �� ���� ��������, ��������� \.{CWEAVE} �
\.{CTANGLE}.  ���������������� � ������� \.{CWEB} ��������� �� �����
\CEE/ � ������������ � ��� ���������� � ����� �����, ����������
\.{CWEB}-����, � ������ ����� \.{something.w}. ꎌ����
`\.{cweave} \.{something}' ������� ���� \.{something.tex}, ������� �
������� \TeX{} ������������ � ������� ����������� (``pretty printed'')
������ \.{something.w},
������� ��������� ��� ������������ ����������, ����� ��� ������
��������, ������������� ��������, ��������� � ������ �������,
�������������� ��������. 䎏���������� ������������� �������� �������
������������ ������. ����������, ������� `\.{ctangle} \.{something}'
��������� ��������� �� ����� \CEE/ \.{something.c}, ������� ����� ����
��������������� � ���������� ���.

��� �������������� �������� �������� ����������������, \.{CWEB}
��������� ���� \CEE/ ������������ ������ ������� ����� ������ ���������,
��� ��� ������� ����������� ������� ����� ���� ���������� ������� �
�������� ��������� ������ � �� ��������� ������������. ������ \.{CTANGLE}
������� ��� ������, ��� ��� ����������� ������ web-��������� � �������,
��������� \CEE/; ������������� ���������������� � \.{CWEB} �������� ��,
��� ��������� ����� ���� �������� � "�����������" �����, � �������
������ ������ ����������� �������� �� ������. ������ \.{CWEAVE}, �
������������ ������ ��������, "��������" ������������ � ������ ������
\TeX � \CEE/-����� � ����������������� ��������. ⎇�����, �� ��������
�������� ������������ ``weave'' �������� ``{\it webe\/}'', �
��������������� �� ��������� ��������� --- ``{\it texe\/}''!

��������� \.{CWEB} ������ ���� ������ ������ � ������ \CEE/.
숍�������� ���������� � \TeX{} ����� ����������, �� ���������� �����
���� �������� ��� � �������� ������ � \.{CWEB}, ��������� ������� �����
���������������� � \TeX{} ����������� ��� ������-���� ������ ���
�����. �, ��� ������ ������ � ������ ��������� ����������� ������
��������� ������, ����� ������� ������� \.{CWEB}.

\section ��.
񎄅������ ������ \.{CWEB} ����� ���� \TeX{}-����� � \CEE/-�����.
\.{CWEB}-����������� ������ ����� ������������ ��� ������������ � ����
��� � �������� ��������� ������������, ��� � ���������, �.�. ����� ����
���� ��� ��������, ������� ����� ������������� ��� \.{CWEB}-������
����������� \.{CWEAVE} � \.{CTANGLE}. 򅊑� � ������� \TeX{} ���������
���������� ���������� \.{CWEAVE} � ������������ \.{CTANGLE}, ��� "������
������������". � ������ �������, \CEE/-��������� �������������
\.{CWEAVE} � ������������� \.{CTANGLE} �� ��������, ������� ����� ������
���������� �������. � ��������� ������ ���������� ������, ��� ����������
��� ������������� ������. 񎇄���� \.{CWEB}-��������� � ���-�� ����� �
����������� ��������� \TeX{} � �������������� ��������������
``\CEE/-����'', �������� ��������� � \TeX{} ��������������, ������������
� �������������� �����.

\.{CWEB}-���� �������� {\sl ������\/}, ������� ����� ��� �����
��������������. ꀆ��� ������ ������� �� ���� ������:

\yskip\item{$\bullet$} \TEX/-�����, ���������� ��������, ������������
���� ����������� ������.

\item{$\bullet$} ���������� (middle) ����� ��������
����������������, �������� ������������ ��� \CEE/-�����������, �������
�������� ���������� ������ ��� ������.  ������������� \.{CTANGLE} �
������� �������������.

\item{$\bullet$} \CEE/-�����, ���������� ����� ���������, ������������
\.{CTANGLE}. 䋈�� \CEE/-����� � ������ �� ������ ��������� ������
�������, ����� ��� ���������� �����������
�������� ��������� � ���� ����� ����������.

\yskip\noindent � ����� ������ ������ ������ ������������� � ����
�������, �.�. \TeX-����������� ������ ��������� ������, �����
������������� ����� �, �������, \CEE/-���. 랁�� �� ���� ������ �����
���� ������.

񅊖�� ���������� ���� `\.{@\ }', ���� `\.{@*}', ��� `\.{\ }' ��������
������ "������". 񅊖�� ������������� ������� ��������� ������, �.�.
��������� `\.{@\ }' ��� `\.{@*}', ���� ������ �����. \.{CWEB}-���� �����
��������� ������������ �����, ��������������� ����� ������� ������
������ � �� �������� �� � ���� �� ������. ����� ����� ����� �����
��������� "����������" (``in limbo''), �� ������������ \.{CTANGLE} �
��������� ���������� \.{CWEAVE}, ��� ��� ��� ���������� ������� � �����������
������������ ���������� \TeX'�. ꀊ �������, ��� ���������� ���������
��������� ������, ���������� �������, �������� ������� �������� �/���
���������� ��������� ����.

񅊖�� ���������� ���������������, ������� �~1. ��� ������ ���������� �
������ ������ ������ � \TeX-���������, ���������� \.{CWEAVE}, � ����� �
������������, ���������� ������ � ����� ������ ������ � \CEE/-���������,
��������������� \.{CTANGLE}.

\section 茅�� ������.
� �������, ��� ������� ���������� ���������� ������ �������. ���
��������� `\.{@\ }' ���� `\.{@*}' � ������ ������ ����� ������, � ��
������ ����� ������������� \.{CWEAVE} � \.{CTANGLE} �������������. 
������������� ������ ����� ���� ��������� {\sl ���} ������ ������. 茟
���������� `\.{@<}', ����� ������� ������������ ����� \TEX/, � ����� ---
`\.{@>}'. ꎃ�� \.{CWEAVE} ������� ��� ������, `\.{@<}' � `\.{@>}'
���������� �������� ��������, � ����������� ����� ������ ����� ������
�������. ����, ����� �� ������� ����� \.{CWEAVE}, ����� ����������
��� ����������� ����� ��������.

䋟 ����������� ��� ������ ������ ���� ������� ��������� �����������
������, �.�. �������� ����������, �������������� �������. ⏎���������
������ ����� ���� "��������" � ������ ������ ���, ��� ������������
������ �� ���������� �������� ��������. 茟 ������, �������������, ������
���� ���������� �������, ����� �������� ��� ���� �� ����.

� ���������, ����������� � ������� �������� ������ ������� ��� ������
����� � �����. ���� \.{CTANGLE} � \.{CWEAVE} ���������
������������ ����������. ⑟��� ���, ����� � \.{CWEB}-����� ������
��������� ��� ������, �� ������ ������������ `\.{@<$\alpha$...@>}', ���
$\alpha$ --- ����� ������, ���������� ��������� ������� �����. 퀏�����,
`\.{@<Clear the arrays@>}' ����� ���� ��������� �� `\.{@<Clear...@>}',
���� ������� ������ ��� ������ �� ���������� � `\.{Clear}'. ����������
����� ������������ ���������� `\.{@<Clear t...@>}' � �.�.

茅�� ������ � ������ ������� ������ ��������� �����������, ��
����������� ������������������� ���������� �������� (���������� �������,
�������� ���������, ����� ������ �/��� ��������), ������� ���������� ���
���� ������. � ������ � ����� ����� ��� ���������� ������� �����
���������. �,  `\.{@< Clear { }the arrays @>}' ����� ���������������
����� � ���������� �������. ������� ������� ����� ���������� �����
����� ��������������, �� �� ����� ���, ��� ��� `\.{@<Clear t ...@>}' ��
������������� `\.{@<Clear the arrays@>}'.

\section ��� ������ \.{CTANGLE}.
ꀊ ���� ������� ����, ������ ���������� `\.{@\ }' ���� `\.{@*}', ��
������ --- � ���, ��� ��� ������� �� \TeX-�����, ������������� �
\CEE/-�����. ���������� ����� ���������� � ������ ���������� � ����
������ `\.{@d}' ���� `\.{@f}', � \CEE/-����� ���������� ������ `\.{@c}'
��� `\.{@<section name@>=}'. � ��������� ������ ��� ������������� ������
\CEE/-������, ���� �� ������ ������ `\.{@c}', �� ��� ����� {\sl
�������������}.

ꎍ�������� `\.{@<section name@>}' ����� ��������� � ���� \CEE/-������
������������ ���������� ���: ����������� ������ �� ��� �������� ���
"�������������", � �� "����������", �.�. ��� ����������� ������,
������������ ���-���� ���, ������ ���� ��������� � ��� �����
\CEE/-���������. 䅉����������, �������� ���� \.{CTANGLE} --- �������
���������, ��������� ��������� ���������� ����������� � �������������
������. 򎗍�� ������� ������ ����������� ������: ������� ���
����������������, ���������� `\.{@d}' ������������� � ����������
������������� � ���������� � ������ �����. 䀋�� ���� ����������
������������� \CEE/-������. � ���������� ������ ����������� ������
��������� (������ ������������ ���� �� ���� ������������� ������). 瀒��
��� ����� ������, ��������� � ���������� ������, ����������
\CEE/-������� ��������������� ������ � ���� ������� �����������
������������ �� ���������� ���� ������. ⑅ ����������� ���������,
��������� ���������� ��������� �� \CEE/ �� ��������������� ��� ������
���������.

呋� ���� � �� �� ��� ���� ���� ����� ��� ����� ������, \CEE/-��������
���������� ������������ \CEE/-������ ���� ����� ������. ��� �����������
��������, ��������, ���� ������� ������ � ������ `Global variables', �
������� ����� ������� ��� ���������� ����������, ��� �� ��� �� ����
���������.
ꎃ�� ��������� ������ ����� ���������� ���, \.{CWEAVE} �������� �����
������ �� ��� �������, ��������������� ����� �����, � ��� ��������� �
����� ������ ������: `See also sections~\dots' ("�. �����
������~\dots"),  � �������
����������� ������ ���� ��������� ������, ������� ��� �� ���.
񎎒����������� \CEE/-����� ������������� \.{CWEAVE} ���, ��� ������
����� ��������� � �������� ��������� ������������ ���� ���������������,
�.�. `$\langle\,$section name$\,\rangle\equiv\null$\CEE/ text'.
 ���� � ����������� ������� � ���� ������ ����  `$\equiv$' ����������
�� `$\mathrel+\equiv$', ����������� �� ��, ��� \CEE/-�������� ���� ������
����� �������� � ��������� ������ ������.

ꎃ�� \.{CTANGLE} �������� � ���������� ��������� ������, ��� ���������
� �������� ���� ��������� ������������� \.{\#line}, ��� ��� ������ �����
� ���������� �� ������� � ��� ������� ��������� ����� ��������� ��
�������� \.{CWEB}-����. ዀ������ �����, � ����������� ������� �
���������� \CEE/-����� ����� ������ ������.

\section ��� ������ \.{CWEAVE}. �� ���� \.{CWEAVE} --- ������� ��
����� \.{CWEB} ���� \.{.tex} ����� �������: ������ ������ �����������
����� \.{.tex} ��������� \TeX'� ��������� ���� ����������������,
����������� ������ \.{CWEB}-����������. 䀋�� � \.{tex}-���� ����������
����� ���������, ������������� ����� ������ �������. 瀒�� ������� ��
������� ����� ������ ������, �������� ���������� � ��������� ���������
��������. 퀊����, \.{CWEAVE} ���������� ������� ������������ ������: ���
������� \CEE/-�������������� ����������� ������ ���� ������, � �������
�� ������������, � ����� �������� ���������� ������ ���� ���� ������, �
����� ����������, ���������� ������ ������� � ������ ��� ����
``���������'' ������.

� ��������,  ��� ����� ``���������'' ������ (``starred-section'')?
񅊖��, ������� ����������
`\.{@*}' ������ `\.{@\ }' ���������� ������ ����� ������ ������.  ��
`\.{@*}' ����������� ��� ������, �������������� ������. 򀊈� ������ �
��������� \TEX/ ������ �������� ����� ��������, � �� ��� ������������ �
����������� ���� ����������� ������� �� ��������� ���������
��������� ������. 茟 ������ ����� ��������� � ���������� � ���������� �
������ ������ ������ �������. ������������: �� ����������� � �����
������ ����������� ����������� \TeX'�, ���� �� �� �������, ���
���������������� �� \.{cwebmac} �� ����������� � ����. ����� �����
������ ��, ��� ��� ������ ����� ������������� � ������� �������, �����
��� ���������� � �����������, � ����� ����� �������� ������ ������� �
������ ������ � �������� �� ��������� ����-����������, ��� ���
������������ ������� ������ �������� ��������� �� ���� ���� �������.

\TeX-����, ���������� � ������� \.{CWEAVE}, ��� ������ ������ ��������
���������: ��-������, ����� ������ (�.�. `\.{\\M123.}' � ������ ������
����� 123, �� ����������� ��������� ������, � ������ ������� ������
`\.{\\M}' ������� `\.{\\N}'). 䀋�� ������� \TeX-����� ������,
������������� ����� ��������, ��� ������� ����. ⑋�� �� ���� ����
������������� � \CEE/-����� ������, ����������� ��������� �����������,
���� ��� ��� ��������. ��� ��� ����� �������� �������� ���������
���������� \TeX-�������� � \CEE/-���������. ��� ������� ���������
������������� �������������, ������, ��� ������, ����������
����������� �������� � �������������� ��������, ��������� �� ������ �
�������.

\section \CEE/-��� � ������ \TeX'� � ��������.
ꎃ�� �� ��������� \TeX-�����, ��������, ��� ��� �����������
��������� �� ���������� � ������ ������� \CEE/-���������, ������
����������, ����� �� ���������� ��������������� ����, ��� ������������ �
���������. 䋟 ����� \.{CWEB} ��������������� ����������� ���������� �
���� \TeX-������ ����������� ����� \CEE/, ��������� �� ��������� `\.|'.
퀏�����, ����� �� ����� �������� ���-�� �����
$$\hbox{ If \\{pa} is declared as `\&{int} ${}{*}\\{pa}$',
the assignment $\\{pa}\K{\AND}\|a[\T{0}]$ makes \\{pa}
point to the zeroth element of \|a.}$$
򅊑� �� ����� \TeX\ �  \.{CWEB}-����� ����� �����:
$$\lpile{\.{If |pa| is declared as `|int *pa|', the}\cr
\.{assignment |pa=\&a[0]| makes |pa| point
to the zeroth element of |a|.}\cr}$$
� �������, \.{CWEAVE} ����������� ��� � ����� �����, ��� ������ ��
���������� �� ������� �������:
$$\lpile{\.{If \\\\\{pa\} is declared as
  `\\\&\{int\} \$\{\}\{*\}\\\\\{pa\}\$',}\cr
\.{the assignment \$\\\\\{pa\}\\K\{\\AND\}\\|a[\\T\{0\}]\$}\cr
\.{makes \\\\\{pa\} point to the zeroth element of \\|a.}\cr}$$
����, ��� ������� ������������ ������, ��������� \.{CWEAVE}, ���
��������� ����������� ����� ��������
����� ������� ������ � ������ ������ �� \\{pa}
�������� �� ��, ��� \\{pa} ����� � �� ��������� � \CEE/-����� ����
������. 䅉����������, ������ �������� ������ �� �������������� �
���������� ������������ ��� ��, ��� � � ����� ���������; ����� �������
��� ����������� �� ����������� ����� �������.
� �� �� �����, ��������������
\&{int} � \|a\ � ������ �� �������,
������ ��� \.{CWEAVE} �� �������� � ������ ����������������� ����� �
������������� ��������������. 򀊈� �������������� ���������� �����
�����������, ��� ��� ������ ����������� ��� �����, ��� ��� �����������.

텑����� �� ��, ��� ������ ���������� \TEX/-������ � �������������
\CEE/-������, ������� ����� ���� ����� �� ����������, ���������
\CEE/-��� ����� ���� ������� � ����� \TEX/, ���� �� ��������� `\pb'.
����������, ����� \TEX/ �������� ���������� ������ \CEE/-����, ���������
���, ��� ��������� ������������ (�.�. ��� ������ \.{/*} � \.{*/}, ���� �����
\.{//}) ���������������� ��� ����� \TEX/. 򎗍� ��� �� ��� ������
�������� ����� \TEX/, �� ����������� \.{@<��� ������@>} ������� �����
�������������� � \CEE/-����; �������������, ������� ����� �������� \CEE/
�~\TEX/ �������������� �����������, ��� � ���� ��������:
$$
\displaylines{
\hbox{\.{if} \.{(x==0)} \.{@<Empty} \.{the} \.{|buffer|} \.{array@>}} \cr
\hbox{\.{...} \.{using}  \.{the} \.{algorithm}
\.{in} \.{|@<Empty} \.{the} \.{|buffer|} \.{array@>|.}} }
$$
��� �� ��� ����� ���� ������ � \CEE/-����� ������, � ������� �����
�������� ��� �� ������, ��������� ``Empty the \\{buffer} array''. ⒎���
������ �� \TEX/-����� ������, ������� ���� ��������� �� ������ ������,
�� �� ���������� � �� ���������� ��. (����� �������� �� `\pb' ������
����� ������ � ���� ������.)

\section 쀊�������������.
󏐀������� ��� \.{@d}, �� ������� �������
$$\\{identifier}\.{ }\hbox{\CEE/-���}\qquad\hbox{����}\qquad
\\{identifier}\.(\\{par}_1,\ldots,\\{par}_n\.{) }\hbox{\CEE/-���}$$
(\\{identifier} � ������ �� ������ ������ �� ������ �����������
���������) ������������� \.{CTANGLE} � ��������� �������������
\.{\#define}, ������� ������������� � ������ ������������
\CEE/-���������, ��� ������� �����.

쀊������������� `\.{@d}' ����� ���� ������� �� ��������� �����, ������
�� ����� ������� � ����� ������ `\.{\\}' --- �� �������������
������� \.{CTANGLE}. 呋� �� �����-�� ������� ����������� ���������
\.{\#define} � ���������� ����� \CEE/-�����, ����� ������ �� �
\CEE/-����, � �� � ������� \.{CWEB}, �� � ���� ������ ��������
����������� ������� �������� ������ ��������������.

\section 񒐎�� � ���������.
呋� ��� ����� � \CEE/-���� ��������� ���������, ������������ \.' ���
\.", �� ����� ������ ��� ������, �� ����������� ����, ��� ������ `\.@'
������ ���� ����������� `\.{@@}' (��� ������������ ����������� ������,
������� ����� ���������� ������ ������, ��. �����). 񒐎����� ��������� ��
������ ��������� �������� �������� ������, ���� ��� ��
�������������~`\.{\\}'.

\TEX/ � \CEE/ ���������� ��������� ������� ������� ������������ �
����������������� ��������, ��������� \TEX/ ������������ �� ����������
������ ���������, � \CEE/ --- �� �������� ���������. � \TEX/ ���������
����������� ������������ ��� ����������������� � ������� �������� \.'
����~\." ��������������; � \CEE/ �������� ����� ��� \.0 � \.{0x}.
�~\.{CWEB} ��������� ������������ ��� ���������� ���, ��� ��� �������: �
\CEE/-���� ����� �������� $40_8$ �������� `\.{040}' � \.{CTANGLE} ���
��������� �������� ��� � \CEE/-���� � ������������ �����������, � \.{CWEAVE}
�������� ��� $\T{\~40}$. ����������, \.{CWEAVE} �������� �����������������
\CEE/-���������  `\.{0x20}' ��� \T{\^20}. 葏���������� ������� ���
������������ ���� � ������ ������� ������� ��� ����������������� ��������
���������� ���� �������� � ���������.  䋟 ���������� �������� �����
������������ `\.{|040|}' �~`\.{|0x20|}' � \TEX/-����� ������.

\section 󏐀������� �������.
{\sl 󏐀������� ������ (control code)\/} \.{CWEB} --- ��� ����������
���� ��������, �� ������� ������ `\.@'. � ��� ������������ �
����������� ��������� �� ���, � ������ ������� ��� ����� �����.

� ������������� ������ ����� � ���������� ������� ��������� ��������, �
������� ������ ����������� ������ ����� �����. $L$ ��������, ��� ������
�������� � ���������, $T$ (\TEX/), $M$ (middle) � $C$ --- � ������ ��
���� ������ ������ �� ������� ������ (�.�. ����� ����������� `\pb' �
���� ������). 񒐅��� $\to$ ����������, ��� ����������� ������ ���������
������� ����� \.{CWEB}-����� � �������� ��������� �����, ���������
������ ����� �������. 퀏�����, $[LTMC\to T]$ ����� \.{@\ } ������, ���
����������� ��� ����� ��������� � ��������� ���� � ����� �� ���� ������
������, � ��� �� �������� \TEX/-����� (�������� ������) ������� ������.

噅 ��� ���������� ����� ���� ������� � ���� ���������� �������:
ᓊ��~$r$ �������� {\it ������������ �������� (restricted context)}, ��
����, ���������� \CEE/-������������, ���� ������, \CEE/-����� �
����������� ������� (���������� �����). ᓊ�� $c$ --- ���
{\it ���������� \CEE/-�������� (inner \CEE/ context)} ��� \CEE/-���
������`\pb' (������� ����������� ������ `\pb', �� �� � ������
������������ ����������). 炅������ $*$ ����� ������ ���������, ���
���� ����������� �������� ���������� ������������ ��������, �������
����������� ������ \.{@>}

ᓊ�� � ����������� �������� �� ����������� �� ��������. �, \.{@d}
�������� �� �� �����, ��� � \.{@D}. 䀋�� ����������� ������ ������� �
������� ������� ��������.

\gdef\@#1[#2] {\penalty-50\yskip\hangindent 2em\noindent\.{@#1\unskip
  \spacefactor1000{ }}$[#2]$\quad}
\def\more{\hangindent 2em \hangafter0}
\def\subsec{\penalty-300\medskip\noindent}

\@@ [LTMCrc] � �������� \.@ ������������ ��� ������ `\.@'. ���
������������ ����������� ���, ������� ��������� �������. 瀌����, ���
��� �������� ������������ ��� ����������, ���� �� ���������� email-�����
� \.{CWEB}-����� (��������, \.{levy@@geom.umn.edu}).

\subsec
񋅄����� ���� ������������ \TEX/-����� ������.

\@\ [LTMC\to T] ����� ������ ����� (�� ���������) ������. 񈌂��
���������, ������� �������� ��� ����� ������, ��������� �� ������ \.@,
������������ ������� (��� � � ����������� ������ �������).

\@* [LTMC\to T] ����� ������ ����� ��������� ������, �.�. ������,
���������� ����� ������. 퀇����� ���� ������ ������ ��������� �� \.{@*}
� ����������� ������. ꀊ ������� ����, � ��� �� ������ ��������������
����������� ������������������ \TEX/'�, ����� ���������� �������.
ꎃ�� \.{CWEAVE} � \.{CTANGLE} ��������� \.{@*}, ��� ������� �� ��������
������ `*' � ����� ������� ������, ��� ��� ������������ ����� ���������
������� �� ������������ ������.
񀌀� ������ ������ ���������� ������ ���� ���������.

\more � ������ ������� ``�������'' ��������� ������, ����� \.* ����
������������ ����� ����� \.{@*}, ������� ���� ������������� ������������
������� ������ ������ � �������� ���������. ����� ��������� ��������
������, ������������ \.{@**}, ���������� � ���������� ������ �������:
����� ��������, ��� �� �������~$-1$. � ��������� ������, �������
������������ ����� ��������������� �����, ������� ���������� ��������
������� � ����������. ����� ������� �������� ��������� ���������
������� ���������. 呋� ������� �� ������� ����, ��� ���������� ������ 0.
呋� ���� ��������� �������, ��, ��-��������, �������� ����� ��������
�������� ������� �������. 瀃������ ������ ������ ������������� �� �����
�������� ������,  ���� ������ ������� �� ���������~1.

\subsec
���������� ����� ������ ������ �������� ������������ ����������
���������������� (������������ � \.{@d}) � ����������� �������� (������������
\.{@f} ���� \.{@s}), ������������� � ������������ �������.

\@d [TM\to M] 쀊�������������: ���������� \.{@d}, �� ������� ����
�������������, �������������� ��������� � \CEE/-���, ��� ������� �����.

\@f [TM\to M] �������� �������: ���������� \.{@f}; ��� ���������
\.{CWEAVE} ������������ �������������� ������ �������, ����� ���
����������� � \CEE/-����. �� ��� ����������� ������� ---
`\.{@f} \|l \|r', ����� ������� �������������� �����������, ������������
\.{/*} � \.{*/}, ��� \|l � \|r --- ��������������:
\.{CWEAVE} � ���������� ����� ������������� ������������� \|l ���, ���
�� ��� ������ � ��������� ������ ��� \|r.
��� ���� \.{CWEB}-������������ �����������
������� ����� ����������������� ����� �/��� �������� ��������������
��������� ��������������� ������ \CEE/. 呋� \|r --- �����������
������������� `\\{TeX}', ������������� \|l
����� �������������� ��� ����������� ������������������ \TEX/. 퀏�����,
`\.{@f foo TeX}' � \.{CWEB}-����� �������� � ����, ��� ������������� \\{foo}
����� ����������  \.{CWEAVE} ��� \.{\\foo}. �������� ������ ����������
\.{\\foo} �� ������ ����������, �������, ��� \TEX/ ��������� �
�������������� ����. (ꀆ��� ������ ������������� ������������� � \.{x},
����� ��������� ����������� ������������������ \TEX/; ���, \\{foo\_bar}
���������� \.{\\fooxbar}. ��� �������, ������� �����, ��
�������������, ��� ��� \TEX/ ����� �������� �� ����������� �������, � ��
������ ����� ����������� ������������������.
퀏�����,
$$\.{\\def\\x\#1\{x\_\{\#1\}\} @f x1 TeX @f x2 TeX}$$
����� �������� \.{x1} � \.{x2} �� ��� \\{x1} � \\{x2}, � ��� $x_1$ � $x_2$.

\more \.{CWEAVE} ������������� ����������� ��������������, ���������
����������� \&{typedef}, ��� ����������������� �����, ������� ��� ��
�������� ���������� ������� ������� �����.

\@s [TM\to M;\;L] ���������� \.{@f}, �� \.{CWEAVE} �� ����������
����������� �������� � ����� ������, � �������������� \CEE/-�����������
����������. 葏��������� ������� ������� � \.{@i}-������.

\subsec
񋅄����� ���� ��������� \CEE/-������ ������.

\@{c @p} [TM\to C] \CEE/-����� ������������� ������ ���������� \.{@c}
(���� \.{@p}, �.�. ``program''; ��� ����������� ������� ������ ���� � �� ��).
��� ���������� \.{CTANGLE} ��������� ��������� \CEE/-����� ������
����������� ������ ���������, ��� ������� �� ��������~\tangref.
瀌����, ��� \.{CWEAVE} �� �������� `\.{@c}' � \TEX/-�����,
��� ��� ���� �� �������� ���� \.{CWEB}, ����������� �� �������������
\TEX/'�� \.{CWEB}-������������, �� �������� ������� \.{@c} �
��������������� ������ ������������� ������.

\@< [TM\to C;\; C;\; c] $*$ ���� ����������� ������ ������������ ���
������ (���� ���������� �������, ��� ������� ����), ���������� �����
\TEX/ � ������������� \.{@>}.
ꎍ�������� \.{@<...@>} � ����� ������������� �������� ��������� \CEE/-����.
� ��������� ������� �� ���������:

\more 񈌂�� \.{@<} � ���������� $T$ � $M$ ���������
��������� ����� ��� ������ � ������� �������, � ���������
\CEE/-����� ������.  茟 ����������� \.{@>}, �� �������
������� \.{=} ��� \.{+=}.

\more
� ��������� $C$, \.{@<} ���������, ��� ������ �����
������������ --- �� \CEE/-����������� ����� �������� ����
\.{CTANGLE}, ��� ������� �� ��������~\tangref.
䋟 ����� ������� ��������� ������
\.{CTANGLE} � \.{CWEAVE} ��������������� ����� ��������� � ������, ���� ��
����� ������ ������ ������� \.=, ��������� ��� ������ ����� ��������
����������� ����� ������, � ������� ������ ������������ \.{@\ }.
呋� ��� �������������
����� �������� $\langle\,$foo$\,\rangle=\\{bar}$, ��� $\langle\,$foo$\,\rangle$
������������, � �� ������������, ��������� \.= �� ����� ������.

\more
퀊����, �� ���������� \CEE/-��������� (�.�., ������ `\pb' � \TEX/-�����
������ ��� � �����������), \.{@<...@>}
��������, ��� ��� ����� ����������.
򀊎� ������������� ������������ \.{CTANGLE}. ����, ��� ���� � ���� ������
�� �������� ��� ������ ��� ������� \CEE/, ��� ��� ��� ���������� \pb.

\@( [TM\to C;\;C;\;c] $*$ 茟 ������ ����� ���������� \.{@(}.
⑅ ����� ��������, ��� � ��� \.{@<}, �� � ��� �����������, ��� \CEE/-���
������, ��������� \.{@(foo@>} ����� ������� \.{CTANGLE} � ���� \.{foo}.
� ����� �� ����� �������� �� ������ ����� \.{CWEB} ��������� ��������
������.
(�������� \.{@d} �� �������� � ����� �����,
� ���� � �������� \.{.c}-����.) � �� �������������� ���� �����������
� ���, �����  ������� ������������ ����� ��� ����������� �������.
䐓��� �������� �� ������������� ������  ���������
������, ���������������� � ����� ����������. 񎕐���� �������� ������
���������, �� ������������ ����� � �������� ��������� ���������,
�� ����� ������ ������ ���������� �� ���������������.
����, ��� ����������� ������ ����� ���� �������� �
��������� ��������� �������� ������, ���������
�� ������ ��������� \.{@<foo@>} ��� � \.{@(bar1@>}, ��� � � \.{@(bar2@>}.

\@h [Cc] ��������� \.{CTANGLE}
�������� � ��� ����� ����������� \.{\#define}
�� ������������� ������ ���� ������ � {\it ��\/} ���������� �� � ������
\CEE/-�����. ����, � �������, ��� ������������� ���������� ����������������
����� ���������� ������.
(胍��������� \.{CTANGLE} ������ `\pb'.)

\subsec
텑������ ��������� ����������� �������� �������� ``����������� ������''
(``control texts''), ������������� `\.{@>}'.
瀊�������� `\.{@>}' ������ ���� ��
��� �� ������ \.{CWEB} �����, ��� � ������ ������������ ������.
ꎍ�����, ������������ ����� ������������ ��������� � ��������������
\.{@>}, �������� ������������.

\@\^ [TMCc] $*$ 䀋������� ����������� �����, ������ �� `\.{@>}',
����� ������� � ������ ������ � ����������������
\CEE/-���������; ���� ����� ����� ������ ��������� �������. 퀏�����, �����
��������� ����� ``system dependencies'' (��������� �����������) �
������, ������������ \.{CWEAVE}, ��������� `\.{@\^system dependencies@>}'
� ������ ������, ������ �� ������ �������� ��� ��������-���������.

\@. [TMCc] $*$ �������� ����������� ����� ����� ������� � ������
� ����� ������� ������� (\.{typewriter} \.{type}).

\@: [TMCc] $*$ 񎎒����������� ����� ����� ������� � ������
� �������, ��������� \TEX/-�������� `\.{\\9}', ������� �� ������
���������� ���, ��� ��� ����������.

\@t [MCc] $*$ 䀋������� ����������� ����� ����� �������� �
\TEX/ \.{\\hbox} � �������������� ��� ����� ���������� ���
\CEE/-���������. ���� ����� ������������ \.{CTANGLE}, �� ����� ��������������
� ��������� ����� \.{CWEAVE}. 퀏�����, �� ������ ������ �����������,
������� �������� \CEE/ � ������������ ����������, �����  `$\\{size}<2^{15}$',
����� `\.{|size < 2@t\$\^\{15\}\$@>|}'.

\@= [MCc] $*$ 󏐀������� ����� �����
�������� ������� � \CEE/-���������.

\@q [LTMCc] $*$ 󏐀������� ����� ��������� ������������
--- ��� ����������� ������������� ��� ��������� \.{CWEB}-�����.
􀉋, ��������������� ��� ��������� � ��������� � ������� \.{@i},
����� ��������� ���������� � ���� ����� � \.{@q} �����������. 䐓���
�������������� ���� ����������� ����� ���� �������������� ������� ������
������ C-�����, ����� ��������� ���������, ������������� �� ��������, "��
������ � ������"
(��, ������ ���: "go into a tailspin" --- {\sl �. �����.\/}).

\@! [TMCc] $*$
펌�� ������ � ������� ����� ����������, ���� `\.{@!}' ���������������
������������ �������������� ���� ������������ ������, ����������� �
������. ��� ����������
����������, ����� ��������� ������, � ������� ������������� ��������� ����
����������� ��������� ������ �������, �� ������, ��� �� �����������.
񑛋�� �� ����������������� ����� ���� �������������� �������������� � ������
�� ����������, �� ����������� ������������. `\.{@!}' ������ �����������
\.{CWEAVE} ����� ������������� ����������� ���� ������������ � \CEE/-����;
��������, �����������
$$\hbox{\&{int} \\{array}[\\{max\_dim}], \\{count}${}=\\{old\_count};$}$$
�������� � ������ ����� \\{array} � \\{count}, ������� �� ��������������.
셒��, ����������� �������, ��������
\\{main}(\&{int}~\\{argc},\,\&{char}~$*$\\{argv}[\,]),
� ����������� \&{typedef} ����� ������������� �������������.
�������� ������� ������� ����� (��� ���������)
�� ���������� �� ����������, ��� �� �����, ��������� ����� ����������
������������� (� ����� ������������ � ������� � ��������������),
���� �� ���� ��������� ����� ����� ������� ������� �������,
(��������, `\&{int}~\\{argc}; \&{char}~${*}\\{argv}[\,]$; $\{\,\ldots\,\}$').

\subsec
�����, �������, � ����������� ��������, ������� ������ ������ �� ������
\.{CTANGLE}.

\@' [MCc] 葏���������� ����� ������������ ������� ������, ��������� ���
�������� � \.{CWEB} ����������� ���������� �� ��� ��������� � \.{WEB}.
� \.{CWEB} �� ������������ � ������������ ���������, ���������������
ASCII-���� ������ ��������� ����� (�.�. \.{@'a'} �������������
\.{CTANGLE} � \.{97}, � \.{@'\\t'} --- � \.9). � ������ ���������������
����, ���� ������ �������� � ASCII �� ������, �� ������������ ��� ���������,
�� � ����������� ������� �������� �����  \CEE/, ������������ � \.{<ctype.h>},
������ ���������� ��� ���������� ����������� �� ��������� ��������.

\@\& [MCc] ����� \.{@\&} �������� ����� ����� �� ���� � �������
������ � ������� � \CEE/-���� ���, ��� �� �������, ��
������� ����� ������ �� ����� ��������� ����� ����.

\@l [L] \.{CWEB}-������������ ������ ������������ � \TEX/�� ����� 8-������
���������� ��� �� ������� ���������� ��������� 128--255; ��� ������� �����
��������� � ������� � ���� � ��������������� \CEE/-���������.
� ��������� ����������� �������� ��������� ASCII ������ ����� �������
(����, ������� 128) ������������� ������ � ��������������� �������,
�������� �� ��������� ��������� � �.�.
ꎃ�� ����� ������� ���������� � ���������������, \.{CTANGLE} ��������
�� ������������ ���������-��������� ��������� ASCII ���� \.{\_}, �����
����� ��������������� ����������� ����� \CEE/.   ���� �����������
������� �������������, ������� �� ��������� ������������ � ������
��������, ������� ASCII-��� \T{\^}$ab$ (��� $a$ � $b$ --- �����������������
����� � $a\ge8$) ������ \.{Xab}. ����� � ��������� �����������
\.{@l\ ab\ newstring}, �� ������� \.{CTANGLE} �������� ���� ������
������� \.{newstring}. 퀏�����, � ��������� ISO Latin-1 ����� `\"u'
����� ��� \T{\^FC} (���� \.{'\char`\\374'}), � \.{CTANGLE} �� ���������
�������� � ��������������� ���� ��� ������������������� ��������
\.{XFC}. 呋� �� �������� \.{@l} \.{fc} \.{ue}, �� ����� ������ ����
����� ����� ������������� \.{ue}.

\more
\.{CWEAVE} ���������� 8-������ ������� ����� � \TEX/ ��� ��������������;
�� ��� ���� \TEX/ ������ ����, � ���� �������, ����������� � �� ���������.
呋� �� ������������ ��� ������������� �������������� ��� ������ (``custom'')
����������� ������������������, ������� ��������� \TEX/ ���, ����� ��
����������� ��� �� ������� ��� �����. � ��������� ������ �������
���� �������� � \TEX/'� 8-������ ������� ``���������'', ���� ���������
������, ���������� � ��������������� ������� ������ ����������� �������.
(䋟 ��������������� ������������ �����, ���������� �������� \TEX/'�
\.{\\it}.)
虈�� ����������� �����������, ���������� ��� ������������� � \.{CWEB}
������ ����� ����, ���� �� ������� ����������, �������� ���� �����������.

\subsec
񋅄����� ������ ����������� �������� (� ������, `\.{@,}', `\.{@/}', `\.{@|}',
`\.{@\#}',
`\.{@+}', `\.{@;}', `\.{@[}', � `\.{@]}') �� ������ �� ���������
\CEE/-��������� \.{CTANGLE}, �� � ��������� ��������� ������� ����� ������
�������� ���������� �� \TEX/-�������������, ����������� \.{CWEAVE}.
⑒������ �������� �������������� ������ �����, �����
����������� � ������������� ���������� ���������, �� �� ����� ������ ����
��������� ��������, ������ ��� �������� � ����������� ������, �����������
������� � ����� ������; ����� ��������� �� ������ ��������� ���������.
텑����� �� ��, ��� \.{CWEB} ��������� �����������
�������������� ��������������, ������ ���������� ����� ������ �
����, ��������� ����� ���������, ��� ����������� ���� ��������� ������
���������.

\@, [MCc] ���� ����������� ������ ��������� ������ ������ (thin space) �
����� \.{CWEAVE}.
荎��� �������������� ������ ����� ������������ ��� ��������� �������������
��������, ��������, ����� ��� �������������� ����������� �����.

\@/ [MC] ���� ����������� ������ �������� ������ ������ �
\CEE/-���������, ����������������� \.{CWEAVE}. ������� ����� �������������
����������
\TEX/'�� �� �����, ���������� ��������� � 99\%\ �������, �� ������
���������� ����� ��������, ����� ��������� ���������������,
������ ������� �����������������, ������ ���������.
퀏�����, ����������� `\.{@/@,}' ����� �������������, ����� ���
���������� � ����� ������.

\@| [MC] ���� ����������� ������ ������ �������������� ������ ������
������� ���������. 퀏�����, ���� ������� ������� ��������� � ������ �����
������������, � ������� `\.{@|}' ����� ������� � ��� ��������� �����
�������, ������� ����� ����� ������������ ������ ���������, ������
��������� \TEX/'�� �������������.

\@\# [MC] ���� ����������� ������ �������� ������ ������ ������� \.{@/},
� ����� ��������� ��������� �������������� ������ � ����� �������.
� ����� ��������������, ��������,
����� ��������� ���������� �������� ��������, ������������ � ����� ������.
\.{CWEB} ������������� ��������� ����� ��������������
������ ����� ���������, �������� ������������ � ���������, � ����� �����
������������ � ����������� � ���� �������.

\@+ [MC] ���� ����������� ������ ��������� ������ ������, ������� ������
���� ������ \.{CWEAVE}, ��������, ����� `\&{else}', ���� �� ������
���������� �������� if--else ����������� �� ����� ������.
呋� ������� `\.{\{@+}' � ������ ���������� ���������, ����������� �����
�������, �� ������ ���������� ��� �������� ������� ����� ����������� ��
��� �� ������, ��� � ����������� ������, � � ��������, ������� �����
�������������� ������� ��������� ��� ���������� �� ��������� ������.

\@; [MC] ���� ����������� ������ ��� �������������� ���������� ����� �
�������, �� �������. � ������ ��������������� ���, ��������, �����
����� ������ ��� �������, ����� \CEE/-���, �������������� � ���� ������
��� �������, ���� ��������� �������� ���� ������������ ������ � �������.
����� ����� ����������� ��������
$$\lpile{\.{if (condition) macro @;}\cr
\.{else break;}\cr}$$
��� ������������ \\{macro} ������ ��������� �������� (����������� � ��������
������).
��� ������ ��������� ���������� ���������� \CEE/.

\@{[} [MC] �. \.{@]}.

\@] [MC] ������ ���������� ������ \.{@[...@]} ������ ������ ���������,
������� ������ ���� �������������� \.{CWEAVE}
 ��� ���������, ���� ����� �� ���������. (򀊎�
������ ��������� � ���������� ����������� ��������.)
򀊆� ���������� `\.{@[@]}' ����� ������ ���� � ����� �������, �����
���������� ��������� �� �������, �����,
$$\.{int @[@] (*f)();}$$
� ��������� ������ \.{CWEAVE} ������� ������ ����� ����� �����������
� ���������� \CPLUSPLUS/ `\&{int}($*f$)'.

\subsec
������ ����������� ������� \.{CWEB} ��������� ������ ������.

\@{x @y @z}[\\{change\_file}]
\.{CWEAVE} � \.{CTANGLE} ������������� ��� ������ � ����� �������� �������,
����������� \\{web\_file} � ���� ��������� \\{change\_file},
��� \\{change\_file} �������� ������, ���������� ��������� ����� \\{web\_file}.
�������������� ����� � ���� ��� ����� ���� \.{CWEB}, ������� �����������
����������� � ���� �����������.

\more ꀊ ��� ��������: ���� ��������� �������� ���� � ����� ``���������'',
���  ���������� ����� ��� `\.{@x}$\langle$������ ������$\rangle$\.{@y}$\langle$%
����� ������$\rangle$\.{@z}'. 񏅖������� ����������� ������� \.{@x}, \.{@y}, \.{@z},
���������� ������ � ������ ���������, ������ ���������� � ������ ������,
������� ����� ������ ������������.
񎄅������ $\langle$������ ������$\rangle$ ������������ ��������,
������� ����� �������������
���������������� ������� \\{web\_file}; � $\langle$����� ������$\rangle$
�������� ���� ��� ����� �����, �������� �������������� �������� ������.
ꀊ ������ ������ ``������ ������'' ���������� ����������� �����������
�� ������� �~\\{web\_file}, ��� ��������� ������ ���� ���������� �����
������ ��������.

\more 셆�� ������������, ����� ������ ����������� � ����� ���������
����������
���� ��������� ����� ��������� ����� ���������� �����, �� ������������
`\.{@x}', `\.{@y}', ����~`\.{@z}'. 򀊈� ������ ������������ � ��
������������ � �������������.

\more 򀊀� ����������� �������, ����� ��������� � ������������ \.{CWEB}-������,
���������� ������-���� (��������, \.{tangle.w} �
\.{weave.w} ���� \.{tex.web}), ������� ���������� �������� ��� ���������
��������� � ������������ ����� �������. � ������ ���������� ����
��������-��������� ���������, �� ��������� ��������� �����; � ���
������ ��� ����������, �� ����� ����� ����� �������� � ����� ������
��������� �����, ������� ����� ���������� ����� �� �������.

\@i [\\{web\_file}]
� ���� �������, \\{web\_file} ��� �� ���� ����� ���� �����������
���������� ������.
ꎃ�� \.{CWEAVE} ���� \.{CTANGLE}, �������� ����, ������������
����������� ������ \.{@i} � ������ ������, ��� ��������� ������ �
�������� ��������� �����, ��� �������� ������� �� \.{@i},
������� ������������� ����������� \CEE/, ��������������� ���������
\.{\#include}.
�� ���������� ������ ����������� ����� ���������
��������� � ��������� ������ ��������� �����.
茟 �����, ��������� �� \.{@i}, ����� ���������� ���������
\.", �� ��� �������������.
⊋������ ����� ���� ���������.

\more
􀉋� ��������� ����� ����� ������, ������������ \.{@i}. 򀊈� ��������
�� ������ ��������� ���� ���������� ���� ������. ꎍ����������, ���������
���� �������� ����������� ��������� ������, � ����� � ��� ������
�������������� ��������� \.{@i}. 呋� \.{@i} \.{foo}
�������� ����� \.{@y} � \.{@z} � ����� ���������, ��������� ������
����� \.{foo} � �����, ������� �� ��������, �� ����������; �����������
����� ���� ������� � ������, ������ ���������� �� ���������� ����������
input.

\more � ������� UNIX (� ������, �������������� ���������� ���������),
���� ����������� ���������� \.{CWEBINPUTS}, ���� ���� �����������
����������� ���� ������ ��� ����������,
\.{CWEB} ����� ������������ �� �������� � �������� ����� ��������, �
������� ����� ����������� ����� ���������� ������, ���� ��� �� �����
������� � ������� ��������.

\section 䎏����������� ����������� � ���������������.

1. � ��������� ����������� \.{CWEB}, �������
{\def\\#1#2{`{\tentex\char'#1#2}'}%
��������� ������������� ������������ ����������� ������, �������
\\13, \\01, \\31, \\32, \\34, \\35,
\\36, \\37, \\04, \\20 �~\\21}
����� ����������� ��� ���������� ��� `\.{++}', `\.{--}', `\.{->}',
`\.{!=}', `\.{<=}', `\.{>=}', `\.{==}', `\.{\v\v}', `\.{\&\&}',
`\.{<<}' �~`\.{>>}' ��������������.

2. 呋� ���� ������� ����� ����������� ����� ��������, �� ����� ����
����������� � ������������ �������������,
��� ��� ������� ���� ��� ���������� \.{@l}.
� ��� ������� �������������� ����������� �������� ASCII, ���� ��
������ ������ ���������, ������� �������� ��������� � ���, ���� �����
���������� ����������.

3. 䎊����� \TEX/, ������������� \.{CWEAVE}, ����������� �� ������ �
������������ ������ 80 ��������.
ꎃ�� ����� \TEX/ ����������, ��������������� � ������������ ������� �����.
呋� �� �� ������� ������ ������� �������, \.{CWEAVE} ����������, �����
����������� \TEX/'� ����������� �� ��������� �����, � �������
`\.\%' � ������ ������ ����� ������.

4. \CEE/-����� ������������� ``����������'' (``bottom up'') ����������,
������� ���������� ������ ������� ��� ``����� ����'' (``part of speech'')
� ����������� ��� ����� �� ��� �\'������ � �\'������ �����, ���� ���
��������, �������� ����������� ����������, ��������� � ������������
�~\.{CWEAVE}. 녃�� ������ �����, ����������� � ������� ������������,
����� ��� ��������� �������������� � �������� ���������, ������ ������
��������� �������� ������ \.{CWEAVE}, �� ����� �������� ���������
�������, ��������� ������ ������������ ����� �������, ��� ������ \CEE/.
��� �����, ����� �������� �������, ������� ���������� \TEX/ ������
������� � ������� ����� ��� ����������,
�������������� �������������� ������� � ������� ��������. 䋟 ����������
��������� ����������� ������������
�������� ���������� ������� \CEE/-������� � \pb, ���������
������� � ������� ����� ������ ������������, ����� ���������� \pb\
������������� � \CEE/ � \TEX/. 񒐅������ � �������� ��������� �
����������.  呋� ��������� ������������� ��������� � \pb,
�� ���������� �� \.\#  ������ ������������� � ������ ������,
����� \.{CWEAVE} �� ���������� �� ���������.

5. ꎌ�������� � \pb-������ �����������. �� `\.|', ������������ ��
������� �� ������ \TEX/ � \CEE/, ��������� `\.|', ������� �� ��������
������ ������, ������������ ������ ���� ����� ������, ��������� \CEE/-�����.

6. ꎌ�������� ������ ����� ���������� �������� �������� ������,
� ��������� ������ \.{CWEAVE} ������� ���� ������������, �� ��� ����
������� ������� ������������ ������ ������, ��� ���
\TEX/'� �� �������� ������� ������.

7. 呋� �� ����� ������� ��������� ��������� ������������� ��������
��������� ����� \CEE/-����, �� ������� �������� ������ ��� ``����������������''.
򀊈� ����������� �� � ���� \.{CWEB}; ��������� ��� ��������� �����������
� ��������� �����������.
ꐎ�� ����, ����������� ������ ���� ��������� � ����� ������ \TEX/'�;
�������������, \.{CWEAVE} ����� � �����������, ���� �� ���������
����������� \CEE/ �
\.{/*...*/} ������ \.{/*|...|*/}.  呋� ����� \CEE/-���� ������ ����
``����������������'', �� ������ ���������� �� ����������� �������������,
��������� \.{\#if 0==1} � \.{\#endif}.

8.  ������ \.{@f} �������� ���������� ���� ������������� ���, ����� �� ���
���� ������� �������, �  ��� ����������� ������� ����������� ���������������.
⎎��� ������, ������ ������������� ����� ������������ ������ ������ ��
���������� ����� ���������, � ���� ������ ������������ ���� �� ����, ���
����� ��������� ����������� \.{@f}. ��� ����������� ���, ��� \.{CWEAVE}
�������� � ���
�������; �� ������ ������� �������������� ��������� \.{@f} �
������������ ������, � �� ������ ������������ �����.
(� �� �����, ��������������, ��������� \.{typedef}, �������
������ ������������� ������ ������ ������ �������,
�� ������� ����� �������: ��� ��������� ��-������� �� � �����
���������������� \.{typedef}.  ��� ��������������, �� ���-���� ���������
��������������. � ������ ������ ��� �����������, ��������� \.{@s}, �� ����
����� \.{typedef}.)

9. 荎��� ���������� �������� � ����������������� \CEE/-��� ������,
�������� �� ���������������� `\.{@,}'. 䋟 ����� ����� ���������������
\.{@t}; ��������, `\.{@t\\hskip 1in@>}' ���� ������ ������ 1~����.
ꐎ�� ����, `\.{@t\\4@>}' ����� �������������� ���
�������� �� ���� ������� �������, ��������� �����������
������������������ \.{\\4} ���������� � \.{cwebmac} ���, ����� ������
����� �������. ( ������������, � �������, � ������ �����, �������
�������� ���������� ���������, ��� ��� ����� ����� ������� �������
�����.) � ����� ������ ������������ `\.{@t\}\\3\{-5@>}' ���
��������������� ������� ������ ������� ���������.

10. ꀆ��� ������������� � \.{CWEB} ����� ���� ����� ��������������. ����
�� �� ������ ������������ ���� � �� �� ��� ��� �������������� �����������,
��������, ����� ���� � ���� \.{struct}, �������� �� ��, ��� \CEE/
��������� ���.

\section 瀏��� ��������.
ꎌ������ ������ \UNIX/ ��� ��� \.{CTANGLE}, ��� � ��� \.{CWEAVE} ����� ���
$$\.{ctangle [options] web\_file[.w] [\{change\_file[.ch]|-\} [out\_file]]}$$
呋� ���� ��������� ������ ���� ����� `\.-', �� ���������� ������.
���������� \.{.w} � \.{.ch} ����������� ������ � ��� ������, ����
�������� ����� ������ �� �������� �����.
呋� ���� � ����� ������ �� ������, ����� ����������� ����������
\.{.web}.
퀏�����, `\.{cweave} \.{cob}' ���������� ���������
\.{cob.w}; ���� ��� �� �������, ����� ����������� \.{cob.web} �����
��������� ����������� ������.
呋� ��� ��������� ����� �� ������, ��� \CEE/-�����, �������������
\.{CTANGLE}, ���������� ����������� ���������� \.{.c};
��� \TEX/-�����, �������������� \.{CWEAVE}, ������� ���������� \.{.tex}.
� ��������� ������, ����������� \.{CWEAVE}, \.{.tex} ���������� \.{.idx} �
\.{.scn}.

�������� ������������ ����� ��� ��������� ���� ���������
�������������, ��� `\.{wv}' ����� �������� `\.{cweave -bhp}'; ���
��������� ���� ����� \.{CWEAVE} �� ��������, �� ����������� ��������� ��
�������.

������-����� ���������� ���� �������� `\.-', ����������� ��������
�����, ���� `\.+', ������� ��� ���������. 퀏�����, `\.{-fb}' ���������
����� \.f � \.b; `\.{+s}' ��������� ����� \.s. �� �����
���������� ����� ������� ������, ����� ���, ���� � ��, � ������. �
��������� ������ �������������� ��������� �����:

\yskip
\def\option#1 {\textindent{\.#1}\hangindent2\parindent}

\option b ⛂����� ��������� ��� ������. (��������� �� ���������.)

\option f ������� ��������� ������ �������� \CEE/, �����������������
\.{CWEAVE}, �������� ����� ������.
(��������� �� ���������; \.{-f} �������� ������, �� ������ ��������, ���
����� ����� �������������� ��������� �������� � \CEE/ "�������������".)
(� ������ �� \.{CTANGLE}.)

\option h ⛂�� ��������� � ���������� ���������� ���������. (��������
�� ���������.)

\option p ������� �� ����� ������ ��������� ��������� � ��
���������. (��������� �� ���������.)

\option s ⛄��� ���������� ������������� ������ �� ��������� ������
���������. (瀏������ �� ���������.)
呋� ���� \.{CWEB}-����� ���� ������ ������, ����� ��������� �������� �������,
��������� �� ������ � ���������� �������� \.{CTANGLE} �/��� \.{CWEAVE}.

\option x ⊋����� ������ � ���������� � \TEX/-����, ���������
\.{CWEAVE}. (��������� �� ���������.) (� ������ �� \.{CTANGLE}.)

\section 䎏����������� �������� � ��������������.
‌ ����� �� �����������, ��� \.{CWEAVE} ������������ ���������
��������. 呋� � ��� ��� ������� ������, �� ������ ��������� \.{CWEAVE}
������� ��� ����������.  ��� ������� ����������� �������� �������,
������, ������� ����� ���������� �������������. 򀁋��� ��������������
������ ���������� � �������� ������� \.{CWEAVE}, � �� ������ �������
��������� ����� ���� �������, ���������� ����~\.{prod.w}, ��������� �
�������� ������� \.{CWEB} � ����������� `\.{cweave}~\.{-x}~\.{prod}' �
`\.{tex}~\.{prod}'.

� ������ ����� ������, ��� \.{CWEAVE} ��������� ��� \CEE/-���, ����
��������� ����� ��� ������ `\.{@ @c @2}'. (󏐀������� ��� `\.{@2}'
������������ ``��������'' (``peeping'') ����� ������, � `\.{@0}'
�������� ���.) 퀏�����, ���� ���������� ����� \.{CWEAVE} ����
\medskip
\begingroup
\verbatim
@ @c @2
main (argc,argv)
char **argv;
{ for (;argc>0;argc--) printf("%s\n",argv[argc-1]); }
!endgroup
\endgroup
\medskip\noindent
�� ����� ����� �������� ��������� �����������:
\medskip
\begingroup
\verbatim
[...]
4:*exp ( +exp+ )...
11:*exp +exp+ int...
5:*+exp+ int +unorbinop+...
[...]
60: +fn_decl+*+{+ -stmt- +}-
55:*+fn_decl+ -stmt-
52:*+function-
[...]
!endgroup
\endgroup
\medskip
��� ������ ���������, ��� ���� ��������� ������� ����� 4, �  \.{CWEAVE}
� ��������� ������ �������� � ����� ������ ������������������ ����������
(chunk) ������ � ������� \TEX/ (���������� ``���������'', ``scraps''),
������� �������������� ��� \\{exp} (��� ���������), ����������� ������,
����� \\{exp}, ����������� ������, � ����������� �������, ������� �� ����
��� ������� �������������� ������������.  (獀�� \.+ � \.-  ���������, ���
\TEX/ ������ ����� � �������������� ���� ���� ����� �� ��� �� ������� �������.
񈌂�� \.* �������� ������� ������� �����������.)
䀋�� ����������� ������� 11, � ������������������ $(\,exp\,)$
������������ �� \\{exp} � ��� �����.  � ����� ������
���� \CEE/-����� ����������� ����� ������� �������� ���� \\{function}.

荎��� ��� ���� �� ��� ������, � �� ��������� ������ �����, ��������� �
���� ����.  ��� ������, ��� \.{CWEAVE} �� ���� ����������
���-�� � ����� \CEE/-����.  퀏�����, �����
`\.{@<Argument definitions@>}' ������ ����� `\.{char **argv;}' �
���������, ���������� ����. � ���� ������ \.{CWEAVE} ����� ������
��������, ��������� �������, ��� ����� ������ ����� ����
������  \\{exp}.  ���� \TEX/'� ����� ���������� �������
`\X2:Argument declarations\X' � ��� �� ����� ������, ��� �
`$\\{main}(\\{argc},\39\\{argv}{}$)'.
� ���� ������ ����� ������ \.{CWEAVE}, ������� `\.{@/}' �����
`\.{main(argc,argv)}'.

\.{CWEAVE} ������������� ��������� ��������� ���������� �����
���������� � ������ ���������� �����. ⎒ ���� ������ �������� ���
��������:
$$\vbox{\halign{#\hfil\cr
\.{int x;@+@t\}\\6\{@>}\cr
\.{@<Other locals@>@;@\#}\cr}}$$
`\.{@\#}' �������� �������������� ������ ����� `$\langle\,$Other locals$\,\rangle$'.

\section �������.

ꀊ ������ �������� ���������, ���������� � \.{CWEB}, �������~A
�������� ��������� ��������, �������� � ������ ����� ������� \.{CWEB}.
� �� ���������, ��� ��������� ������ �������� � ���� ����������,
������ ������� �������������� �������� ���� \.{CWEB}.

�������~B  --- ��� ���� �����������, ������� ����������� \TEX/ ��
������ � ������� \.{CWEAVE}, � � �������~C �����������, ���
������������ ��������� �� ���� �������� ��� ��������� ������� ������.

``���'' ������ ����� �����������, ������� ����� ���� ������������� ��
�������� ������� \.{CWEB} �������� \UNIX/ \.{make} \.{fullmanual},
�������� ����� ���������� D, E, �~F, �������������� ����� ������
�������� ������ \.{CTANGLE} � \.{CWEAVE}.

\vfil\eject\titletrue

\def\runninghead{������� A --- ������ ��������� ����� {\tentt CWEB}}
\section �������~A: ��������� �������� \.{CWEB}.

��� ���������� �������� ������ ��������.
��� �������� ������� ������ ��� \.{CWEB}, �� ������� ������������
������~12--15 �����~\.{common.w}, ������� �������� ������������, �����
��� \.{CWEAVE} �~\.{CTANGLE}. ����, ��� ��������� ������ ��������
�������, �������������� ��������� ���������; ������� ��� ������������
���  \.{CWEAVE}, ��� � \.{CTANGLE}, �� ������������ �������, ��� �����
\.{CWEB} ������� ����� ��������������, ���� � ��� ������� ����� �������.


⒎��� � ������ �������� �������� ��������������� ���������
\CEE/-����, ���������������� \.{CTANGLE} � ������ � ������� \TEX/,
����������� \.{CWEAVE} ��� ��������� \.{common.w}.
��������� ������� �������������, ��� ����� ��������� ���� �������� ����
�� ������.

\vskip 6pt
\begingroup \def\tt{\eighttt} \baselineskip9pt
\verbatim
@ Procedure |prime_the_change_buffer|
sets |change_buffer| in preparation for the next matching operation.
Since blank lines in the change file are not used for matching, we have
|(change_limit==change_buffer && !!changing)| if and only if
the change file is exhausted. This procedure is called only when
|changing| is 1; hence error messages will be reported correctly.

@c
void
prime_the_change_buffer()
{
  change_limit=change_buffer; /* this value is used if the change file ends */
  @<Skip over comment lines in the change file; |return| if end of file@>;
  @<Skip to the next nonblank line; |return| if end of file@>;
  @<Move |buffer| and |limit| to |change_buffer| and |change_limit|@>;
}

@ While looking for a line that begins with \.{@@x} in the change file, we
allow lines that begin with \.{@@}, as long as they don't begin with \.{@@y},
\.{@@z} or \.{@@i} (which would probably mean that the change file is fouled up).

@<Skip over comment lines in the change file...@>=
while(1) {
  change_line++;
  if (!!input_ln(change_file)) return;
  if (limit<buffer+2) continue;
  if (buffer[0]!!='@@') continue;
  if (xisupper(buffer[1])) buffer[1]=tolower(buffer[1]);
  if (buffer[1]=='x') break;
  if (buffer[1]=='y' || buffer[1]=='z' || buffer[1]=='i') {
    loc=buffer+2;
    err_print("!! Missing @@x in change file");
@.Missing @@x...@>
  }
}

@ Here we are looking at lines following the \.{@@x}.

@<Skip to the next nonblank line...@>=
do {
  change_line++;
  if (!!input_ln(change_file)) {
    err_print("!! Change file ended after @@x");
@.Change file ended...@>
    return;
  }
} while (limit==buffer);

@ @<Move |buffer| and |limit| to |change_buffer| and |change_limit|@>=
{
  change_limit=change_buffer-buffer+limit;
  strncpy(change_buffer,buffer,limit-buffer+1);
}

!endgroup
\endgroup
\vfill\eject

\def\runninghead{������� A  --- ����� {\tentt CTANGLE}}

焅�� ��������� ������ \CEE/-����, ���������������� \.{CTANGLE}, �������
������������� ��������� ������ �� ���������� ��������.  ����� ��������,
��� ������~13, 14 �~15 ���� "��������" � ������~12.

\vskip6pt
\begingroup \def\tt{\eighttt} \baselineskip9pt
\verbatim
/*:9*//*12:*/
#line 247 "common.w"

void
prime_the_change_buffer()
{
change_limit= change_buffer;
/*13:*/
#line 261 "common.w"

while(1){
change_line++;
if(!!input_ln(change_file))return;
if(limit<buffer+2)continue;
if(buffer[0]!!='@')continue;
if(xisupper(buffer[1]))buffer[1]= tolower(buffer[1]);
if(buffer[1]=='x')break;
if(buffer[1]=='y'||buffer[1]=='z'||buffer[1]=='i'){
loc= buffer+2;
err_print("!! Missing @x in change file");

}
}

/*:13*/
#line 252 "common.w"
;
/*14:*/
#line 278 "common.w"

do{
change_line++;
if(!!input_ln(change_file)){
err_print("!! Change file ended after @x");

return;
}
}while(limit==buffer);

/*:14*/
#line 253 "common.w"
;
/*15:*/
#line 288 "common.w"

{
change_limit= change_buffer-buffer+limit;
strncpy(change_buffer,buffer,limit-buffer+1);
}

/*:15*/
#line 254 "common.w"
;
}

/*:12*//*16:*/
!endgroup
\endgroup
\vfill\eject

\def\runninghead{������� A --- ����� {\tentt CWEAVE}}

񎎒����������� ������� \.{common.tex} �������� ���:

\vskip6pt
\begingroup \def\tt{\eighttt} \baselineskip9pt
\verbatim
\M{12}Procedure \PB{\\{prime\_the\_change\_buffer}}
sets \PB{\\{change\_buffer}} in preparation for the next matching operation.
Since blank lines in the change file are not used for matching, we have
\PB{$(\\{change\_limit}\E\\{change\_buffer}\W\R\\{changing})$} if and only if
the change file is exhausted. This procedure is called only when
\PB{\\{changing}} is 1; hence error messages will be reported correctly.
!vskip-.5!baselineskip
\Y\B\&{void} \\{prime\_the\_change\_buffer}(\,)\1\1\2\2\6
${}\{{}$\1\6
${}\\{change\_limit}\K\\{change\_buffer}{}$;\C{ this value is used if the
change file ends }\6
\X13:Skip over comment lines in the change file; \PB{\&{return}} if end of file%
\X;\6
\X14:Skip to the next nonblank line; \PB{\&{return}} if end of file\X;\6
\X15:Move \PB{\\{buffer}} and \PB{\\{limit}} to \PB{\\{change\_buffer}} and %
\PB{\\{change\_limit}}\X;\6
\4${}\}{}$\2\par
\fi
!vskip-.5!baselineskip
\M{13}While looking for a line that begins with \.{@x} in the change file, we
allow lines that begin with \.{@}, as long as they don't begin with \.{@y},
\.{@z} or \.{@i} (which would probably mean that the change file is fouled up).
!vskip-.5!baselineskip
\Y\B\4\X13:Skip over comment lines in the change file; \PB{\&{return}} if end
of file\X${}\E{}$\6
\&{while} (\T{1})\5
${}\{{}$\1\6
${}\\{change\_line}\PP;{}$\6
\&{if} ${}(\R\\{input\_ln}(\\{change\_file})){}$\1\5
\&{return};\2\6
\&{if} ${}(\\{limit}<\\{buffer}+\T{2}){}$\1\5
\&{continue};\2\6
\&{if} ${}(\\{buffer}[\T{0}]\I\.{'@'}){}$\1\5
\&{continue};\2\6
\&{if} (\\{xisupper}(\\{buffer}[\T{1}]))\1\5
${}\\{buffer}[\T{1}]\K\\{tolower}(\\{buffer}[\T{1}]);{}$\2\6
\&{if} ${}(\\{buffer}[\T{1}]\E\.{'x'}){}$\1\5
\&{break};\2\6
\&{if} ${}(\\{buffer}[\T{1}]\E\.{'y'}\V\\{buffer}[\T{1}]\E\.{'z'}\V\\{buffer}[%
\T{1}]\E\.{'i'}){}$\5
${}\{{}$\1\6
${}\\{loc}\K\\{buffer}+\T{2};{}$\6
\\{err\_print}(\.{"!!\ Missing\ @x\ in\ cha}\)\.{nge\ file"});\6
\4${}\}{}$\2\6
\4${}\}{}$\2\par
\U12.\fi
!vskip-.5!baselineskip
\M{14}Here we are looking at lines following the \.{@x}.
!vskip-.5!baselineskip
\Y\B\4\X14:Skip to the next nonblank line; \PB{\&{return}} if end of file\X${}%
\E{}$\6
\&{do}\5
${}\{{}$\1\6
${}\\{change\_line}\PP;{}$\6
\&{if} ${}(\R\\{input\_ln}(\\{change\_file})){}$\5
${}\{{}$\1\6
\\{err\_print}(\.{"!!\ Change\ file\ ended}\)\.{\ after\ @x"});\6
\&{return};\6
\4${}\}{}$\2\6
\4${}\}{}$\2\5
\&{while} ${}(\\{limit}\E\\{buffer}){}$;\par
\U12.\fi
!vskip-.5!baselineskip
\M{15}\B\X15:Move \PB{\\{buffer}} and \PB{\\{limit}} to \PB{\\{change\_buffer}}
and \PB{\\{change\_limit}}\X${}\E{}$\6
${}\{{}$\1\6
${}\\{change\_limit}\K\\{change\_buffer}-\\{buffer}+\\{limit};{}$\6
${}\\{strncpy}(\\{change\_buffer},\39\\{buffer},\39\\{limit}-\\{buffer}+%
\T{1});{}$\6
\4${}\}{}$\2\par
\Us12\ET16.\fi
!endgroup
\endgroup
\vfil\eject

\def\runninghead{������� A --- ������������� ��������}

� ��� ��� ���� �� ����� �������� �������� ��� ������.

\M{12}Procedure \PB{\\{prime\_the\_change\_buffer}}
sets \PB{\\{change\_buffer}} in preparation for the next matching operation.
Since blank lines in the change file are not used for matching, we have
\PB{$(\\{change\_limit}\E\\{change\_buffer}\W\R\\{changing})$} if and only if
the change file is exhausted. This procedure is called only when
\PB{\\{changing}} is 1; hence error messages will be reported correctly.

\Y\B\&{void} \\{prime\_the\_change\_buffer}(\,)\1\1\2\2\6
${}\{{}$\1\6
${}\\{change\_limit}\K\\{change\_buffer}{}$;\C{ this value is used if the
change file ends }\6
\X13:Skip over comment lines in the change file; \PB{\&{return}} if end of file%
\X;\6
\X14:Skip to the next nonblank line; \PB{\&{return}} if end of file\X;\6
\X15:Move \PB{\\{buffer}} and \PB{\\{limit}} to \PB{\\{change\_buffer}} and %
\PB{\\{change\_limit}}\X;\6
\4${}\}{}$\2\par
\fi

\M{13}While looking for a line that begins with \.{@x} in the change file, we
allow lines that begin with \.{@}, as long as they don't begin with \.{@y},
\.{@z} or \.{@i} (which would probably mean that the change file is fouled up).

\Y\B\4\X13:Skip over comment lines in the change file; \PB{\&{return}} if end
of file\X${}\E{}$\6
\&{while} (\T{1})\5
${}\{{}$\1\6
${}\\{change\_line}\PP;{}$\6
\&{if} ${}(\R\\{input\_ln}(\\{change\_file})){}$\1\5
\&{return};\2\6
\&{if} ${}(\\{limit}<\\{buffer}+\T{2}){}$\1\5
\&{continue};\2\6
\&{if} ${}(\\{buffer}[\T{0}]\I\.{'@'}){}$\1\5
\&{continue};\2\6
\&{if} (\\{xisupper}(\\{buffer}[\T{1}]))\1\5
${}\\{buffer}[\T{1}]\K\\{tolower}(\\{buffer}[\T{1}]);{}$\2\6
\&{if} ${}(\\{buffer}[\T{1}]\E\.{'x'}){}$\1\5
\&{break};\2\6
\&{if} ${}(\\{buffer}[\T{1}]\E\.{'y'}\V\\{buffer}[\T{1}]\E\.{'z'}\V\\{buffer}[%
\T{1}]\E\.{'i'}){}$\5
${}\{{}$\1\6
${}\\{loc}\K\\{buffer}+\T{2};{}$\6
\\{err\_print}(\.{"!\ Missing\ @x\ in\ cha}\)\.{nge\ file"});\6
\4${}\}{}$\2\6
\4${}\}{}$\2\par
\U12.\fi

\M{14}Here we are looking at lines following the \.{@x}.

\Y\B\4\X14:Skip to the next nonblank line; \PB{\&{return}} if end of file\X${}%
\E{}$\6
\&{do}\5
${}\{{}$\1\6
${}\\{change\_line}\PP;{}$\6
\&{if} ${}(\R\\{input\_ln}(\\{change\_file})){}$\5
${}\{{}$\1\6
\\{err\_print}(\.{"!\ Change\ file\ ended}\)\.{\ after\ @x"});\6
\&{return};\6
\4${}\}{}$\2\6
\4${}\}{}$\2\5
\&{while} ${}(\\{limit}\E\\{buffer}){}$;\par
\U12.\fi

\M{15}\B\X15:Move \PB{\\{buffer}} and \PB{\\{limit}} to \PB{\\{change\_buffer}}
and \PB{\\{change\_limit}}\X${}\E{}$\6
${}\{{}$\1\6
${}\\{change\_limit}\K\\{change\_buffer}-\\{buffer}+\\{limit};{}$\6
${}\\{strncpy}(\\{change\_buffer},\39\\{buffer},\39\\{limit}-\\{buffer}+%
\T{1});{}$\6
\4${}\}{}$\2\par
\Us12\ET16.\fi

\vfil\eject\titletrue
\rightskip=0pt % get out of C mode (cf. \B)
\sfcode`;=1500 \pretolerance 200 \hyphenpenalty 50 \exhyphenpenalty 50

\def\runninghead{������� B --- ������������� �������}
\section �������~B: ���� \.{cwebmac.tex}.
���� ���� ��������� ������ ``plain \TEX/'' �������������, ������������
��� ��������� ������ \.{CWEAVE}.

\vskip6pt
\begingroup \def\tt{\eighttt} \baselineskip9pt
\def\printmacs{\input cwebmac}
\verbatim
!printmacs
!endgroup
\endgroup
\vfill\eject

\def\runninghead{������� C --- ��������� �� ��������������}
\section �������~C: ꀊ ������������ ��������� \.{CWEB}.
쀊�������������, ������������ � \.{cwebmac}, ������������ ���������
������ � ��������� ������� ��� ������������� ���������� ������
\.{CWEAVE}, � ���� ����� ���������� --- ���������� ��������� ��
������������.

\def\point#1.{\yskip\indent#1.\quad\ignorespaces}

\point 1. � ���������� � ����������� ������� ������� \.{PLAIN} ��������
������ �����: ����� ������ `\.{\{\\mc UNIX\}}' � �������� {\mc UNIX},
���������� ���������� ������� �������� ������� (medium-size caps);
����� ����� ������ `\.{\{\\sc STUFF\}}' ���
������ {\sc STUFF} ������� "����� ���������" (small caps);
������ ����� ����� ������� ������ ������������ �������
\.{\\titlefont} � \.{\\ttitlefont} ��� ���������� ���������, ���
\.{\\ttitlefont} ���������� ����� ���� "������� �������".
쀊������������� \.{\\UNIX/} � \.{\\CEE/} ���������� \UNIX/ � \CEE/,
���������  �������� ���������� �������.

\point 2. ꎃ�� � ������ \TEX/ ����������� �������������,  ������ ���
�������� ��� `\.{|identifier|}'. � ����� �������� �����������
`\.{\\\\\{identifier\}}'. ��������� ����� ��������� ���������,
�� ������ ������� �� �������� \\{identifier} � ������, ��������� ��
����� �������������� \.{CWEAVE} ��� ����������� \CEE/. ꐎ�� ����, ��
������ ������ �������� ��������� `\.{\\}' ����� ������ ��������
�������������, �������� � �������������.

\point 3. 䋟 ��������� ����� "������� �������", ����� `\.{CWEB}', �����
��������������� �������� `\.{\\.}' (��������, `\.{\\.\{CWEB\}}').
瀄���� �������� ����� �������, ������� �������� `\.{\\}' �����
���������, ������� ����������� � ������ `special string characters'
������� \.{CWEAVE}, �.�., ����� �������� `\.{\\}', ������ �������
� ��. ������ � ������ `\.{\\\ }' �������� � ������� �������
"�������� �������"; ����� �������� ������������ ������ ����� ���������
������������������, ����������� `\.{\{\ \}}'. 呋� ������ �������
�������, ��� ����� ���� ������� �� ����� � ������� `\.{\\)}'\,; ����
\TEX/ ����� �������� ��������� ������, �� �� �������� �� ���� �������,
��������� `\.{\\}' ��� ������ ��������.

\point 4. � ��������� �����: \.{\\pagewidth}, \.{\\pageheight},
� \.{\\fullpageheight} ����� ���� �������������� � ������-���������,
���������� \.{CWEB}-����, ��� ������� ������ �������� ��������.
獀����� �� ���������
$$\lpile{\.{\\pagewidth=6.5in}\cr
  \.{\\pageheight=8.7in}\cr
  \.{\\fullpageheight=9in}\cr}$$
������������ ��� ���������� ����� �����������; \.{\\fullpageheight}
���������� ��������� \.{\\pageheight} � �������� ��������������� ���������
� ������ ������� ������ ��������. �� ��������� ���� �� ������ �� ����
���������� ������� ���������� ������� \.{\\setpage}.

\point 5. 쀊��� \.{\\pageshift} ���������� ��������, �� �������
�������������� �������� (�.�., � ��������� ��������) ����� �������� ��
��������� � ������������� (������ ������). 臌���� ��� ��������, �����
�������� ������������ �����, � ������� ������ ������� ����� ������������� ��
��������������� �������� �����.

\point 6. 񎄅������ \.{\\title} ���������� ������ ������ ��������
������ ���������� �������; �� ��������� ��� \.{\\jobname}.

\point 7. ��� ������ �������� ������������� ����� 1. ����� ������ ��
�������� 16, �������� ���������� �� �������� 15, �����������
`\.{\\def\\contentspagenumber\{15\}}
\.{\\pageno=\\contentspagenumber} \.{\\advance\\pageno by 1}'.

\point 8. ꎌ������ ����� \.{\\iftitle} ����� ��������� �����
�����������, ���� ������ `\.{\\titletrue}'. ���� �������� ---
\.{\\titlefalse}, �� ����������� ����������, ��� ��� �������� ����������
��� ������� �� ����������.

䋟 �������� �������� �������� ��������� ���������� ������ ���������
�������: \.{\\topofcontents} ���������� ��������������� �����
����������� ���������� ����������, � \.{\\botofcontents} --- ����� �����.
򈏈���� �����������:
$$\lpile{\.{\\def\\topofcontents\{\\null\\vfill}\cr
  \.{ { }\\titlefalse \% include headline on the contents page}\cr
  \.{ { }\\def\\rheader\{\\mainfont The \{\\tt CWEAVE\}{ }processor\\hfil\}}\cr
  \.{ { }\\centerline\{\\titlefont The \{\\ttitlefont CWEAVE\}{ }processor\}}\cr
  \.{ { }\\vskip 15pt \\centerline\{(Version 3.0)\}{ }\\vfill\}}\cr}$$
����������� \.{\\rheader}, ���������� ������������ �������������� �������,
����� � ���� ������ ����������, ����� ���������� ������ ���������� � �������
����� �������� ����������.

\point 9. 䀍��� ���������� ��������� � ����, ������� ����������� �����
��������� �������; ������ ��������� ������ ������������� ���� ������.
􀉋 \.{common.toc} ����� ��������� ���:
$$\lpile{\.{\\ZZ \{Introduction\}\{0\}\{1\}\{23\}}\cr
  \.{\\ZZ \{The character set\}\{2\}\{5\}\{24\}}\cr}$$
� �.�. 쀊��� \.{\\topofcontents} ����� ��������������
\.{\\ZZ}, ��� ��� ���������� ����� ���� �������� � ����� ������ �������.

\point 10. 荎��� ������ ���������� ���� ���������� ��������� �����
\.{CWEAVE} �� ��������, ������� ����� �������������� ���������.
퀏�����, ������� \TEX/'� ��������� 500 �������, ���� ������ ����������
��� ���������� ������������ ������ ���������� ��������� �/��� ��������.
ꎃ�� ����� ������� �������� �� �������� �� ����� ������ �����,
������� ���������� ��� ������� ����� ���� ������� �� ��� ������������
�������, ����� ������� �������� ������ ��� �������.

툆� ������ ���������� ������ ��������� �������� ���� \.{CWEAVE} �� ��� �����:
�� ����� ���������� $\alpha$, $\beta$, � $\gamma$, ��� ������ �����
���������� ��������� �������.
⑅ ������� ������ ������������ � ��������� $\alpha$, � ����� ����
����������� \TEX/'� ������ ���� �������� � ������ $\beta$ � $\gamma$.
����� ������������ ����� ���������, �� ������ ������������ � ���� �����:
������ ��������� ������� $\beta$ � $\gamma$ ������ ���� ���������������,
� ������ ���������� ���� ���� ������ ������ ���� ����������.

􀉋 \.{cwebmac} �������� ��� ��������� �����: \.{\\contentsfile} �
\.{\\readcontents}, ������� ��������� ���������� ����������� ��������.  퀌
��������� �������� `\.{\\def\\contentsfile\{cont1\}}' � ��������� $\alpha$,
� `\.{\\def\\contentsfile\{cont2\}}' --- � ��������� $\beta$;
��� �������� \TEX/ ������� ������ ���������� $\alpha$ � $\beta$ �
����� \.{cont1.tex} � \.{cont2.tex}. 򅏅�� � $\gamma$ �� ���������
$$\.{\\def\\readcontents\{\\input cont1 \\input cont2
  \\input \\contentsfile\}}\,,$$
������� ��� ������ ������ � ������ �������.

� �� �����, ��-�������� ������ ������� ������� �������� ���������
�������. �� �� �� ����� �� ������� ����� �������� � ��������� $\beta$
���������:
$$\lpile{\.{\\message\{Please type the last page number of part 1: \}}\cr
  \.{\\read -1 to \\temp \\pageno=\\temp \\advance\\pageno by 1}\cr}$$
䀋�� ����������� ���������� ������ �������� �� ������� \TEX/'�;
����������� ����������� ���������� � ������ $\gamma$.

���� �����, ����������, ����� �������������� ��� ��������� ���������
����� �� ������������ ����� ����������.

\point 11. ␅������  ����� �������� � ������ ��������, �����������
������ �������. 퀏�����, ��� ����� ������������ ����� �������
������� ��� `\TeX'. \.{CWEAVE} ������������� ��� ������� ������� ������
���� ������� ������� (������ ���� � �������� ����):
`\.{@\^}' ���� ��������� �����, � `\.{@.}' --- ����� "������� �������".
� ���� �� ���������� ������� `\TeX' � ��������� �����,
����� `\.{@\^\\TeX@>}', ��� �������� ������ `\.{\\}',
� ���� ������� ������� �� �������� ������ � �������, �������������
�� T.

�������� ����� ������������ ����������� `\.{@:}', ��������� ������,
������� ������ ������� ����:
$$\.{\\def\\9\#1\{\}}$$
� ������ ������, � �������, `\.{@:TeX\}\{\\TeX@>}' � ����� \.{CWEB}-�����;
\.{CWEAVE} �������� ��� � ������ � ���������� �������, ��������������
�����, � ����������� ���������� `\.{\\9\{TeX\}\{\\TeX\}}', �������
�����������, ��� ���� �� ����� ���������.

���������� � ����� ������ ����� ���������� ������� ��������, ��� ��� ���
����� ���� ����������� � ����� ����������� �������.
텊������ ���� �������� �������� ����� ``special refinements''; ������
����� �� ``kludges''.

\point 12. ꎌ������� ����� \.{\\secno} ������������� �����
������� �������������� ������.

\point 13. 呋� �� ������ ������� �� ������ ������ ������, ������� ����
�������� (� ������� ����� ���������) � ����������,
��������� ������� `\.{\\let\\maybe=\\iffalse}'
� ���������, ����� ������ ������� ����� \.{CWEB}. ��������� ���������
�������� ������� �� ������ �����������.

\point 14. 䋟 ������ �� ������ ������ (�� ��-���������), ��������������
������� \.{\\A}, \.{\\ET}, \.{\\Q}, \.{\\U},
\.{\\ch}, \.{\\fin}, \.{\\con}, \.{\\today}, \.{\\datethis}, �
\.{\\datecontentspage}. 񎁑������ \.{CWEAVE} �������� �� ���������.

\point 15. ⛂�� ��������� ������ ��������� ����� ���� ������������
�������� � ������� \.{\\noatl}, \.{\\noinx}, \.{\\nosecs}, \.{\\nocon}.

\point 16. ⑅ �������������� ����� � ������ ����������� ���������
�������  ������� plain \TEX/ ����� �������� � ���������� \.{CWEB} �
�������� ���, ��� ��� ������� � �����~9 {\sl The \TEX/book}, � �����
�����������. ������ "�����" (������ \.{\\.}) ������ ��������� ��� \.{\\:}.

\point 17. "瀊���������������" ������ \.{cwebmac.tex} ����������
��������� �������������� �����������, ������� ����� �����������
�������������. 퀏�����, ���� �� ��� ��������� ������
��������, ���� � ��� ���������� �������. ������� D, E, � F � ������
������ ����� ����������� ���������� � �������������� ������������������
�����, ������� �������� `$\gets$' �� `$=$' � ��������� ��������. �
������ ����������� ��� ����������, ����� ������, ����� ������ ��� ������
��������.

\vfill\end
