cwebmac.tex
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:15k
源码类别:

通讯编程

开发平台:

Visual C++

  1. % standard macros for CWEB listings (in addition to plain.tex)
  2. % Version 3.1 --- September 1994
  3. ifxdocumentstyleundefinedelseendinputfi % LaTeX will use other macros
  4. xdeffmtversion{fmtversion+CWEB3.1}
  5. let:=. % preserve a way to get the dot accent
  6.  % (all other accents will still work as usual)
  7. parskip 0pt % no stretch between paragraphs
  8. parindent 1em % for paragraphs and for the first line of C text
  9. fontninerm=cmr9
  10. letmc=ninerm % medium caps
  11. defCEE/{{mc Cspacefactor1000}}
  12. defUNIX/{{mc Ukern-.05emNIXspacefactor1000}}
  13. defTEX/{TeX}
  14. defCPLUSPLUS/{{mc CPPspacefactor1000}}
  15. defCee{CEE/} % for backward compatibility
  16. def9#1{}
  17. fonteightrm=cmr8
  18. letsc=eightrm % small caps (NOT a caps-and-small-caps font)
  19. letmainfont=tenrm
  20. letcmntfonttenrm
  21. %fonttenss=cmss10 letcmntfonttenss % alternative comment font
  22. fonttitlefont=cmr7 scaledmagstep4 % title on the contents page
  23. fontttitlefont=cmtt10 scaledmagstep2 % typewriter type in title
  24. fonttentex=cmtex10 % TeX extended character set (used in strings)
  25. fontdimen7tentex=0pt % no double space after sentences
  26. def\#1{leavevmodehbox{it#1/kern.05em}} % italic type for identifiers
  27. def|#1{leavevmodehbox{$#1$}} % one-letter identifiers look better this way
  28. def&#1{leavevmodehbox{bf
  29.   def_{kern.04emvbox{hrule width.3em height .6pt}kern.08em}%
  30.   #1/kern.05em}} % boldface type for reserved words
  31. def.#1{leavevmodehbox{tentex % typewriter type for strings
  32.   let\=BS % backslash in a string
  33.   let{=LB % left brace in a string
  34.   let}=RB % right brace in a string
  35.   let~=TL % tilde in a string
  36.   let =SP % space in a string
  37.   let_=UL % underline in a string
  38.   let&=AM % ampersand in a string
  39.   let^=CF % circumflex in a string
  40.   #1kern.05em}}
  41. def){discretionary{hbox{tentexBS}}{}{}}
  42. defAT{@} % at sign for control text (not needed in versions >= 2.9)
  43. defATL{parnoindentbgroupcatcode`_=12 postATL} % print @l in limbo
  44. defpostATL#1 #2 {bf letter \{uppercase{char"#1}}
  45.    tangles as tentex "#2"egrouppar}
  46. defnoATL#1 #2 {}
  47. defnoatl{letATL=noATL} % suppress output from @l
  48. defATH{Xkern-.5em:Preprocessor definitionsX}
  49. letPB=relax % hook for program brackets |...| in TeX part or section name
  50. chardefAM=`& % ampersand character in a string
  51. chardefBS=`\ % backslash in a string
  52. chardefLB=`{ % left brace in a string
  53. chardefRB=`} % right brace in a string
  54. defSP{{ttchar` }} % (visible) space in a string
  55. chardefTL=`~ % tilde in a string
  56. chardefUL=`_ % underline character in a string
  57. chardefCF=`^ % circumflex character in a string
  58. newboxPPbox % symbol for ++
  59. setboxPPbox=hbox{kern.5ptraise1pthbox{sevenrm+kern-1pt+}kern.5pt}
  60. defPP{copyPPbox}
  61. newboxMMbox setboxMMbox=hbox{kern.5ptraise1pthbox{sevensychar0
  62.  kern-1ptchar0}kern.5pt}
  63. defMM{copyMMbox}
  64. newboxMGbox % symbol for ->
  65. setboxMGbox=hbox{kern-2ptlower3pthbox{tenichar'176}kern1pt}
  66. defMG{copyMGbox}
  67. defMRL#1{mathrel{letK==#1}}
  68. %defMRL#1{KK#1}defKK#1#2{buildrel;#1over{#2}}
  69. letGG=gg
  70. letLL=ll
  71. letNULL=Lambda
  72. mathchardefAND="2026 % bitwise and; also & (unary operator)
  73. letOR=mid % bitwise or
  74. letXOR=oplus % bitwise exclusive or
  75. defCM{{sim}} % bitwise complement
  76. newboxMODbox setboxMODbox=hbox{eightrm%}
  77. defMOD{mathbin{copyMODbox}}
  78. defDC{kern.1em{::}kern.1em} % symbol for ::
  79. defPA{mathbin{.*}} % symbol for .*
  80. defMGA{mathbin{MG*}} % symbol for ->*
  81. defthis{&{this}}
  82. newboxbak setboxbak=hbox to -1em{} % backspace one em
  83. newboxbakksetboxbakk=hbox to -2em{} % backspace two ems
  84. newcountind % current indentation in ems
  85. def1{globaladvanceind by1hangindentind em} % indent one more notch
  86. def2{globaladvanceind by-1} % indent one less notch
  87. def3#1{hfilpenalty#10hfilneg} % optional break within a statement
  88. def4{copybak} % backspace one notch
  89. def5{hfilpenalty-1hfilnegkern2.5emcopybakkignorespaces}% optional break
  90. def6{ifmmodeelsepar % forced break
  91.   hangindentind emnoindentkernind emcopybakkignorespacesfi}
  92. def7{Y6} % forced break and a little extra space
  93. def8{hskip-ind emhskip 2em} % no indentation
  94. newcountgdepth % depth of current major group, plus one
  95. newcountsecpagedepth
  96. secpagedepth=3 % page breaks will occur for depths -1, 0, and 1
  97. newtoksgtitle % title of current major group
  98. newskipintersecskip intersecskip=12pt minus 3pt % space between sections
  99. letyskip=smallskip
  100. def?{mathrel?}
  101. defnote#1#2.{Ynoindent{hangindent2embaselineskip10pteightrm#1~#2.par}}
  102. deflapstar{rlap{*}}
  103. defstsec{rightskip=0pt % get out of C mode (cf. B)
  104.   sfcode`;=1500 pretolerance 200 hyphenpenalty 50 exhyphenpenalty 50
  105.   noindent{let*=lapstarbfsecstar.quad}}
  106. letstartsection=stsec
  107. defdefin#1{globaladvanceind by 2 1&{#1 } } % begin `define' or `format'
  108. defA{note{See also section}} % xref for doubly defined section name
  109. defAs{note{See also sections}} % xref for multiply defined section name
  110. defB{rightskip=0pt plus 100pt minus 10pt % go into C mode
  111.   sfcode`;=3000
  112.   pretolerance 10000
  113.   hyphenpenalty 1000 % so strings can be broken (discretionary  is inserted)
  114.   exhyphenpenalty 10000
  115.   globalind=2 1 unskip}
  116. defC#1{55quad$/ast,${cmntfont #1}$,ast/$}
  117. letSHCC % "// short comments" treated like "/* ordinary comments */"
  118. %defC#1{55quad$triangleright,${cmntfont#1}$,triangleleft$}
  119. %defSHC#1{55quad$diamond,${cmntfont#1}}
  120. defD{defin{#define}} % macro definition
  121. letE=equiv % equivalence sign
  122. defET{ and~} % conjunction between two section numbers
  123. defETs{, and~} % conjunction between the last two of several section numbers
  124. defF{defin{format}} % format definition
  125. letG=ge % greater than or equal sign
  126. % H is long Hungarian umlaut accent
  127. letI=ne % unequal sign
  128. defJ{.{@&}} % TANGLE's join operation
  129. letK== % assignment operator
  130. %letK=leftarrow % "honest" alternative to standard assignment operator
  131. % L is Polish letter suppressed-L
  132. outerdefM#1{MN{#1}ifonvfilpenalty-100vfilneg % beginning of section
  133.   vskipintersecskipstartsectionignorespaces}
  134. outerdefN#1#2#3.{gdepth=#1gtitle={#3}MN{#2}% beginning of starred section
  135.   ifonifnum#1<secpagedepth vfileject % force page break if depth is small
  136.     elsevfilpenalty-100vfilnegvskipintersecskipfifi
  137.   message{*secno} % progress report
  138.   edefnext{writecont{ZZ{#3}{#1}{secno}% write to contents file
  139.                    {noexpandthepageno}}}next % ZZ{title}{depth}{sec}{page}
  140.   ifonstartsection{bf#3.quad}ignorespaces}
  141. defMN#1{par % common code for M, N
  142.   {xdefsecstar{#1}let*=emptyxdefsecno{#1}}% remove * from section name
  143.   ifxsecnosecstar onmaybe elseontrue fi
  144.   mark{{{tensy x}secno}{thegdepth}{thegtitle}}}
  145. % each mark is {section reference or null}{depth plus 1}{group title}
  146. % O is Scandinavian letter O-with-slash
  147. % P is paragraph sign
  148. defQ{note{This code is cited in section}} % xref for mention of a section
  149. defQs{note{This code is cited in sections}} % xref for mentions of a section
  150. letR=lnot % logical not
  151. % S is section sign
  152. defT#1{leavevmode % octal, hex or decimal constant
  153.   hbox{$def?{kern.2em}%
  154.     def$##1{egroup_{,rm##1}bgroup}% suffix to constant
  155.     def_{cdot 10^{aftergroup}}% power of ten (via dirty trick)
  156.     let~=oct let^=hex {#1}$}}
  157. defU{note{This code is used in section}} % xref for use of a section
  158. defUs{note{This code is used in sections}} % xref for uses of a section
  159. letV=lor % logical or
  160. letW=land % logical and
  161. defX#1:#2X{ifmmodegdefXX{null$null}elsegdefXX{}fi % section name
  162.   XX$langle,${#2eightrmkern.5em#1}$,rangle$XX}
  163. defY{paryskip}
  164. letZ=le
  165. letZZ=let % now you can write the control sequence ZZ
  166. let*=*
  167. %defoct{hbox{rmchar'23kern-.2emitaftergroup?aftergroup}} % WEB style
  168. %defhex{hbox{rmchar"7Dttaftergroup}} % WEB style
  169. defoct{hbox{$^circ$kern-.1emitaftergroup?aftergroup}}% CWEB style
  170. defhex{hbox{$^{scriptscriptstyle#}$ttaftergroup}} % CWEB style
  171. defvb#1{leavevmodehbox{kern2ptvrulevtop{vbox{hrule
  172.         hbox{strutkern2pt.{#1}kern2pt}}
  173.       hrule}vrulekern2pt}} % verbatim string
  174. defonmaybe{letifon=maybe} letmaybe=iftrue
  175. newififon newififtitle newififpagesaved
  176. deflheader{mainfontthepagenoeightrmqquadgrouptitlehfilltitleqquad
  177.   mainfonttopsecno} % top line on left-hand pages
  178. defrheader{mainfonttopsecnoeightrmqquadtitlehfillgrouptitle
  179.   qquadmainfontthepageno} % top line on right-hand pages
  180. defgrouptitle{leti=Iletj=Juppercaseexpandafter{expandafter
  181.                         takethreetopmark}}
  182. deftopsecno{expandaftertakeonetopmark}
  183. deftakeone#1#2#3{#1}
  184. deftaketwo#1#2#3{#2}
  185. deftakethree#1#2#3{#3}
  186. defnullsec{eightrmkern-2em} % the kern-2em cancels qquad in headers
  187. letpage=pagebody raggedbottom
  188. % defpage{box255 }normalbottom % faster, but loses plain TeX footnotes
  189. defnormaloutput#1#2#3{ifoddpagenohoffset=pageshiftfi
  190.  shipoutvbox{
  191.   vbox tofullpageheight{
  192.   iftitleglobaltitlefalse
  193.   elsehbox topagewidth{vbox to10pt{}ifoddpageno #3else#2fi}fi
  194.   vfill#1}} % parameter #1 is the page itself
  195.   globaladvancepageno by1}
  196. gtitle={.{CWEB} output} % this running head is reset by starred sections
  197. mark{noexpandnullsec0{thegtitle}}
  198. deftitle{expandafteruppercaseexpandafter{jobname}}
  199. deftopofcontents{centerline{titlefonttitle}vskip.7in
  200.   vfill} % this material will start the table of contents page
  201. defbotofcontents{vfill
  202.   centerline{covernote}} % this material will end the table of contents page
  203. defcovernote{}
  204. defcontentspagenumber{0} % default page number for table of contents
  205. newdimenpagewidth pagewidth=6.5in % the width of each page
  206. newdimenpageheight pageheight=8.7in % the height of each page
  207. newdimenfullpageheight fullpageheight=9in % page height including headlines
  208. newdimenpageshift pageshift=0in % shift righthand pages wrt lefthand ones
  209. defmagnify#1{mag=#1pagewidth=6.5trueinpageheight=8.7truein
  210.   fullpageheight=9trueinsetpage}
  211. defsetpage{hsizepagewidthvsizepageheight} % use after changing page size
  212. defcontentsfile{jobname.toc} % file that gets table of contents info
  213. defreadcontents{input contentsfile}
  214. defreadindex{input jobname.idx}
  215. defreadsections{input jobname.scn}
  216. newwritecont
  217. output{setbox0=page % the first page is garbage
  218.   openoutcont=contentsfile
  219.        writecont{catcode `noexpand@=11relax}   % makeatletter
  220.   globaloutput{normaloutputpagelheaderrheader}}
  221. setpage
  222. vbox to vsize{} % the first topmark won't be null
  223. defch{note{The following sections were changed by the change file:}
  224.   let*=relax}
  225. newboxsbox % saved box preceding the index
  226. newboxlbox % lefthand column in the index
  227. definx{parvskip6pt plus 1fil % we are beginning the index
  228.   defpage{box255 } normalbottom
  229.   writecont{} % ensure that the contents file isn't empty
  230.        writecont{catcode `noexpand@=12relax}   % makeatother
  231.   closeoutcont % the contents information has been fully gathered
  232.   output{ifpagesavednormaloutput{boxsbox}lheaderrheaderfi
  233.     globalsetboxsbox=page globalpagesavedtrue}
  234.   pagesavedfalse eject % eject the page-so-far and predecessors
  235.   setboxsboxvbox{unvboxsbox} % take it out of its box
  236.   vsize=pageheight advancevsize by -htsbox % the remaining height
  237.   hsize=.5pagewidth advancehsize by -10pt
  238.     % column width for the index (20pt between cols)
  239.   parfillskip 0pt plus .6hsize % try to avoid almost empty lines
  240.   deflr{L} % this tells whether the left or right column is next
  241.   output{if Llrglobalsetboxlbox=page gdeflr{R}
  242.     elsenormaloutput{vbox topageheight{boxsboxvss
  243.         hbox topagewidth{boxlboxhfilpage}}}lheaderrheader
  244.     globalvsizepageheightgdeflr{L}globalpagesavedfalsefi}
  245.   message{Index:}
  246.   parskip 0pt plus .5pt
  247.   outerdefI##1, {parhangindent2emnoindent##1:kern1em} % index entry
  248.   def[##1]{$underline{##1}$} % underlined index item
  249.   rm rightskip0pt plus 2.5em tolerance 10000 let*=lapstar
  250.   hyphenpenalty 10000 parindent0pt
  251.   readindex}
  252. deffin{parvfilleject % this is done when we are ending the index
  253.   ifpagesavednullvfillejectfi % output a null index column
  254.   if Llrelsenullvfillejectfi % finish the current page
  255.   parfillskip 0pt plus 1fil
  256.   defgrouptitle{NAMES OF THE SECTIONS}
  257.   lettopsecno=nullsec
  258.   message{Section names:}
  259.   output={normaloutputpagelheaderrheader}
  260.   setpage
  261.   defnote##1##2.{quad{eightrm##1~##2.}}
  262.   defQ{note{Cited in section}} % crossref for mention of a section
  263.   defQs{note{Cited in sections}} % crossref for mentions of a section
  264.   defU{note{Used in section}} % crossref for use of a section
  265.   defUs{note{Used in sections}} % crossref for uses of a section
  266.   defI{parhangindent 2em}let*=*
  267.   readsections}
  268. defcon{parvfilleject % finish the section names
  269. % ifoddpagenoelsetitletruenullvfillejectfi % for duplex printers
  270.   rightskip 0pt hyphenpenalty 50 tolerance 200
  271.   setpage output={normaloutputpagelheaderrheader}
  272.   titletrue % prepare to output the table of contents
  273.   pageno=contentspagenumber
  274.   defgrouptitle{TABLE OF CONTENTS}
  275.   message{Table of contents:}
  276.   topofcontents
  277.   line{hfil Sectionhbox to3em{hss Page}}
  278.   letZZ=contentsline
  279.   readcontentsrelax % read the contents info
  280.   botofcontents end} % print the contents page(s) and terminate
  281. defcontentsline#1#2#3#4{ifnum#2=0 smallbreakfi
  282.     line{consetup{#2}#1
  283.       rmleadershbox to .5em{.hfil}hfil #3hbox to3em{hss#4}}}
  284. defconsetup#1{ifcase#1 bf % depth -1 (@**)
  285.   or % depth 0 (@*)
  286.   or hskip2em % depth 1 (@*1)
  287.   or hskip4em % depth 2 (@*2)
  288.   or hskip6em % depth 3 (@*3)
  289.   or hskip8em % depth 4 (@*4)
  290.   or hskip10em % depth 5 (@*5)
  291.   else hskip12em fi} % depth 6 or more
  292. defnoinx{letinx=end} % no indexes or table of contents
  293. defnosecs{letFIN=fin deffin{letparfillskip=end FIN}}
  294.     % no index of section names or table of contents
  295. defnocon{letcon=end} % no table of contents
  296. deftoday{ifcasemonthor
  297.   Januaryor Februaryor Marchor Aprilor Mayor Juneor
  298.   Julyor Augustor Septemberor Octoberor Novemberor Decemberfi
  299.   spacenumberday, numberyear}
  300. newcounttwodigits
  301. defhours{twodigits=time dividetwodigits by 60 printtwodigits
  302.   multiplytwodigits by-60 advancetwodigits bytime :printtwodigits}
  303. defgobbleone1{}
  304. defprinttwodigits{advancetwodigits100
  305.   expandaftergobbleonenumbertwodigits
  306.   advancetwodigits-100 }
  307. defTeX{{ifmmodeitfi
  308.    leavevmodehbox{Tkern-.1667emlower.424exhbox{E}hskip-.125em X}}}
  309. def,{relaxifmmodemskipthinmuskipelsethinspacefi}
  310. defdatethis{defstartsection{leftline{sctoday at hours}bigskip
  311.   letstartsection=stsecstsec}}
  312.   % say `datethis' in limbo, to get your listing timestamped before section 1
  313. defdatecontentspage{%
  314.   deftopofcontents{leftline{sctoday at hours}bigskip
  315.    centerline{titlefonttitle}vfill}} % timestamps the contents page