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 webmodule. | |
| • $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]