This is Info file fweb.info, produced by Makeinfo-1.55 from the input
file fweb.texinfo.

   This file documents FWEB...

   Copyright 1993 John A. Krommes

   Permission is granted to make and distribute verbatim      copies of
this manual provided the copyright notice and      this permission
notice are preserved on all copies.

   Permission is granted to process this file through TeX      and
print the results, provided the printed document      carries a copying
permission notice identical to this      one except for the removal of
this paragraph (this      paragraph not being relevant to the printed
manual).

   Permission is granted to copy and distribute modified      versions
of this manual under the conditions for      verbatim copying, provided
also that the section      entitled "Copying" is included exactly as in
the original, and provided      that the entire resulting derived work
is distributed      under the terms of a permission notice identical to
this      one.

   Permission is granted to copy and distribute      translations of
this manual into another language,      under the above conditions for
modified versions,      except that this permission notice may be
stated in a      translation approved by the author.


File: fweb.info,  Node: -F_,  Next: -f,  Prev: -e,  Up: Options

`-F':  Compare output files with old versions.
----------------------------------------------

   When the `-F' option is in effect, FTANGLE writes its output to a
temporary file (or files) instead of to its ultimate destination--e.g.,
`test.c' and/or `test.f'.  After all output is written, the temporary
files are compared with the old version of the files, if they exist.
If the files are identical, the appropriate temporary file is deleted;
otherwise, the temporary file is renamed, effectively overwriting the
old version.  This feature avoids updating the time stamp on the file
unnecessarily, so `make' files won't recompile the output unless it
really has to.

   (Note that with this option in effect, if one used the Unix utility
`touch' to force processing of a group of files, but the WEB sources
are never changed, the `make' file will continue to tangle the sources
no matter how many times it is run, since FTANGLE will never update the
time stamp on the files.)

   The location of the temporary file as well as details of the renaming
procedure are determined by the automatic configuration script during
installation of the processors.  The script `./configure' first looks
for the (non-ANSI) function `tempnam'.  If it finds it, it uses it to
place the temporary file in the directory that FWEB would normally use
for output in the absence of the `-F' option.  (That is usually the
current directory.)  If `tempnam' is not available, the ANSI routine
`tmpnam' is used.  That places the temporary file in a directory
determined by the system.

   To implement the renaming, the `rename' function is used.  This may
fail if `tmpnam' placed the temporary file on a different device.  If
so, an attempt is made to force the rename by using the |system|
routine to issue a `mv' command.  Terminal output indicates the
progress of the renaming.  An asterisk following an output file name
indicates that `rename' did not succeed, but the `mv' command did.


File: fweb.info,  Node: -f,  Next: -h,  Prev: -F_,  Up: Options

`-f':  Turn off module references for identifiers.
--------------------------------------------------

   By default, FWEAVE gives certain entities such as function names a
section-number subscript to indicate where that function was defined.
The `-f' command turns off the subscripting operation.

   The subscript operations are further controlled by the settings of
the style-file parameters `mark_defined'.  *Note S_mark_defined::.


File: fweb.info,  Node: -h,  Next: -I_,  Prev: -f,  Up: Options

`-h':  Get help.
----------------

   This just prints a message saying where further help is available.


File: fweb.info,  Node: -I_,  Next: -i,  Prev: -h,  Up: Options

`-I':  Append to search list for include files.
-----------------------------------------------

   The fundamental search list for include files is defined by the
environment variable `FWEB_INCLUDES', which is a colon-delimited list
such as

     setenv FWEB_INCLUDES .:/usr/fweb:/other/stuff

   The `-I' option appends to this list.


File: fweb.info,  Node: -i,  Next: -i!,  Prev: -I_,  Up: Options

`-i':  Don't print `@I' include files.
--------------------------------------

   If a web file is included via `@I' (*note ATI_::.), for example

     @I formats.hweb

then the `-i' option means to read and process the web file, but don't
print its contents.  This option is often used for large files of macro
definitions, formats, or typedef statements that must be included at the
beginning of even very short web files; it clutters things up to print
such header files all the time.

   Note that files included via `@i' do not respond to `-i' or `-i!'.


File: fweb.info,  Node: -i!,  Next: -L_,  Prev: -i,  Up: Options

`-i!':  Don't read `@I' include files.
--------------------------------------

   If a web file is included via `@I', for example

     @I formats.hweb

then the `-i!' option means to ignore such files completely.  This
option is seldom useful; the `-i' option (*note -i::.) is more often
used.


File: fweb.info,  Node: -L_,  Next: -l,  Prev: -i!,  Up: Options

`-L':  Select global language.
------------------------------

   To select a global language from the command line, say `-Ll', where
l is one of `{c,c++,n,n9,r,r9,x}'.  *Note Languages::.


File: fweb.info,  Node: -l,  Next: -m,  Prev: -L_,  Up: Options

`-l':  Echo input line.
-----------------------

   The option `-l[mmm[:nnn]]' echoes the input line constructed by the
input driver between lines mmm and nnn.  Missing nnn means echo to the
end of file.  Missing mmm means echo from the beginning.

   This option is useful as a debugging tool.  It is often used to
verify that the input driver is inserting semicolons correctly.  For
Fortran-77, it is also useful to verify that comments are being
processed correctly.


File: fweb.info,  Node: -m,  Next: -m4,  Prev: -l,  Up: Options

`-m':  Define WEB macro.
------------------------

   The command-line construction

     -mA(x)=x

defines the WEB macro `A' as though the definition
     @m A(x) x

had appeared at the beginning of the web file.


File: fweb.info,  Node: -m4,  Next: -m;,  Prev: -m,  Up: Options

`-m4':  Understand `m4' built-in commands.
------------------------------------------

   This tells FWEAVE to properly format the reserved words of the `m4'
preprocessor.  The use of this preprocessor is *not recommended*; use
FWEB's built-in preprocessor instead.


File: fweb.info,  Node: -m;,  Next: -n,  Prev: -m4,  Up: Options

`-m;':  Append pseudo-semicolons.
---------------------------------

   When `-m;' is in effect, the construction `@;' is appended
automatically to all WEB macro definitions.

   *This option is not recommended.*  Insert the `@;' by hand when
necessary, as in

     @m SET(x,y) x=1; y=2@;


File: fweb.info,  Node: -n,  Next: -n9,  Prev: -m;,  Up: Options

`-n':  Set global language to Fortran-77.
-----------------------------------------

   *Note Languages::, *Note Fortran::.


File: fweb.info,  Node: -n9,  Next: -n;,  Prev: -n,  Up: Options

`-n9':  Set global language to Fortran-90.
------------------------------------------

   *Note Languages::, *Note Fortran::.


File: fweb.info,  Node: -n;,  Next: -nb,  Prev: -n9,  Up: Options

`-n;':  Supply automatic semicolons (Fortran).
----------------------------------------------

   This is the default mode of operation in Fortran-77; the input driver
automatically appends a semicolon to each logical line of source code.
Since it's the default, you don't have to use it unless you wish to
negate it.  *Note Negating options::.


File: fweb.info,  Node: -nb,  Next: -np,  Prev: -n;,  Up: Options

`-nb':  Number `if's and `do's (Fortran).
-----------------------------------------

   In the woven output, extra comments are added to help one correlate
the block structure of the code.


File: fweb.info,  Node: -np,  Next: -n\,  Prev: -nb,  Up: Options

`-np':  Print semicolons (Fortran).
-----------------------------------

   Although the Fortran input driver automatically terminates logical
lines with semicolons so that the innards of FWEAVE can process them
correctly, the semicolons are by default not printed.  To make them be
printed, use the `-np' option.


File: fweb.info,  Node: -n\,  Next: -n&,  Prev: -np,  Up: Options

`-n\':  Free-form syntax continued by backslash.
------------------------------------------------

   In Fortran-90, this turns on free-form syntax and sets the
continuation character to be the backslash.  For example,

     -n9[-n\]
     @
     @a
     program main;
     x = \
      y;
     end;

   In the tangled output the backslash is converted into Fortran-90's
standard continuation character, the ampersand.


File: fweb.info,  Node: -n&,  Next: -n/,  Prev: -n\,  Up: Options

`-n&':  Free-form syntax continued by ampersand.
------------------------------------------------

   In Fortran-90, this turns on free-form syntax and sets the
continuation character to be the backslash.  For example,

     -n9[-n\]
     @
     @a
     program main;
     x = &
      y;
     end;


File: fweb.info,  Node: -n/,  Next: -n!,  Prev: -n&,  Up: Options

`-n/':  Recognize short comments (Fortran).
-------------------------------------------

   The standard FWEB notation for a short comment is `// ...'.  However,
in Fortran the `//' denotes concatenation by default.  To make it denote
a short comment, use the `-n/' option.  For concatenation, use `\/'.


File: fweb.info,  Node: -n!,  Next: -n),  Prev: -n/,  Up: Options

`-n!':  Make `!' denote short comment (Fortran).
------------------------------------------------


File: fweb.info,  Node: -n),  Next: -o,  Prev: -n!,  Up: Options

`-n)':  Reverse array indices (Fortran)
---------------------------------------

   This flag permits Fortran programmers to use C-style array indices.
Conversions such as the following are made:

     a(k)(i) => a(i,k)
     a(k)(i,j) => a(i,j,k)
     a(k)(j)(i) => a(i,j,k)

This feature permits convenient definitions of macros to deal with
multi-dimensional vectors.


File: fweb.info,  Node: -o,  Next: -q,  Prev: -n),  Up: Options

`-o':  Don't overload operators.
--------------------------------

   (To be finished.)


File: fweb.info,  Node: -q,  Next: -P_,  Prev: -o,  Up: Options

`-q':  Don't translate Ratfor.
------------------------------

   *(Obsolete.)*


File: fweb.info,  Node: -P_,  Next: -p,  Prev: -q,  Up: Options

`-P':  Select TeX processor.
----------------------------

   Say `-PT' or `-PL' to inform FWEAVE that its output will be
processed by TeX or LaTeX, respectively.  If you always use LaTeX, it's
easiest to put `+PL' into the `.fweb' initialization file.


File: fweb.info,  Node: -p,  Next: -r,  Prev: -P_,  Up: Options

`-p':  Buffer up a style-file entry.
------------------------------------

   This option can be used in the `.fweb' initialization file to record
style-file entries that are common to all runs.  This command buffers
up the entries.  They are effectively placed at the beginning of the
local style file, which is read after the command line is processed.
*Note Style::.


File: fweb.info,  Node: -r,  Next: -r9,  Prev: -p,  Up: Options

`-r':  Set global language to Ratfor-77.
----------------------------------------

   *Note Languages::, *Note Ratfor::.


File: fweb.info,  Node: -r9,  Next: -rg,  Prev: -r,  Up: Options

`-r9':  Set global language to Ratfor-90.
-----------------------------------------

   *Note Languages::, *Note Ratfor::.


File: fweb.info,  Node: -rg,  Next: -rk,  Prev: -r9,  Up: Options

`-rg':  Set `goto' parameters.
------------------------------

   This obscure parameter is used for Ratfor (and really should be a
style-file parameter).  Please see the manual.


File: fweb.info,  Node: -rk,  Next: -rK_,  Prev: -rg,  Up: Options

`-k':   Suppress comments about Ratfor translation.
---------------------------------------------------

   By default, the Ratfor translator writes comments about what command
it is translating.  The `-k' option suppresses those comments.
Arguments to this command allows one to suppress comments about only
particular commands; please see the reference guide.


File: fweb.info,  Node: -rK_,  Next: -r;,  Prev: -rk,  Up: Options

`-K':   Write comments about Ratfor translation.
------------------------------------------------

   This is the negative of `-k'; it forces comments about particular
Ratfor commands.


File: fweb.info,  Node: -r;,  Next: -rb,  Prev: -rK_,  Up: Options

`-r;':  Turn on auto-semi mode (Ratfor).
----------------------------------------

   Please don't use this command.  Insert semicolons by hand in your
Ratfor code.


File: fweb.info,  Node: -rb,  Next: -r/,  Prev: -r;,  Up: Options

`-rb':  Number `if's and `do's (Ratfor).
----------------------------------------

   In the woven output, extra comments are added to help one correlate
the block structure of the code.


File: fweb.info,  Node: -r/,  Next: -r!,  Prev: -rb,  Up: Options

`-r/':  Recognize short comments (Ratfor).
------------------------------------------

   The standard FWEB notation for a short comment is `// ...'.  However,
in Ratfor the `//' denotes concatenation by default.  To make it denote
a short comment, use the `-r/' option.  For concatenation, use `\/'.


File: fweb.info,  Node: -r!,  Next: -r),  Prev: -r/,  Up: Options

`-r!':  Make `!' denote short comment (Ratfor).
-----------------------------------------------


File: fweb.info,  Node: -r),  Next: -s,  Prev: -r!,  Up: Options

`-r)':  Reverse array indices (Ratfor)
--------------------------------------


File: fweb.info,  Node: -s,  Next: -T_,  Prev: -r),  Up: Options

`-s':  Print statistics.
------------------------

   `-s' prints statistics about memory usage at the end of the run.

   `-sm' prints statistics about memory usage at the end of the run,
just as does `-s'; it also prints information about dynamic memory
allocations as they occur.  `-smnnn' displays allocations of nnn bytes
or more; if nnn is missing, 10000 is assumed.


File: fweb.info,  Node: -T_,  Next: -t,  Prev: -s,  Up: Options

`-T':  Flag-setting commands for FTANGLE.
-----------------------------------------

   This is a family of commands that set flags appropriate only for
FTANGLE.

* Menu:

* -TD::                Permit processing of deferred macro definitions.
* -Tv::                Don't print header info at top of output.
* -T%::                Don't retain trailing comments.


File: fweb.info,  Node: -TD,  Next: -Tv,  Prev: -T_,  Up: -T_

`-TD':  Permit processing of deferred macro definitions
.......................................................

   Deferred macro definitions are `@m' (or, equivalently, `@#define')
commands that appear in the code part rather than the usual definition
part.  These definitions are evaluated during the output (phase 2), and
can cause confusion when used with the preprocessor commands, which are
evaluated during the input (phase 1).  Because of this confusion,
deferred macro definitions are prohibited by default.  To permit them,
use the `-TD' option.


File: fweb.info,  Node: -Tv,  Next: -T%,  Prev: -TD,  Up: -T_

`-Tv': Don't print header info
..............................

   By default, FTANGLE attempts to be helpful and prints some
information about the command line, input and change files, etc. at the
beginning of the output file.  This information can be deleted by means
of the `-Tv' flag.  (This is done automatically when the `-F' flag is
in effect, since the header information includes a time stamp that would
defeat a successful file comparison.)


File: fweb.info,  Node: -T%,  Prev: -Tv,  Up: -T_

`-T%':  Don't retain trailing comments
......................................

   Unless the `-v' option is used, comments are generally deleted by
FTANGLE as it writes the output file.  However, in the TeX language
such deletions can change the behavior of the output (by introducing
extra spaces).  Therefore, for TeX comments that do not begin a line
are always retained unless the `-T%' command is used.  This command has
no effect for languages other than TeX.


File: fweb.info,  Node: -t,  Next: -U_,  Prev: -T_,  Up: Options

`-t':  Truncate identifiers.
----------------------------

   The truncation option enables one to use a wider character set for
identifiers than the language compiler will accept.  The standard
example is vanilla-flavored Fortran, which doesn't allow the underscore.
If one says ``-tn6{_}'', underscores will be removed from all
identifiers, then the result will be truncated to length 6.  If the
truncation procedure results in non-unique identifiers, these are
listed.


File: fweb.info,  Node: -U_,  Next: -u,  Prev: -t,  Up: Options

`-U':  Convert reserved output tokens to lower case.
----------------------------------------------------

   Particularly during RATFOR expansion, certain output tokens such as
`DO' are produced in upper case.  The `-U' option forces such tokens to
be produced in lower case.


File: fweb.info,  Node: -u,  Next: -v,  Prev: -U_,  Up: Options

`-u':  Undefine macro.
----------------------

   `-uA' undefines the WEB macro previously defined on the command line
(or in `.fweb') via `-m'.

   *CAUTION*:  This command can also undefine built-in functions such
as `$IF'.  Don't do that, since built-ins can use other built-ins
behind the scenes; undefining one can cause very strange behavior.


File: fweb.info,  Node: -v,  Next: -W_,  Prev: -u,  Up: Options

`-v':  Make all comments verbatim.
----------------------------------

   By default, comments are not passed to the tangled output.  With
`-v', all comments are included verbatim in the tangled output.


File: fweb.info,  Node: -W_,  Next: -w,  Prev: -v,  Up: Options

`-W':  Flag-setting commands for FWEAVE.
----------------------------------------

   This is a family of commands that set flags appropriate only for
FWEAVE.  Commands such as `-W[' and `-Wf' can be combined as `-W[f'.

* Menu:

* -W[::                 Turn on processing of bracketed array indices.
* -Wdflmvw::             Don't print various things in woven output.


File: fweb.info,  Node: -W[,  Next: -Wdflmvw,  Prev: -W_,  Up: -W_

`-W[':  Process bracketed array indices
.......................................


File: fweb.info,  Node: -Wdflmvw,  Prev: -W[,  Up: -W_

`-Wdflmvw':  Don't print various things in woven output
.......................................................

   The printing of selected definition-part commands can be suppressed
as follows:

     -Wd --- outer definitions
     -Wf --- format statements
     -Wl --- limbo text definitions
     -Wm --- WEB macro definitions
     -Wv --- operator overloads
     -Ww --- identifier overloads

When these commands are used, associated cross-referencing is suppressed
as well.


File: fweb.info,  Node: -w,  Next: -x,  Prev: -W_,  Up: Options

`-w':  Change name of macro package
-----------------------------------

   The command `-w' means "Don't print `\input fwebmac.sty' as the first
line of the `.tex' output file."  The command `-wfname' means "Print
`\input fname' as the first line."


File: fweb.info,  Node: -x,  Next: -X_,  Prev: -w,  Up: Options

`-x':  Reduce cross-reference information.
------------------------------------------

   Cross-reference information (for FWEAVE) includes the table of
contents ('c'), the index ('i'), and the module list ('m').  The
command `-x' eliminates all of that information.  The command
`-xletters' eliminates the piece of information corresponding to each
letter in the list.  For example, `-xim' eliminates the index and the
module list.


File: fweb.info,  Node: -X_,  Next: -y,  Prev: -x,  Up: Options

`-X':  Print selected cross-reference information.
--------------------------------------------------

   This command is the opposite of `-x'.  *Note -x::.


File: fweb.info,  Node: -y,  Next: -Z_,  Prev: -X_,  Up: Options

`-y':  Allocate dynamic memory.
-------------------------------

   This command changes the default size for a dynamically allocated
memory buffer.  The buffers are indicated by a one- or two-character
abbreviation such as "op".  The command `-yop200' allocates 200 units
for the "op" buffer.

   To query the default allocations, just say `-y'.

   For a more detailed discussion of memory allocation and a menu of the
various dynamic arrays, see *Note Memory allocation::.


File: fweb.info,  Node: -Z_,  Next: -z,  Prev: -y,  Up: Options

`-Z':  Display default style-file parameters.
---------------------------------------------

   The command `-Zabc' prints to the screen the default contents of the
style-file parameters beginning with "abc".  Just `-Z' prints
everything.


File: fweb.info,  Node: -z,  Next: -.,  Prev: -Z_,  Up: Options

`-z':  Change name of style file.
---------------------------------

   The command `-znew.sty' changes the default style-file name
`fweb.sty' to `new.sty'.  The command `-z' means "Don't read any style
file."

   Normally the style file is read from the same directory in which the
WEB file resides.  To force `fweb.sty' to be read from the current
directory, say `-z.'.


File: fweb.info,  Node: -.,  Next: -\,  Prev: -z,  Up: Options

`-.':  Don't recognize dot constants.
-------------------------------------

   If this command is used, the processors will not understand that
constructions such as `.LT.' are operators in Fortran or Ratfor.  This
command is useful if one is trying to modernize the source code to deal
with symbols such as `<' instead of `.LT.'.


File: fweb.info,  Node: -\,  Next: -lp,  Prev: -.,  Up: Options

`-\':  Explicitly escape continued strings.
-------------------------------------------

   (To be finished.)


File: fweb.info,  Node: -lp,  Next: -colon,  Prev: -\,  Up: Options

`-(':  Continue parenthesized strings with backslashes.
-------------------------------------------------------


File: fweb.info,  Node: -colon,  Next: ->,  Prev: -lp,  Up: Options

`-:':  Set starting automatic statement number.
-----------------------------------------------

   Useful for Fortran and Ratfor.  Symbolic statement labels that are
defined with the `#:0' macro command are incremented starting with the
default of 90000.  To change this to 789, say `-:789'.


File: fweb.info,  Node: ->,  Next: -=,  Prev: -colon,  Up: Options

`->':  Redirect output.
-----------------------

   This changes the name of the output file.  If no name is given,
output is redirected to the terminal.


File: fweb.info,  Node: -=,  Next: -#,  Prev: ->,  Up: Options

`-=':  Redirect output.
-----------------------

   Equivalent to `->'.


File: fweb.info,  Node: -#,  Next: -plus,  Prev: -=,  Up: Options

`-#':  Turn off comments about line and module numbers.
-------------------------------------------------------

   By default, tangled output includes comments about the line and
module numbers corresponding to the current piece of code.  To
eliminate this clutter, say `-#'.

   In some cases, bugs in tangled output, particularly Fortran, can be
eliminated by using `-#'.  (But please report the bug anyway; *Note
Support::.)


File: fweb.info,  Node: -plus,  Next: -/,  Prev: -#,  Up: Options

`-+':  Don't interpret compound assignment operators.
-----------------------------------------------------

   Both Ratfor and Fortran attempt to translate the commands `++',
`+=', `--', `-=', `*=', and `/=' into code that behaves as its C
counterpart.  To turn this feature off, use `-+'.


File: fweb.info,  Node: -/,  Next: -!,  Prev: -plus,  Up: Options

`-/':  Recognize short comments (Fortran & Ratfor).
---------------------------------------------------

   If this command is not used, the `//' construction will be
interpreted as concatenation.

   One way of invoking this option is with the global language command,
such as `@n/'.  Another is to put the command into the initialization
file `.fweb'.


File: fweb.info,  Node: -!,  Next: Info options,  Prev: -/,  Up: Options

`-!':  Make `!' denote short comment (Fortran & Ratfor).
--------------------------------------------------------


File: fweb.info,  Node: AT commands,  Next: Comments,  Prev: Starting,  Up: Top

WEB COMMANDS
************

   All WEB commands begin with the character `@'.  It is recommended
that these begin in column 1 if possible.  This is required in some
cases [e.g., the `@x', `@y', and `@z' in change files (*note Change
files::.), or column-oriented Fortran processing].

   Some of these control codes may be used anywhere; others begin a new
part.  For a quick summary of the control-code mappings and to see which
codes begin new parts, use the `-@' option.  *Note -AT::.

* Menu:

Debugging commands:
* @0: AT0.     Turn off debugging.
* @1: AT1.     Display irreducible scraps.
* @2: AT2.     Display detailed scrap reductions.

Literal control characters:
* @@: ATAT.     Insert an '@'.
* @|: AT|.      Vertical bar/optional line break.

Beginning of section:
* @ : ATspace.  Begin minor section.
* @*: AT*.      Begin major section.

Beginning of code part:
* @<: AT<.      Begin module name.
* @>: AT>.      End module name.
* @A: ATA_.     Begin code part.
* @a: ATa.      Begin code part and mark next identifier.

Control codes b-z:
* @b: ATb.      Insert breakpoint command.
* @c: ATc.      Set language to C.
* @c++: ATcpp.  Set language to C++.
* @D: ATD_.     Define outer macro.
* @d: ATd.      Define outer macro and mark it.
* @f: ATf.      Format identifier or module name.
* @I: ATI_.     Include a WEB file, but don't print it.
* @i: ATi.      Include a WEB file.
* @L: ATL_.     Set language.
* @l: ATl.      Specify limbo text.
* @M: ATM_.     Define a WEB macro.
* @m: ATm.      Define a WEB macro and mark it.
* @N: ATN_.     Turn on language-independent mode.
* @n: ATn.      Set language to Fortran-77.
* @n9:ATn9.     Set language to Fortran-90.
* @O: ATO_.     Open new output file (global scope).
* @o: ATo.      Open new output file (local scope).
* @r: ATr.      Set language to Ratfor-77.
* @r9: ATr9.    Set language to Ratfor-90.
* @u: ATu.      Undefine an outer macro.
* @v: ATv.      Overload an operator.
* @W: ATW_.     Overload an identifier.
* @x: ATx.      Terminate ignorable material.
* @y: ATy.	 End first part of change.
* @z: ATz.      Begin ignorable material.

Conversion to ASCII:
* @': ATquote.     Convert single character to ASCII.
* @": AT".         Convert string to ASCII.

Forward referencing:
* @[: AT[.         Mark next identifier as defined in this section.

Comments:
* @/*: AT/*.        Begin a long verbatim comment.
* @//: AT//.        Begin a short verbatim comment.
* @%: AT%.          Ignore everything to next newline.
* @?: AT?.          Begin a compiler directive.
* @(: ATlp.         Begin a meta-comment.
* @): AT).          End a meta-comment.

Special brace:
* @{: ATlb.        Suppress default insertion of breakpoint command.

Index entries:
* @_: AT_.         Force an index entry to be underlined (marked as defined).
* @-: AT-.         Delete index entry for following identifier.
* @+: ATplus.      Force index entry for following identifier.
* @^: AT^.         Make index entry in Roman type.
* @.: ATdot.       Make index entry in typewriter type.
* @9: AT9.         Make index entry in format controlled by `\9'.

Control text:
* @t: ATt.         Put control text into TeX \hbox.
* @=: AT=.         Pass control text verbatim to the output.

Spacing:
* @comma: ATcomma. Insert a thin space.
* @/: AT/.         Insert a line break.
* @|: AT|_.        Insert optional line break in an expression.
* @#: AT#.         Force line break with blank line.
* @~: AT~.         Cancel a line break (tie adjacent lines together).
* @&: AT&.         Join left and right items.

Pseudo (invisible) operators:
* @e: ATe.         Invisible expression.
* @;: AT;.         Invisible semicolon.
* @colon: ATcolon.     Invisible colon.

Miscellaneous:
* @!: AT!.         Inhibit expansion for next macro.


File: fweb.info,  Node: AT0,  Next: AT1,  Prev: AT commands,  Up: AT commands

Debugging commands
==================

   Several commands provide localized versions of the `-1' and `-2'
options related to debugging of pretty-printing.

`@0':  Turn off debugging
-------------------------

   This cancels the effect of a previous `@1' or `@2'.  *Note AT1::,
*Note AT2::.  The `@0' command should appear in a different section
from the `@1' or `@2' commands.


File: fweb.info,  Node: AT1,  Next: AT2,  Prev: AT0,  Up: AT commands

`@1':  Display irreducible scraps
---------------------------------


File: fweb.info,  Node: AT2,  Next: ATAT,  Prev: AT1,  Up: AT commands

`@2':  Display detailed reductions of the scraps
------------------------------------------------


File: fweb.info,  Node: ATAT,  Next: AT|,  Prev: AT2,  Up: AT commands

Literal control characters
==========================

`@@':  The character `@'.
-------------------------

   `@@' inserts the single character `@'.

   Don't forget to double the `@' even inside strings.  For example,

     puts("'@@' is represented by `@@@@'");


File: fweb.info,  Node: AT|,  Next: ATspace,  Prev: ATAT,  Up: AT commands

`@|':  Literal vertical bar, or optional line break.
----------------------------------------------------

   In TeX mode, `@|' inserts a vertical bar.  This is useful inside
LaTeX verbatim environments.  (A simple bar would signal a shift into
code mode, which is probably not what you want.)

   In code mode, `@|' inserts an optional line break in an expression.


File: fweb.info,  Node: ATspace,  Next: AT*,  Prev: AT|,  Up: AT commands

Beginning of section
====================

`@ ':  Begin minor section.
---------------------------

   `@ ' begins a new minor (unstarred) section.  For example,

     @ This is an example of a minor section.  (No entry is made in the table
     of contents.)
     @a
     main()
     {}


File: fweb.info,  Node: AT*,  Next: AT<,  Prev: ATspace,  Up: AT commands

`@*', `@*n':  Begin major section.
----------------------------------

   `@*' begins a new major (starred) section (of level 0).  The command
must be followed by the name of the section (entry in the table of
contents), followed by a period.

   If `@*' is followed by a digit n, it begins a new major section of
level n.  For example,

     @* MAIN PROGRAM.  This begins a major section (of level 0).
     @a
     main()
     {}
     
     @*1 Input routines.  Now follow some subroutines.
     @a
     get_input()
     {}


File: fweb.info,  Node: AT<,  Next: AT>,  Prev: AT*,  Up: AT commands

Beginning of code part
======================

   The code part is begun by the appearance of either `@a' or `@<
Module name @>='.

`@<':  Begin module name.
-------------------------

   `@<' begins a module name, which has the form `@< TeX text @>'.
Module names inside WEB macro definitions begin with `@#', not `@<'.


File: fweb.info,  Node: AT>,  Next: ATA_,  Prev: AT<,  Up: AT commands

`@>':  End module name.
-----------------------

   `@>' ends a module name, of the form `@< TeX text @>'.


File: fweb.info,  Node: ATA_,  Next: ATa,  Prev: AT>,  Up: AT commands

`@A':  Begin code part of unnamed section.
------------------------------------------

   `@A' begins the code part of an unnamed section.  For example,

     @ In an unnamed section, the code part begins with `@a'.
     @a
     main()
     {}


File: fweb.info,  Node: ATa,  Next: ATb,  Prev: ATA_,  Up: AT commands

`@a':  Begin code part of unnamed section, and mark.
----------------------------------------------------

   `@a' begins the code part of an unnamed section (just as does `@A'),
and in addition marks the next unreserved identifier it finds as
defined in this section.  Precisely,

     `@a' == `@A@['


File: fweb.info,  Node: ATb,  Next: ATc,  Prev: ATa,  Up: AT commands

Control codes b-z
=================

`@b':  Insert a breakpoint command.
-----------------------------------

   (To be finished.  Useful only for very intimate debugging of WEB
codes.)


File: fweb.info,  Node: ATc,  Next: ATcpp,  Prev: ATb,  Up: AT commands

`@c':  Set language to C.
-------------------------

   *Note Languages::, *Note C::.


File: fweb.info,  Node: ATcpp,  Next: ATD_,  Prev: ATc,  Up: AT commands

`@c++':  Set language to C++.
-----------------------------

   *Note Languages::, *Note Cpp::.


File: fweb.info,  Node: ATD_,  Next: ATd,  Prev: ATcpp,  Up: AT commands

`@D':  Define outer macro.
--------------------------

   *This command begins the definition part.*

   `@D' defines an outer macro.  For more discussion, *Note Outer
macros::.  For example,

     @D A 1


File: fweb.info,  Node: ATd,  Next: ATf,  Prev: ATD_,  Up: AT commands

`@d':  Define outer macro, and mark.
------------------------------------

   *This command begins the definition part.*

   `@d' defines an outer macro (just as `@D' does), and also marks the
next identifiers as defined here.  It is equivalent to

   `@d' == `@D@['


File: fweb.info,  Node: ATf,  Next: ATi,  Prev: ATd,  Up: AT commands

`@f':  Format identifier or module name.
----------------------------------------

   *This command begins the definition part.*

   The construction

     @f identifier old_identifier

makes FWEAVE treat identifier like old_identifier.  For example,

     @f mytype int

says to treat the variable `mytype' just as `int' is treated (e.g., as
a reserved word in C or C++).

   The old_identifier may be one of the following special names, which
insert extra spaces according to the positions of the underscores and
behave as the part of speech indicated by the base names.  These are
useful for dealing with macro constructions.

     $_BINOP_
     $_COMMA_
     $_EXPR
     $_EXPR_
     $EXPR_
     $UNOP_

   When the current language is TeX, the format command can be used to
change a category code according to the format

     @f `TeXchar new_cat_code


File: fweb.info,  Node: ATi,  Next: ATI_,  Prev: ATf,  Up: AT commands

`@i':  Include file (unconditional).
------------------------------------

   If one says

     @i test.hweb

the file `test.hweb' is inserted at the present point of the web file.
By default, the current directory is searched.  Files can be included
from other directories by means of the `FWEB_INCLUDES' environment
variable and/or the `-I' command-line option.  *Note Environment
variables::, *Note -I_::.


File: fweb.info,  Node: ATI_,  Next: ATL_,  Prev: ATi,  Up: AT commands

`@I':  Include file (conditional).
----------------------------------

   This commands behaves like `@i' if the command-line option `-i' is
not used.  If it is used, then the contents of the included file is not
printed in the woven output.  *Note -i::, *Note -i!::.


File: fweb.info,  Node: ATL_,  Next: ATl,  Prev: ATI_,  Up: AT commands

`@L':  Set language.
--------------------

   `@Ll' sets the language to l, where l is one of
`{c,c++,n,n9,r,r9,x,v}'.  *Note Languages::.


File: fweb.info,  Node: ATl,  Next: ATM_,  Prev: ATL_,  Up: AT commands

`@l':  Specify limbo text.
--------------------------

   (This command begins the definition part.)

   Limbo text is material that FWEAVE should output before the start of
the first section.  For example,

     @l "\\def\\A{abc}"

Note that `\\' stands for a backslash.  In general, characters must be
escaped just as in C (so that one can include things like newlines in
the definitions).

   Limbo text may also be typed directly into the limbo section; in that
case, no escapes are necessary since one is typing ordinary TeX text.
Sometime, however, the `@l' command is useful for pedagogical purposes,
as the limbo material can then be defined near the point where the
logical discussion is made.


File: fweb.info,  Node: ATM_,  Next: ATm,  Prev: ATl,  Up: AT commands

`@M':  Define WEB macro.
------------------------

   *This command begins the definition part.*

   For a detailed discussion of WEB macros, see *Note Macros::.


File: fweb.info,  Node: ATm,  Next: ATN_,  Prev: ATM_,  Up: AT commands

`@m':  Define WEB macro, and mark.
----------------------------------

   *This command begins the definition part.*

   For a detailed discussion of WEB macros, see *Note Macros::.


File: fweb.info,  Node: ATN_,  Next: ATn,  Prev: ATm,  Up: AT commands

`@N':  Turn on N mode
---------------------

   *This command must appear before the code part.*

   The N mode invokes language-independent behavior within the scope of
a particular language.  The scoping rules are the same as for language
changes; i.e., using `@N' within a given section produces
language-independent behavior for that section and for any modules first
referenced in that section.

   Fundamentally, "language-independent" behavior essentially means a
literal transcription of the input to the output.  For example, it
inhibits blank compression by FTANGLE and tells FWEAVE to turn off
"pretty-printing" (instead, the output is printed in typewriter type
within a `\begin{verbatim}...\end{verbatim}' environment.

   There are some subtleties with this mode (not to mention the
likelihood of bugs):

  1. WEB macros and built-in functions will normally be expanded even
     in the N mode.  To inhibit expansion of a particular identifier,
     place `@!' before the identifier.  For example,

          @
          @m A 1
          @N
          @a
          @!A = A;

     expands to `A = 1'.

  2. Blank lines are significant.  The N mode is ended by the
     appearance of the `@*' or `@ ' denoting the start of the next
     section.  If that were preceded by one or more blank lines, those
     would show up in both the tangled and woven output.  They might or
     might not be significant in the tangled output, but they almost
     certainly will look ugly in the woven output.  To avoid this, use
     the command `@%%', which deletes the remainder of the current line
     and all immediately following empty lines.  For example,

          @
          @N
          @a
          x;@%%
          
          
          
          @ Next section.

  3. If the N mode is invoked from a compiler-like language such as
     Fortran, cross-referencing of variables is done as usual.
     However, if the language is VERBATIM (which turns on the N mode
     automatically), no cross-referencing is done.  (Identifiers are
     still recognized according to FWEB's rules.  Those rules as
     currently implemented may be essentially meaningless for some
     languages; in the future, provision may be made for generalizing
     these rules by the user.)  To force an identifier to be placed
     into the index, precede it by `@+'.



File: fweb.info,  Node: ATn,  Next: ATn9,  Prev: ATN_,  Up: AT commands

`@n':  Set language to Fortran-77.
----------------------------------

   *Note Languages::.


File: fweb.info,  Node: ATn9,  Next: ATO_,  Prev: ATn,  Up: AT commands

`@n9':  Set language to Fortran-90.
-----------------------------------

   *Note Languages::.


File: fweb.info,  Node: ATO_,  Next: ATo,  Prev: ATn9,  Up: AT commands

`@O':  Open output file (global scope).
---------------------------------------

   A statement of the form

     @O newfile.c

changes the name of the FTANGLE's output file.  This change remains in
effect for the duration of the file, or until another `@O' is
encountered.  (If that occurs, the previously open file is closed.)

   This command is expanded during output, so it must appear in the
code part.


File: fweb.info,  Node: ATo,  Next: ATr,  Prev: ATO_,  Up: AT commands

`@o':  Open output file (local scope).
--------------------------------------

   This behaves like `@O', except the new file name is in effect only
for the current section.


File: fweb.info,  Node: ATr,  Next: ATr9,  Prev: ATo,  Up: AT commands

`@r':  Set language to Ratfor-77.
---------------------------------

   *Note Languages::.


File: fweb.info,  Node: ATr9,  Next: ATu,  Prev: ATr,  Up: AT commands

`@r9':  Set language to Ratfor-90.
----------------------------------

   *Note Languages::.


File: fweb.info,  Node: ATu,  Next: ATv,  Prev: ATr9,  Up: AT commands

`@u':  Undefine outer macro.
----------------------------

   *This command begins the definition part.*

   `@u' is the inverse of `@d'.  For example, in C it expands to
`#undef'.


File: fweb.info,  Node: ATv,  Next: ATW_,  Prev: ATu,  Up: AT commands

`@v':  Overload operator.
-------------------------

   *This command begins the definition part.*

   For a detailed discussion of overloading operators, see *Note
Overloading::.


File: fweb.info,  Node: ATW_,  Next: ATx,  Prev: ATv,  Up: AT commands

`@W':  Overload identifier.
---------------------------

   *This command begins the definition part.*

   For a detailed discussion of overloading identifiers, see *Note
Overloading::.


File: fweb.info,  Node: ATx,  Next: ATy,  Prev: ATW_,  Up: AT commands

`@x':  Terminate ignorable material, or begin material to be changed
--------------------------------------------------------------------

   Please see the discussion of the `@z' command. *Note ATz::.


File: fweb.info,  Node: ATy,  Next: ATz,  Prev: ATx,  Up: AT commands

`@y':  Begin change material
----------------------------

   The `@y' command is permitted only in change files.  *Note Change
files::.


File: fweb.info,  Node: ATz,  Next: ATquote,  Prev: ATy,  Up: AT commands

`@z':  Begin ignorable material, or terminate change
----------------------------------------------------

   FWEB files may begin with the construction

     @z
     .
     .
     @x

where the `@z' and `@x' must begin in column 1.  Material between the
`@z' and `@x' is "pure commentary" and is ignored by both processors.

   `@z' is also used in change files to end a change.  *Note Change
files::.


File: fweb.info,  Node: ATquote,  Next: AT",  Prev: ATz,  Up: AT commands

Conversion to ASCII
===================

   Several commands are useful for generating machine-independent code.
For example, FWEB works internally with the ASCII character set, so
uses these commands heavily to convert from the possibly non-ASCII
native character set of the machine on which FWEB is running.

`@'':  Convert character to ASCII.
----------------------------------

   The construction `@'c'' converts `c' to its ASCII value.  In C and
C++, it is converted to octal; for example, `@'A'' is output as `0101'.
In Fortran and Ratfor, it is converted to decimal; the previous example
would be output as `65'.

   If the native character set of your machine is ASCII, the conversion
will not be done unless the `-A' command-line option is used.  *Note
-A_::.


File: fweb.info,  Node: AT",  Next: AT[,  Prev: ATquote,  Up: AT commands

`@"':  Convert string to ASCII.
-------------------------------

   The construction `@"abc"' converts the enclosed string to its ASCII
representation.  For example, in C and C++ `@"abc"' will be output as
`"\141\142\143"'.

   In Fortran and Ratfor, no such simple mechanism exists in the
language, so a function call is issued.  For example, the previous
example would be output as `ASCIIstr('abc')'.  The user is responsible
for defining the function `ASCIIstr'.  The name of this function can be
changed by the style-file entry `ASCII_fcn'.  *Note ASCII_fcn::.

   If the native character set of your machine is ASCII, the conversion
will not be done unless the `-A' command-line option is used.  *Note
-A_::.


File: fweb.info,  Node: AT[,  Next: AT/*,  Prev: AT",  Up: AT commands

Forward referencing
===================

`@[':  Mark as defined.
-----------------------

   This command marks the next (non-reserved) identifier that appears
after the `@[' as being defined in the current section.  It is usually
issued automatically; for example, `@a' is equivalent to `@A@['.


File: fweb.info,  Node: AT/*,  Next: AT//,  Prev: AT[,  Up: AT commands

Comments
========

`@/*':  Begin long verbatim comment.
------------------------------------

   The following comment is copied to the tangled output.  If you desire
all comments to be so copied, use `-v'.  *Note -v::.


File: fweb.info,  Node: AT//,  Next: AT%,  Prev: AT/*,  Up: AT commands

`@//':  Begin short verbatim comment.
-------------------------------------

   See the discussion of `@/*', above.


File: fweb.info,  Node: AT%,  Next: AT?,  Prev: AT//,  Up: AT commands

`@%':  Ignorable comment.
-------------------------

   If any line in a web source code contains the command `@%', all
remaining material on that line (to and including the newline character)
is ignored by the input driver and never processed at all.

   A stronger form of this command is `@%%'.  This deletes the current
line as well any empty lines that immediately follow.  This command is
particularly useful when the N mode is in effect.  *Note ATN_::.


File: fweb.info,  Node: AT?,  Next: ATlp,  Prev: AT%,  Up: AT commands

`@?':  Begin compiler directive.
--------------------------------

   The remainder of the line is processed as a compiler directive.
Optional material may be inserted automatically at the beginning of the
tangled output line by means of the style-file option `cdir_start'.
*Note Miscellaneous params::.


File: fweb.info,  Node: ATlp,  Next: AT),  Prev: AT?,  Up: AT commands

`@(':  Begin meta-comment.
--------------------------

   Material between `@(' and `@)' is treated in the N mode.  For
example,

     @(
     Comment 1
     Comment 2
     @)

   Style-file parameters allow optional material to be insert at the
beginning and end of the meta-comment, and at the beginning of each line
of output.  For more information, see the style-file parameters
beginning with `meta' (*note Miscellaneous params::.).


File: fweb.info,  Node: AT),  Next: ATlb,  Prev: ATlp,  Up: AT commands

`@)':  End meta-comment.
------------------------

   See the discussion of `@(', *Note ATlp::.


File: fweb.info,  Node: ATlb,  Next: AT_,  Prev: AT),  Up: AT commands

Special brace
=============

`@{':  Suppress insertion of breakpoint command.
------------------------------------------------

   This is for detailed debugging of FWEB codes.  It inserts a left
brace and suppresses the insertion of a breakpoint command.  *Note
ATb::.


File: fweb.info,  Node: AT_,  Next: AT-,  Prev: ATlb,  Up: AT commands

Index entries
=============

`@_':  Force index entry to be underlined.
------------------------------------------

   This command applies to the next identifier that appears after the
`@_'.  The index entry for that identifier will be underlined.

   This command is usually issued automatically.  For example, the index
entries for the variables `i' and `j' in the C statement `int i,j;'
will be underlined.


File: fweb.info,  Node: AT-,  Next: ATplus,  Prev: AT_,  Up: AT commands

`@-':  Delete index entry.
--------------------------

   This command applies to the next identifier that appears after the
`@-'; it prevents the index entry associated with that identifier from
being underlined.  This might be useful when the N mode is in effect.


File: fweb.info,  Node: ATplus,  Next: AT^,  Prev: AT-,  Up: AT commands

`@+':  Force index entry.
-------------------------

   This command applies to the next identifier that appears after the
`@+'; it forces an index entry for that identifier. It is particularly
useful when the language is VERBATIM, since cross-referencing is turned
off in that case.


File: fweb.info,  Node: AT^,  Next: ATdot,  Prev: ATplus,  Up: AT commands

`@^':  Make index entry (Roman type).
-------------------------------------

   To insert one's own index entry in Roman type, say  `@^My entry@>'.


File: fweb.info,  Node: ATdot,  Next: AT9,  Prev: AT^,  Up: AT commands

`@.':  Make index entry (typewriter type).
------------------------------------------

   To insert one's own index entry in typewriter type, say  `@^My
entry@>'.


File: fweb.info,  Node: AT9,  Next: ATt,  Prev: ATdot,  Up: AT commands

`@9':  Make index entry (\9 format).
------------------------------------

   The construction `@9text@>' is used to create an index entry in a
format defined by the user.  It is associated with the macro `\9', which
would be called during TeX's processing of the index as `\9{text}'.
The user must define `\9' according to the format

             \def\9#1{...}


File: fweb.info,  Node: ATt,  Next: AT=,  Prev: AT9,  Up: AT commands

Control text
============

`@t':  Put control text into a TeX \hbox.
-----------------------------------------

   Control text is material terminated by `@>'; it must be all on one
line and must not contain any `@'s.  When FWEAVE sees the command
`@tcontroltext@>', it packages the control text into an `\hbox' and
ships it to the output.  This command is ignored by FTANGLE.


File: fweb.info,  Node: AT=,  Next: ATcomma,  Prev: ATt,  Up: AT commands

`@=':  Pass control text verbatim to the output.
------------------------------------------------

   For FTANGLE, the command `@=controltext@>' sends the control text to
the output exactly as input.  (`Control text' is defined in the
discussion of the `@t' command, *Note ATt::.) FWEAVE highlights the
control text by drawing a box around it.


File: fweb.info,  Node: ATcomma,  Next: AT/,  Prev: AT=,  Up: AT commands

Spacing
=======

   The spacing commands are used to refine FWEAVE's pretty-printed
output.  Generally it's not necessary to bother with these until you're
putting the final touches on a code.

`@,':  Insert a thin space.
---------------------------

   Extra spacings are sometimes necessary when working with unusual
macro constructions.  (Need an example here.)


File: fweb.info,  Node: AT/,  Next: AT|_,  Prev: ATcomma,  Up: AT commands

`@/':  Force a line break.
--------------------------

   For example,

     int@/
       i,@/
       j,@/
       k;


File: fweb.info,  Node: AT|_,  Next: AT#,  Prev: AT/,  Up: AT commands

`@|':  Literal vertical bar, or optional line break.
----------------------------------------------------

   In TeX mode, `@|' inserts a vertical bar.  Here's a LaTeX example:

     \begin{verbatim}
       The constructions @|x@| and |x| are very different.
     \end{verbatim}

You might wish to try this out to see what FWEAVE produces.

   In code mode, `@|' inserts an optional line break in an expression.


File: fweb.info,  Node: AT#,  Next: AT~,  Prev: AT|_,  Up: AT commands

`@#':  Blank line.
------------------

   `@#' forces a line break with some extra vertical white space.  Note
that blank lines in the source are significant, so this command should
seldom be necessary.

   if `@#' is immediately followed by a letter, it is assumed that a
preprocessor command is beginning.  *Note Preprocessing::.

