# [pre.h] Preprocessing Facility

## contents

#include "standard.h"

       This module, [pre], realises a simple text processor. It supports the
       usage of macros which will be expanded during processing - by the result
       of the corresponding special replacement functions.

       The following rules describes the source text format:

       Text :: Literal
            :: "&&"
            :: "&" MacroName "&"
            :: "&" "IF" FlagName "&" Text
              ["&" "ELSE" "&" Text]
               "&" "FI" "&"
            :: Text Text

       Literal   :: Each printable ASCII-character beside "&", additionally "\n" und "\f".
       MacroName :: (Literal-"&"-" "-"\n"-"\f")+ .
                    Beside that the reserved words "IF","ELSE","FI" are not allowed.
       FlagName  :: like MacroName; MacroName and FlagName must be disjunct sets.

       Now the interpretation can be specified as follows:

       A literal identifies itself, i.e. will be taken as is.

       '&&' will be expanded to '&'.

       '&MacroName&' forces the call of the corresponding evaluation function to output
       the replacement text for the macro. The left border is the column with the first "&".

       With the IF-THEN-ELSE-FI construction conditional generation becomes possible.
       FlagName refers to the corresponding boolean evaluation function. On true the text
       after '&IF FlagName& will be processed, otherwise the optional '&ELSE&'-part.

       Internally the following generalisation of the grammar will be used:

       Text :: Literal
            :: "&&"
            :: "&" MacroName "&"
            :: "&" KeyWord [FlagName] "&"
            :: Text Text

    void PRE_dfnMacro(c_string MacroName, void (* Macro)())
| defines macro with name 'MacroName' and meaning 'Macro'
    void PRE_dfnFlag(c_string FlagName, int (* Flag)())
| defines flag with name 'FlagName' and meaning 'Flag'
    void PRE_Process(c_string environ, c_string file, c_string ext, FILE *fileout)
| preprocesses module [$'environ'/'file''ext'] to file 'fileout'
    void PRE_init(void)
| enter the preprocessor module
    void PRE_quit(void)
| leave the preprocessor module
    int PRE_tColumnNo(void)
| column number of current token