% 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 \.{} \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. Ретечпд об тхуулйк същл: Уетзек Лптпр \.{} \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/, дмс ртпзтбннйтпчбойс. Ой фпф, ой дтхзпк убн рп уеве ое ртедпуфбчмсеф чуезп оепвипдйнпзп, оп вхдхюй дпмцощн пвтбъпн пвRедйоеощ, плбъщчбафус лхдб впмее рпмеъощнй, юен рптпъош. Уфтхлфхтб лпнршафетопк ртпзтбннщ нпцеф вщфш ртедуфбчмеоб, лбл ``уефш'' (``web'' --- ``рбхфйоб''), упуфпсэбс йъ нопцеуфчб чъбйноп ъбчйуйнщи юбуфек. Юфпвщ дплхнеофйтпчбфш фблха ртпзтбннх, оепвипдйнп прйубфш лбцдха фблха юбуфш й ее чъбйнппфопыеойс у дтхзйнй. Утедуфчб пвтбвпфлй фелуфпч, ртедпуфбчмсенще \TeX{}, рпъчпмсаф обн прйубфш мплбмшоха уфтхлфхтх лбцдпк юбуфй ртпзтбннщ, б утедуфчб ртпзтбннйтпчбойс същлб \CEE/ --- жптнбмшоп й пдопъобюоп урегйжйгйтпчбфш бмзптйфнщ. ПвRедйойч йи, нщ рпмхюбен уфймш ртпзтбннйтпчбойс, нблуйнбмшоп урпупвуфчхаэйк рпойнбойа уфтхлфхтщ умпцощи ртпзтбнн, й пдопчтенеооп --- иптпып дплхнеофйтпчбооще ртпзтбннщ, дмс лпфптщи бчфпнбфйюеулй пвеуреюйчбефус чъбйнопе уппфчефуфчйе ртпзтбннщ й дплхнеофбгйй. Уйуфенб \.{CWEB} упуфпйф йъ дчхи ртпзтбнн, объчбоощи \.{CWEAVE} й \.{CTANGLE}. Ртй ртпзтбннйтпчбойй ч уйуфене \.{CWEB} ртпзтбннб об същле \CEE/ й дплхнеофбгйс л оек пвRедйоеощ ч пдопн жбкме, объщчбенпн \.{CWEB}-жбкм, у йнеоен чтпде \.{something.w}. Лпнбодб `\.{cweave} \.{something}' упъдбеф жбкм \.{something.tex}, лпфптщк у рпнпэша \TeX{} ртечтбэбефус ч лтбуйчп пжптнмеооха (``pretty printed'') четуйа \.{something.w}, лпфптбс упвмадбеф чуе фйрпзтбжулйе упзмбыеойс, фблйе лбл дйъбко уфтбойгщ, йурпмшъпчбойе пфуфхрпч, лхтуйчощи й цйтощи ытйжфпч, нбфенбфйюеулйи уйнчпмпч. Дпрпмойфемшоп бчфпнбфйюеулй уфтпйфус уйуфенб ретелтеуфощи уущмпл. Бобмпзйюоп, лпнбодб `\.{ctangle} \.{something}' рптпцдбеф ртпзтбннх об същле \CEE/ \.{something.c}, лпфптбс нпцеф вщфш пфлпнрймйтпчбоб ч йурпмойнщк лпд. Рпнйнп ртедпуфбчмеойс хдпвопзп утедуфчб дплхнеофйтпчбойс, \.{CWEB} тбуыйтсеф същл \CEE/ чпънпцопуфша неосфш неуфбнй юбуфй фелуфб ртпзтбннщ, фбл юфп впмшыйе ртпзтбнноще уйуфенщ нпзхф вщфш чпуртйосфщ гемйлпн ч фетнйоби оевпмшыйи уелгйк й йи мплбмшощи чъбйнпучсъек. Ртпзтбннб \.{CTANGLE} объчбоб фбл рпфпнх, юфп поб тбууфбчмсеф уелгйй web-уфтхлфхтщ ч рптсдле, фтевхенпн \CEE/; ртейнхэеуфчпн ртпзтбннйтпчбойс ч \.{CWEB} счмсефус фп, юфп бмзптйфнщ нпзхф вщфш чщтбцеощ ч "тбъчетохфпк" жптне, ч лпфптпк лбцдбс уелгйс пвRсуосефус пфдемшоп пф дтхзйи. Ртпзтбннб \.{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/-юбуфш, упдетцбэбс нбфетйбм, тбъRсуосаэйк ухфш упдетцйнпзп уелгйй. \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}'. Бобмпзйюоп нпцоп йурпмшъпчбфш уплтбэеойе `\.{@}' й ф.д. Йнеоб уелгйк ч ртпюйи умхюбси дпмцощ упчрбдбфш рпуйнчпмшоп, ъб йулмаюеойен рпумедпчбфемшопуфек ртпвемшощи уйнчпмпч (упвуфчеооп ртпвемб, уйнчпмпч фбвхмсгйй, лпогб уфтплй й/ймй уфтбойгщ), лпфптще фтблфхафус лбл пдйо ртпвем. Ч обюбме й лпоге йнеой чуе ртпвемшоще уйнчпмщ вхдхф пфвтпыеощ. Фбл, `\.{@< Clear { }the arrays @>}' вхдеф уппфчефуфчпчбфш йнеой ч ртедщдхэен ртйнете. Ртпвемшоще уйнчпмщ рпуме нопзпфпюйс фблце вхдхф йзоптйтпчбфшус, оп ое ретед ойн, фбл юфп `\.{@}' ое уппфчефуфчхеф `\.{@}'. \section Юфп дембеф \.{CTANGLE}. Лбл вщмп улбъбоп чщые, уелгйс обюйобефус `\.{@\ }' мйвп `\.{@*}', оп ойюезп --- п фпн, лбл поб демйфус об \TeX-юбуфш, ртпнецхфпюоха й \CEE/-юбуфй. Ртпнецхфпюобс юбуфш обюйобефус у ретчщн рпсчмеойен ч феме уелгйй `\.{@d}' мйвп `\.{@f}', б \CEE/-юбуфш обюйобефус ретчщн `\.{@c}' ймй `\.{@
=}'. Ч рпумедоен умхюбе йнс ртйучбйчбефус дбоопк \CEE/-уелгйй, еумй це уелгйс обюбфб `\.{@c}', фп поб вхдеф {\sl оейнеопчбоопк}. Лпоуфтхлгйс `\.{@
}' нпцеф рпсчйфшус ч феме \CEE/-уелгйй ртпйъчпмшопе лпмйюеуфчп тбъ: рпумедхаэйе уущмлй об йнс пъобюбаф езп "йурпмшъпчбойе", б ое "пвRсчмеойе", ф.е. юфп йнеопчбообс уелгйс, пртедемеообс зде-мйвп еэе, дпмцоб вщфш чуфбчмеоб ч ьфп неуфп \CEE/-ртпзтбннщ. Декуфчйфемшоп, пуопчобс йдес \.{CTANGLE} --- упъдбфш ртпзтбннх, пвRедйойч оелпфптпе лпмйюеуфчп йнеопчбоощи й оейнеопчбоощи уелгйк. Фпюоще ртбчймб фблпзп пвRедйоеойс фблпчщ: чобюбме чуе нблтппртедемеойс, пфнеюеооще `\.{@d}' ртепвтбъхафус ч йоуфтхлгйй ртертпгеууптб й упвйтбафус ч обюбме жбкмб. Дбмее фхдб лпрйтхафус оейнеопчбооще \CEE/-уелгйй. Фбл пвтбъхефус ретчпе ртйвмйцеойе фелуфб ртпзтбннщ (дпмцоб ухэеуфчпчбфш ипфс вщ пдоб оейнеопчбообс уелгйс). Ъбфен чуе йнеоб уелгйк, обкдеооще ч рпмхюеоопн фелуфе, ъбнеосафус \CEE/-юбуфснй уппфчефуфчхаэйи уелгйк й ьфпф ртпгеуу рпдуфбопчлй ртпдпмцбефус дп тбътеыеойс чуеи уущмпл. Чуе лпннеофбтйй хдбмсафус, рпулпмшлх рпмхюеообс ртпзтбннб об \CEE/ ое ртедобъобюбефус дмс юфеойс юемпчелпн. Еумй пдоп й фп це йнс вщмп дбоп впмее юен пдопк уелгйй, \CEE/-жтбзнеоф рпмхюбефус пвRедйоеойен \CEE/-юбуфек чуеи фблйи уелгйк. Ьфп плбъщчбефус рпмеъощн, обртйнет, еумй йнеефус уелгйс у йнеоен `Global variables', ч лпфптпк вхдхф упвтбощ чуе змпвбмшоще ретенеооще, зде вщ пой ой вщмй пвRсчмеощ. Лпздб оеулпмшлп уелгйк йнеаф пдйоблпчпе йнс, \.{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-фелуф, чпънпцоп, юфп чбн рпобдпвйфус упумбфшус об ретенеооще й дтхзйе пвRелфщ \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)} \.{@}} \cr \hbox{\.{...} \.{using} \.{the} \.{algorithm} \.{in} \.{|@|.}} } $$ Ретчщк йъ ойи нпцеф вщфш обкдео ч \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/ лпоуфбофб пвRсчмсефус чпушнетйюопк ймй ыеуфобдгбфйтйюопк у рпнпэша ртежйлуб \.' мйвп~\." уппфчефуфчеооп; ч \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}-жбкм.) Пдоп йъ ртедобъобюеойк ьфпк чпънпцопуфй ч фпн, юфпвщ упъдбфш ъбзпмпчпюоще жбкмщ дмс ртпзтбннощи нпдхмек. Дтхзйн ртйнетпн ее йурпмшъпчбойс умхцйф зеоетбгйс феуфпч, тбуртпуфтбосенщи у чбыек ртпзтбннпк. Упитбосс йуипдоще фелуфщ ртпзтбннщ, ее ъбзпмпчпюоще жбкмщ й феуфпчще ртпгедхтщ упчнеуфоп, нщ йнеен впмшые ыбоупч рпддетцбфш йи упзмбупчбоопуфш. Пфнефйн, юфп йнеопчбообс уелгйс нпцеф вщфш чщчедеоб ч оеулпмшлп тбъмйюощи чщипдощи жбкмпч, рпулпмшлх чщ нпцефе хрпнсохфш \.{@} лбл ч \.{@(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] $*$ Опнет уелгйй ч йоделуе вхдеф рпдюетлохф, еумй `\.{@!}' оерпутедуфчеооп ртедыеуфчхеф йдеофйжйлбфптх мйвп хртбчмсаэенх фелуфх, рпнеэбенпнх ч йоделу. Ьфп упзмбыеойе йурпмшъхаф, юфпвщ тбъмйюбфш уелгйй, ч лпфптщи йдеофйжйлбфпт пртедемео мйвп пвRсуосефус оелпфптщн пупвщн пвтбъпн, пф уелгйк, зде по йурпмшъпчбо. Уущмлй об ъбтеъетчйтпчбооще умпчб мйвп пдопуйнчпмшоще йдеофйжйлбфптщ ч йоделу ое рпнеэбафус, ъб йулмаюеойен рпдюетлохфщи. `\.{@!}' оесчоп чуфбчмсефус \.{CWEAVE} лпздб йдеофйжйлбфпт пвRсчмсефус мйвп пртедемсефус ч \CEE/-лпде; обртйнет, пртедемеойе $$\hbox{\&{int} \\{array}[\\{max\_dim}], \\{count}${}=\\{old\_count};$}$$ рпнеэбеф ч йоделу йнеоб \\{array} й \\{count}, чщдемсс йи рпдюетлйчбойен. Нефлй, пртедемеойс жхолгйк, рпдпвоще \\{main}(\&{int}~\\{argc},\,\&{char}~$*$\\{argv}[\,]), й пртедемеойс \&{typedef} фблце рпдтбъхнечбаф рпдюетлйчбойе. Пртедемеойс жхолгйк уфбтпзп уфймс (веъ ртпфпфйрб) ое пртедемсаф йи бтзхнеофпч, фен ое неоее, бтзхнеофщ вхдхф рпмбзбфшус пртедемеоощнй (й вхдхф пфпвтбцбфшус ч йоделуе у рпдюетлйчбойен), еумй йи фйрщ пвRсчмеощ ретед фемпн жхолгйй пвщюощн пвтбъпн, (обртйнет, `\&{int}~\\{argc}; \&{char}~${*}\\{argv}[\,]$; $\{\,\ldots\,\}$'). \subsec Ретекден, облпоег, л хртбчмсаэйн уйнчпмбн, лпфптще чмйсаф фпмшлп об тбвпфх \.{CTANGLE}. \@' [MCc] Йурпмшъпчбойе ьфпзп хртбчмсаэезп уйнчпмб прбуоп, рпулпмшлх езп ъобюеойе ч \.{CWEB} ухэеуфчеооп пфмйюбефус пф езп ртппвтбъб ч \.{WEB}. Ч \.{CWEB} по тбултщчбефус ч деусфйтйюоха лпоуфбофх, уппфчефуфчхаэха ASCII-лпдх уфтплй едйойюопк дмйощ (ф.е. \.{@'a'} ртепвтбъхефус \.{CTANGLE} ч \.{97}, б \.{@'\\t'} --- ч \.9). Чщ нпцефе чпурпмшъпчбфшус ьфйн, еумй ипфйфе тбвпфбфш у ASCII об нбыйое, ое йурпмшъхаэек ьфх лпдйтпчлх, оп ч впмшыйоуфче умхюбеч утедуфчб същлб \CEE/, пртедемеооще ч \.{}, чрпмое дпуфбфпюощ дмс хуфтбоеойс ъбчйуйнпуфй пф лпдйтпчлй уйнчпмпч. \@\& [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/ фбл, юфпвщ по чпуртйойнбм чуе йи уйнчпмщ лбл вхлчщ. Ч ртпфйчопн умхюбе умедхеф мйвп пвRсчйфш ч \TEX/'е 8-вйфоще уйнчпмщ ``блфйчощнй'', мйвп ъбзтхъйфш ытйжфщ, упдетцбэйе ч уппфчефуфчхаэек рпъйгйй охцоще урегйбмшоще уйнчпмщ. (Дмс йдеофйжйлбфптпч йурпмшъхефус ытйжф, чщвйтбенщк лпнбодпк \TEX/'б \.{\\it}.) Йэйфе урегйбмшоще нблтпрблефщ, обрйубооще дмс йурпмшъпчбойс ч \.{CWEB} чбыезп същлб мйвп, еумй ое впйфеуш фтхдопуфек, обрйыйфе учпк упвуфчеоощк. \subsec Умедхаэйе чпуенш хртбчмсаэйи уйнчпмпч (б йнеооп, `\.{@,}', `\.{@/}', `\.{@|}', `\.{@\#}', `\.{@+}', `\.{@;}', `\.{@[}', й `\.{@]}') ое чмйсаф об зеоетбгйа \CEE/-ртпзтбннщ \.{CTANGLE}, оп ч оелпфптщи оепвщюощи умхюбси нпзхф рпнпюш хмхюыйфш юйфбенпуфш ее \TEX/-ртедуфбчмеойс, рпмхюеоопзп \.{CWEAVE}. Чуфпеоощк бмзптйфн жптнбфйтпчбойс чеушнб иптпы, лпздб ртйнеосефус л уйофблуйюеулй ртбчймшопк ртпзтбнне, оп ое нпцеф хюеуфш чуеи чпънпцощи уйфхбгйк, рпфпнх юфп тбвпфбеф у жтбзнеофбнй фелуфб, члмаюбаэйнй нблтпущ й йнеоб уелгйк; фблйе жтбзнеофщ ое чуездб упвмадбаф уйофблуйу. Оеунпфтс об фп, юфп \.{CWEB} рпъчпмсеф ретелтщчбфш бчфпнбфйюеулпе жптнбфйтпчбойе, мхюыек уфтбфезйек вхдеф обюбфш у оезп, рпулпмшлх нпцеф плбъбфшус, юфп рпобдпвсфус мйыш оеулпмшлп немлйи лпттелфйч. \@, [MCc] Ьфпф хртбчмсаэйк уйнчпм чуфбчмсеф фполйк ртпвем (thin space) ч чщчпд \.{CWEAVE}. Йопздб дпрпмойфемшощк ртпвем нпцеф рпобдпвйфшус ртй оепвщюопн йурпмшъпчбойй нблтпупч, обртйнет, лпздб дчб йдеофйжйлбфптб тбурпмпцеощ тсдпн. \@/ [MC] Ьфпф хртбчмсаэйк уйнчпм чщъщчбеф тбътщч уфтплй ч \CEE/-ртпзтбнне, пфжптнбфйтпчбоопк \.{CWEAVE}. Тбътщчщ уфтпл бчфпнбфйюеулй чщвйтбафус \TEX/'пн рп уиене, тбвпфбаэек лпттелфоп ч 99\%\ умхюбеч, оп йопздб оепвипдйнп счопе хлбъбойе, юфпвщ тбъвйеойе уппфчефуфчпчбмп, рпнйнп чоеыоек ртйчмелбфемшопуфй, мпзйле ртпзтбннщ. Обртйнет, йурпмшъхкфе `\.{@/@,}' ретед лпннеофбтйснй, юфпвщ пой обюйобмйуш у опчпк уфтплй. \@| [MC] Ьфпф хртбчмсаэйк уйнчпм ъбдбеф оепвсъбфемшощк тбътщч уфтплй рпутедй чщтбцеойс. Обртйнет, еумй йнеефус дмйоопе чщтбцеойе ч ртбчпк юбуфй ртйучбйчбойс, у рпнпэша `\.{@|}' нпцоп хлбъбфш ч оен чпънпцоще фпюлй тбътщчб, лпфптще вхдхф мхюые рпдюетлйчбфш мпзйлх ртпзтбннщ, оецемй чщвтбооще \TEX/'пн бчфпнбфйюеулй. \@\# [MC] Ьфпф хртбчмсаэйк уйнчпм чщъщчбеф тбътщч уфтплй рпдпвоп \.{@/}, б фблце чуфбчмсеф оевпмшыпк дпрпмойфемшощк ртпвем ч фпюлх тбътщчб. По нпцеф йурпмшъпчбфшус, обртйнет, нецдх мпзйюеулй тбъмйюощнй зтхррбнй нблтпупч, тбънеэеоощнй ч пдопк уелгйй. \.{CWEB} бчфпнбфйюеулй чуфбчмсеф фблпк дпрпмойфемшощк ртпвем нецдх жхолгйснй, чоеыойнй пвRсчмеойснй й жхолгйснй, б фблце нецдх пвRсчмеойснй й претбфптбнй ч феме жхолгйй. \@+ [MC] Ьфпф хртбчмсаэйк уйнчпм нбулйтхеф тбътщч уфтплй, лпфптщк дпмцео вщфш удембо \.{CWEAVE}, обртйнет, ретед `\&{else}', еумй чщ ипфйфе тбънеуфйфш лптпфлха if--else лпоуфтхлгйа об пдопк уфтпле. Еумй хлбъбфш `\.{\{@+}' ч обюбме упуфбчопзп претбфптб, счмсаэезпус фемпн жхолгйй, фп ретчпе пвRсчмеойе ймй претбфпт жхолгйй вхдхф тбурпмпцеощ об фпк це уфтпле, юфп й пфлтщчбаэбс улпвлб, й у пфуфхрпн, лпфптщк вхдеф ртедыеуфчпчбфш чфптпнх претбфптх ймй пвRсчмеойа об умедхаэек уфтпле. \@; [MC] Ьфпф хртбчмсаэйк уйнчпм ртй жптнбфйтпчбойй бобмпзйюео фпюле у ъбрсфпк, оп оечйдйн. Чщ нпцефе чпурпмшъпчбфшус ойн, обртйнет, рпуме йнеой уелгйй ймй нблтпуб, лпздб \CEE/-лпд, ртедуфбчмеоощк ч ьфпк уелгйй ймй нблтпуе, еуфш упуфбчопк претбфпт мйвп плбоюйчбефус фпюлпк у ъбрсфпк. Ртйнетпн фблпк лпоуфтхлгйй счмсефус $$\lpile{\.{if (condition) macro @;}\cr \.{else break;}\cr}$$ зде пртедемеойен \\{macro} умхцйф упуфбчопк претбфпт (ъблмаюеоощк ч жйзхтоще улпвлй). Ьфп иптпып йъчеуфощк оедпуфбфпл уйофблуйуб \CEE/. \@{[} [MC] Ун. \.{@]}. \@] [MC] Рпнеуфйфе лчбдтбфоще улпвлй \.{@[...@]} чплтхз фелуфб ртпзтбннщ, лпфптщк дпмцео вщфш пфжптнбфйтпчбо \.{CWEAVE} лбл чщтбцеойе, еумй ьфпзп ое ртпйъпымп. (Фблпе йопздб умхюбефус у оепвщюощнй бтзхнеофбнй нблтпупч.) Фблце чуфбчмскфе `\.{@[@]}' нецдх йнеоен фйрб й мечпк улпвлпк, лпздб пвRсчмсефе хлбъбфемш об жхолгйа, чтпде, $$\.{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}. Ьфп пвRсуосефус фен, юфп \.{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/-лпде. Обртйнет, рхуфш `\.{@}' ъбкнеф неуфп `\.{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 \.{@@;@\#}\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 */ @; @; @; } @ 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). @= while(1) { change_line++; if (!!input_ln(change_file)) return; if (limit } } @ Here we are looking at lines following the \.{@@x}. @= do { change_line++; if (!!input_ln(change_file)) { err_print("!! Change file ended after @@x"); @.Change file ended...@> return; } } while (limit==buffer); @ @= { 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}', обн рпнеыбеф уйнчпм `\.{\\}', й ьфпф ьменеоф йоделуб ое рпсчйфус чнеуфе у дтхзйнй, обюйобаэйнйус об 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