/usr/share/doc/fweb/html-info/Tokens.html is in fweb-doc 1.62-13.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 | <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<!-- Created by GNU Texinfo 6.1, http://www.gnu.org/software/texinfo/ -->
<head>
<title>FWEB: Tokens</title>
<meta name="description" content="FWEB: Tokens">
<meta name="keywords" content="FWEB: Tokens">
<meta name="resource-type" content="document">
<meta name="distribution" content="global">
<meta name="Generator" content="makeinfo">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link href="index.html#Top" rel="start" title="Top">
<link href="Concept-index.html#Concept-index" rel="index" title="Concept index">
<link href="Parameter-index.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="FWEB-macros.html#FWEB-macros" rel="up" title="FWEB macros">
<link href="Built_002din-functions.html#Built_002din-functions" rel="next" title="Built-in functions">
<link href="Macro-protection.html#Macro-protection" rel="prev" title="Macro protection">
<style type="text/css">
<!--
a.summary-letter {text-decoration: none}
blockquote.indentedblock {margin-right: 0em}
blockquote.smallindentedblock {margin-right: 0em; font-size: smaller}
blockquote.smallquotation {font-size: smaller}
div.display {margin-left: 3.2em}
div.example {margin-left: 3.2em}
div.lisp {margin-left: 3.2em}
div.smalldisplay {margin-left: 3.2em}
div.smallexample {margin-left: 3.2em}
div.smalllisp {margin-left: 3.2em}
kbd {font-style: oblique}
pre.display {font-family: inherit}
pre.format {font-family: inherit}
pre.menu-comment {font-family: serif}
pre.menu-preformatted {font-family: serif}
pre.smalldisplay {font-family: inherit; font-size: smaller}
pre.smallexample {font-size: smaller}
pre.smallformat {font-family: inherit; font-size: smaller}
pre.smalllisp {font-size: smaller}
span.nolinebreak {white-space: nowrap}
span.roman {font-family: initial; font-weight: normal}
span.sansserif {font-family: sans-serif; font-weight: normal}
ul.no-bullet {list-style: none}
-->
</style>
</head>
<body lang="en">
<a name="Tokens"></a>
<div class="header">
<p>
Next: <a href="Built_002din-functions.html#Built_002din-functions" accesskey="n" rel="next">Built-in functions</a>, Previous: <a href="Macro-features.html#Macro-features" accesskey="p" rel="prev">Macro features</a>, Up: <a href="FWEB-macros.html#FWEB-macros" accesskey="u" rel="up">FWEB macros</a> [<a href="Parameter-index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Concept-index.html#Concept-index" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
<a name="Special-tokens"></a>
<h4 class="subsection">7.2.2 Special tokens</h4>
<a name="index-Macros_002c-special-tokens-for"></a>
<p>The following special tokens may be used in the text of <small>FWEB</small> macro
definitions:
</p>
<a name="ANSI-C_002dcompatible-tokens"></a>
<h4 class="subsubsection">7.2.2.1 ANSI C-compatible tokens</h4>
<div class="example">
<pre class="example"> ## <span class="roman">— Paste tokens on either side to form a new identifier.</span>
#<i>parameter</i> <span class="roman">— Convert parameter to string (without expansion).</span>
</pre></div>
<p>For example,
</p>
<div class="example">
<pre class="example">@m FORTRAN(type, name) type _##name()
@m TRACE(where) puts("At " #where)
@a
FORTRAN(int, fcalc); // <span class="roman">Expands to ‘<samp>int _fcalc();</samp>’</span>
TRACE(predictor); // <span class="roman">Expands to ‘<samp>puts("At " "predictor");</samp>’</span>
</pre></div>
<a name="Extensions-to-ANSI-C-macro-syntax"></a>
<h4 class="subsubsection">7.2.2.2 Extensions to ANSI C macro syntax</h4>
<p>The most frequently used extensions are the following ones associated
with variable arguments: ‘<samp>#0</samp>’, ‘<samp>#<i>n</i></samp>’, and ‘<samp>#.</samp>’.
<small>FORTRAN</small>-77 users should also employ ‘<samp>#:0</samp>’ to allow symbolic
rather than numeric statement labels. Try not to use the other
extensions; they are experimental, complicated, and unlikely to work in
all situations.
</p>
<p>In the following list, the forms ‘<samp>#{n}</samp>’ and ‘<samp>#[n]</samp>’ may not
work correctly in complicated situations. This is a design deficiency
that may be corrected someday.
</p>
<blockquote>
<dl compact="compact">
<dt><code>#*<i>param</i></code></dt>
<dd><p>Like ‘<samp>#<i>parameter</i></samp>’, but pass a quoted string through unchanged.
</p></dd>
<dt><code>#!<i>param</i></code></dt>
<dd><p>Don’t expand argument.
</p></dd>
<dt><code>#'<i>param</i></code></dt>
<dd><p>Convert parameter to a single-quoted string (no expansion).
</p></dd>
<dt><code>#"<i>param</i></code></dt>
<dd><p>Convert parameter to a double-quoted string (no expansion).
</p></dd>
<dt><code>#0</code></dt>
<dd><p>Number of variable arguments.
</p></dd>
<dt><code>#<i>n</i></code></dt>
<dd><p>n-th variable argument, counting from 1.
</p></dd>
<dt><code>#{0}</code></dt>
<dd><p>Like ‘<samp>#0</samp>’, but the argument may be a macro expression known at run time.
</p></dd>
<dt><code>#{<i>n</i>}</code></dt>
<dd><p>Like ‘<samp>#<i>n</i></samp>’, but the argument may be a macro expression.
</p></dd>
<dt><code>#[0]</code></dt>
<dd><p>The total number of arguments (fixed + variable). (The
argument inside the brackets may be a macro expression.)
</p></dd>
<dt><code>#[<i>n</i>]</code></dt>
<dd><p>The <i>n</i>th argument (including the fixed ones), counting
from 1. (The argument inside the brackets may be a macro expressions.
</p></dd>
<dt><code>#.</code></dt>
<dd><p>Comma-separated list of all variable arguments.
</p></dd>
<dt><code>#:0</code></dt>
<dd><p>Unique statement number (expanded in phase 1).
</p></dd>
<dt><code>#:<i>nnn</i></code></dt>
<dd><p>Unique statement number for each invocation of this macro (expanded in phase 2).
</p></dd>
<dt><code>#<</code></dt>
<dd><p>Begin a module name.
</p></dd>
<dt><code>#,</code></dt>
<dd><p>Internal comma; doesn’t delimit macro argument.
</p></dd>
</dl>
</blockquote>
<p>A few examples of the more important of these tokens are as follows:
</p>
<div class="example">
<pre class="example">@c
@m FPRINTF(fmt,...) fprintf(fp,fmt,#.)
// Use the whole list of variable args.
@m B(...) printf("There were %i arguments\n", #0)
// Use the number of var args.
@n
@
@m DONE #:0 // Symbolic statement label in FORTRAN.
@a
goto DONE
...
DONE:
call endup
</pre></div>
<hr>
<div class="header">
<p>
Next: <a href="Built_002din-functions.html#Built_002din-functions" accesskey="n" rel="next">Built-in functions</a>, Previous: <a href="Macro-features.html#Macro-features" accesskey="p" rel="prev">Macro features</a>, Up: <a href="FWEB-macros.html#FWEB-macros" accesskey="u" rel="up">FWEB macros</a> [<a href="Parameter-index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Concept-index.html#Concept-index" title="Index" rel="index">Index</a>]</p>
</div>
</body>
</html>
|