Next: Debugging with macros, Previous: Tokens, Up: FWEB macros [Contents][Index]
Built-in functions behave in most ways like macros. In some cases they actually are macros, but other times they implement functions that a user could not define. They all begin with a dollar sign and are in upper case.
In using these built-ins, confusion may arise regarding the order of
expansion of various arguments. When they are implemented as macros,
they are subject to the same ANSI-C preprocessor rules as other
FWEB macros, which is that all arguments are fully expanded before
generating the replacement text of the macro. When they are directly
implemented as a primitive function, however, that rule may not apply.
For example, $IF expands only its first argument during its first
pass of processing; depending on the results of that expansion, it then
expands either its second or third argument, but not both.
The built-in function $DUMPDEF can be used to understand and
debug the action of the built-in functions. See $DUMPDEF.
In the original FWEB design, built-in functions began with an underscore. This usage conflicts with the conventions for reserved words in ANSI C, and has been eliminated. All FWEB built-ins now begin with a dollar sign.
No user-defined macro should begin with a dollar sign! It might interfere with the functioning of some internal built-in function.
GENERAL INFORMATION ABOUT BUILT-IN FUNCTION DESIGN | ||
|---|---|---|
| • Strings and quotes: | Quoted and non-quoted strings. | |
| • Protection: | By default, built-in functions may not be redefined. | |
INDIVIDUAL BUILT-IN FUNCTIONS | ||
| • $A: | Convert to ASCII. | |
| • $ABS: | Absolute value. | |
| • $ASSERT: | Assert a condition. | |
| • $AUTHOR: | RCS global keyword; see $KEYWORD. | |
| • $COMMENT: | Generate a comment. | |
| • $DATE: | Today’s date. | |
| • $DATE_TIME: | RCS global keyword; see $KEYWORD. | |
| • $DAY: | Today. | |
| • $DECR: | Decrement a macro. | |
| • $DEFINE: | Define a (deferred) macro. | |
| • $DO: | Macro DO loop. | |
| • $DUMPDEF: | Dump macro definitions to the terminal. | |
| • $E: | Base of the natural logarithms: 2.71828... | |
| • $ERROR: | Send error message to output. | |
| • $EVAL: | Evaluate an expression. | |
| • $EXP: | Exponential function. | |
| • $GETENV: | Get value of environment variable. | |
| • $HEADER: | RCS global keyword; see $KEYWORD. | |
| • $HOME: | The user’s home directory. | |
| • $ID: | RCS global keyword; see $KEYWORD. | |
| • $IF: | Two-way conditional: “If expression is true” | |
| • $IFCASE: | n-way conditional. | |
| • $IFDEF: | Two-way conditional: “If macro is defined” | |
| • $IFNDEF: | Two-way conditional: “If macro is not defined” | |
| • $IFELSE: | Two-way conditional: “If macro1 equals macro2” | |
| • $INCR: | Increment a macro. | |
| • $INPUT_LINE: | Line number that begins current section. | |
| • $KEYWORD: | Extract text of global RCS-like keyword. | |
| • $L: | Change string to lower case. | |
| • $L_KEYWORD: | Extract text of local RCS-like keyword. | |
| • $LANGUAGE: | Identifier for current language. | |
| • $LANGUAGE_NUM: | Number of current language. | |
| • $LEN: | Length of string. | |
| • $LOCKER: | RCS global keyword; see $KEYWORD. | |
| • $LOG: | Natural logarithm. | |
| • $LOG10: | Logarithm to the base 10. | |
| • $M: | Define a (deferred) macro. | |
| • $MAX: | Maximum of one or more elements. | |
| • $MIN: | Minimum of one or more elements. | |
| • $MODULE_NAME: | Name of present web module.
| |
| • $MODULES: | Total number of independent modules. | |
| • $NAME: | RCS global keyword; see $KEYWORD. | |
| • $OUTPUT_LINE: | Current line number of tangled output. | |
| • $P: | The C preprocessor symbol # (an unquoted string).
| |
| • $PI: | 3.14159... | |
| • $POW: | Raise to a power. | |
| • $PP: | The C preprocessor symbol # (a character).
| |
| • $RCSFILE: | RCS global keyword; see $KEYWORD. | |
| • $REVISION: | RCS global keyword; see $KEYWORD. | |
| • $ROUTINE: | Current Ratfor program, function, or subroutine. | |
| • $SECTION_NUM: | Number of current section. | |
| • $SECTIONS: | Maximum number of sections. | |
| • $SOURCE: | RCS global keyword; see $KEYWORD. | |
| • $SQRT: | Square root. | |
| • $STATE: | RCS global keyword; see $KEYWORD. | |
| • $STRING: | Expand argument, then stringize. | |
| • $STUB: | ||
| • $TIME: | The local time. | |
| • $TRANSLIT: | Transliterate a string. | |
| • $U: | Change string to upper case. | |
| • $UNDEF: | Undefine an FWEB macro. | |
| • $UNQUOTE: | Remove quotes from string (leaving an unquoted string). | |
| • $UNSTRING: | Remove quotes and string delimiters from string. | |
| • $VERBATIM: | (Obsolete.) | |
| • $VERSION: | FWEB version number. | |
Next: Debugging with macros, Previous: Tokens, Up: FWEB macros [Contents][Index]