diff options
Diffstat (limited to 'agen5/functions.h')
-rw-r--r-- | agen5/functions.h | 325 |
1 files changed, 325 insertions, 0 deletions
diff --git a/agen5/functions.h b/agen5/functions.h new file mode 100644 index 0000000..b19b0a9 --- /dev/null +++ b/agen5/functions.h @@ -0,0 +1,325 @@ +/* -*- buffer-read-only: t -*- vi: set ro: + * + * DO NOT EDIT THIS FILE (functions.h) + * + * It has been AutoGen-ed + * From the definitions functions.def + * and the template file functions.tpl + * + * Tables of Text Functions for AutoGen + * + * copyright (c) 1992-2012 by Bruce Korb - all rights reserved + * + * AutoGen is free software: you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * AutoGen is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see <http://www.gnu.org/licenses/>. + * + * The 24 AutoGen macros are tagged with special attributes: + * + * A - is invoked via an alias + * + * U - is unnamed. May *not* be explicitly invoked. May not have + * have an alias. These three are used by AutoGen for its purposes. + * + * L - has a special load procedure defined + * + * C - in context. May be explicitly invoked in certain situations. + * For example, "ELSE" may only be specified within an "IF" block. + * Their load procedures are enabled by the block macro (e.g. IF), + * and disabled by the block ending macro (e.g. ENDIF). + * While disabled, the load procedure is the "Bogus" method. + * + * If a function is neither has a special load procedure nor is + * situational, then the "Unknown" load method is applied. + * + * R - has a special remove (unload) procedure + * + * H - has a handler procedure defined. Only these procedures should + * be encountered by the dispatcher during processing. + * + * U L H - BOGUS Out-of-context or unknown functions are bogus. + * L H - BREAK Leave a FOR or WHILE macro + * L H - CASE Select one of several template blocks + * A L - COMMENT A block of comment to be ignored + * L H - CONTINUE Skip to end of a FOR or WHILE macro. + * L H - DEBUG Print debug message to trace output + * L RH - DEFINE Define a user AutoGen macro + * C - ELIF Alternate Conditional Template Block + * C - ELSE Alternate Template Block + * C - ENDDEF Ends a macro definition. + * C - ENDFOR Terminates the @code{FOR} function template block + * C - ENDIF Terminate the @code{IF} Template Block + * C - ENDWHILE Terminate the @code{WHILE} Template Block + * C - ESAC Terminate the @code{CASE} Template Block + * A L H - EXPR Evaluate and emit an Expression + * L H - FOR Emit a template block multiple times + * L H - IF Conditionally Emit a Template Block + * L H - INCLUDE Read in and emit a template block + * H - INVOKE Invoke a User Defined Macro + * L H - RETURN Leave an INVOKE-d (DEFINE) macro + * A C R - SELECT Selection block for CASE function + * U H - TEXT A block of text to be emitted. + * U L H - UNKNOWN Either a user macro or a value name. + * L H - WHILE Conditionally loop over a Template Block + */ +#ifndef AUTOGEN_FUNCTIONS_H_GUARD +#define AUTOGEN_FUNCTIONS_H_GUARD 1 + +#define FUNC_CT 24 + +/** + * Enumerate all the AutoGen macro types. + */ +typedef enum { + FTYP_BOGUS, /* Out-of-context or unknown functions are bogus. */ + FTYP_BREAK, /* Leave a FOR or WHILE macro */ + FTYP_CASE, /* Select one of several template blocks */ + FTYP_COMMENT, /* A block of comment to be ignored */ + FTYP_CONTINUE, /* Skip to end of a FOR or WHILE macro. */ + FTYP_DEBUG, /* Print debug message to trace output */ + FTYP_DEFINE, /* Define a user AutoGen macro */ + FTYP_ELIF, /* Alternate Conditional Template Block */ + FTYP_ELSE, /* Alternate Template Block */ + FTYP_ENDDEF, /* Ends a macro definition. */ + FTYP_ENDFOR, /* Terminates the @code{FOR} function template block */ + FTYP_ENDIF, /* Terminate the @code{IF} Template Block */ + FTYP_ENDWHILE, /* Terminate the @code{WHILE} Template Block */ + FTYP_ESAC, /* Terminate the @code{CASE} Template Block */ + FTYP_EXPR, /* Evaluate and emit an Expression */ + FTYP_FOR, /* Emit a template block multiple times */ + FTYP_IF, /* Conditionally Emit a Template Block */ + FTYP_INCLUDE, /* Read in and emit a template block */ + FTYP_INVOKE, /* Invoke a User Defined Macro */ + FTYP_RETURN, /* Leave an INVOKE-d (DEFINE) macro */ + FTYP_SELECT, /* Selection block for CASE function */ + FTYP_TEXT, /* A block of text to be emitted. */ + FTYP_UNKNOWN, /* Either a user macro or a value name. */ + FTYP_WHILE, /* Conditionally loop over a Template Block */ + + FTYP_SELECT_COMPARE_FULL = 0x8000, /* *==* */ + FTYP_SELECT_COMPARE_SKP_START = 0x8001, /* *== */ + FTYP_SELECT_COMPARE_SKP_END = 0x8002, /* ==* */ + FTYP_SELECT_COMPARE = 0x8003, /* == */ + + FTYP_SELECT_EQUIVALENT_FULL = 0x8004, /* *=* */ + FTYP_SELECT_EQUIVALENT_SKP_START = 0x8005, /* *= */ + FTYP_SELECT_EQUIVALENT_SKP_END = 0x8006, /* =* */ + FTYP_SELECT_EQUIVALENT = 0x8007, /* = */ + + FTYP_SELECT_MATCH_FULL = 0x8008, /* *~~* */ + FTYP_SELECT_MATCH_SKP_START = 0x8009, /* *~~ */ + FTYP_SELECT_MATCH_SKP_END = 0x800A, /* ~~* */ + FTYP_SELECT_MATCH = 0x800B, /* ~~ */ + + FTYP_SELECT_EQV_MATCH_FULL = 0x800C, /* *~* */ + FTYP_SELECT_EQV_MATCH_SKP_START = 0x800D, /* *~ */ + FTYP_SELECT_EQV_MATCH_SKP_END = 0x800E, /* ~* */ + FTYP_SELECT_EQV_MATCH = 0x800F, /* ~ */ + + FTYP_SELECT_MATCH_ANYTHING = 0x801C, /* * */ + FTYP_SELECT_MATCH_EXISTENCE = 0x801D, /* +E */ + FTYP_SELECT_MATCH_NONEXISTENCE = 0x801E /* !E */ +} mac_func_t; + +/** + * The function processing procedures. + */ +hdlr_proc_t + mFunc_Bogus, mFunc_Break, mFunc_Case, mFunc_Debug, mFunc_Define, + mFunc_Expr, mFunc_For, mFunc_If, mFunc_Include, mFunc_Invoke, + mFunc_Return, mFunc_Text, mFunc_Unknown, mFunc_While; + +/** + * Template Loading Functions. + */ +load_proc_t + mLoad_Bogus, mLoad_Case, mLoad_Comment, mLoad_Debug, mLoad_Define, + mLoad_Ending, mLoad_Expr, mLoad_For, mLoad_If, mLoad_Leave, + mLoad_Unknown, mLoad_While; + +/* tpParse.c use only * * * * * * * * * * * * * * * */ +/** + * Parsing function tables for load processing (template scanning phase). + */ +static load_proc_p_t const base_load_table[ FUNC_CT ] = { + /* BOGUS */ mLoad_Bogus, + /* BREAK */ mLoad_Leave, + /* CASE */ mLoad_Case, + /* COMMENT */ mLoad_Comment, + /* CONTINUE */ mLoad_Leave, + /* DEBUG */ mLoad_Debug, + /* DEFINE */ mLoad_Define, + /* ELIF */ mLoad_Bogus /*dynamic*/, + /* ELSE */ mLoad_Bogus /*dynamic*/, + /* ENDDEF */ mLoad_Bogus /*dynamic*/, + /* ENDFOR */ mLoad_Bogus /*dynamic*/, + /* ENDIF */ mLoad_Bogus /*dynamic*/, + /* ENDWHILE */ mLoad_Bogus /*dynamic*/, + /* ESAC */ mLoad_Bogus /*dynamic*/, + /* EXPR */ mLoad_Expr, + /* FOR */ mLoad_For, + /* IF */ mLoad_If, + /* INCLUDE */ mLoad_Expr, + /* INVOKE */ mLoad_Unknown /*default*/, + /* RETURN */ mLoad_Leave, + /* SELECT */ mLoad_Bogus /*dynamic*/, + /* TEXT */ mLoad_Unknown /*default*/, + /* UNKNOWN */ mLoad_Unknown, + /* WHILE */ mLoad_While +}; + +/** + * This global pointer is used to switch parsing tables. + * The block functions (CASE, DEFINE, FOR, and IF) change this to point + * to their tables that include relevant additional functions. + */ +load_proc_p_t const * load_proc_table = base_load_table; + +/** + * name-to-function type mapping table. + * This table must be sorted alphabetically by the content + * of the naming string. + */ +typedef struct fn_name_type fn_name_type_t; +struct fn_name_type { + size_t cmpLen; /*!< compare length (sans NUL) */ + char const * pName; /*!< ptr to name */ + mac_func_t fType; /*!< function type enum */ +}; + +/** + * Define all the strings that are used to determine the function enumeration + * number. These are used in a table separated by aliases and sorted by these + * ASCII values. + */ +static char const zFnStrg[142] = + "BREAK\0" "CASE\0" "#\0" "CONTINUE\0" "DEBUG\0" + "DEFINE\0" "ELIF\0" "ELSE\0" "ENDDEF\0" "ENDFOR\0" + "ENDIF\0" "ENDWHILE\0" "ESAC\0" "-\0" "?\0" + "%\0" ";\0" "(\0" "`\0" "\"\0" + "'\0" ".\0" "FOR\0" "IF\0" "INCLUDE\0" + "INVOKE\0" "RETURN\0" "~\0" "=\0" "*\0" + "!\0" "+\0" "WHILE\0"; + +/** + * The number of names by which the macros go. + * Some have multiple names (aliases, e.g. selection clauses). + */ +#define FUNC_ALIAS_LOW_INDEX 0 +#define FUNC_ALIAS_HIGH_INDEX 14 +#define FUNC_NAMES_LOW_INDEX 15 +#define FUNC_NAMES_HIGH_INDEX 32 +#define FUNCTION_NAME_CT 33 + +/* * * * * * * * tpParse.c use only * * * * * * * * * * * * * * */ +/** + * And now, the table separated by aliasing and then sorted by string content + */ +static fn_name_type_t const fn_name_types[ FUNCTION_NAME_CT ] = { + { 1, zFnStrg +132, FTYP_SELECT }, + { 1, zFnStrg + 91, FTYP_EXPR }, + { 1, zFnStrg + 11, FTYP_COMMENT }, + { 1, zFnStrg + 83, FTYP_EXPR }, + { 1, zFnStrg + 93, FTYP_EXPR }, + { 1, zFnStrg + 87, FTYP_EXPR }, + { 1, zFnStrg +130, FTYP_SELECT }, + { 1, zFnStrg +134, FTYP_SELECT }, + { 1, zFnStrg + 79, FTYP_EXPR }, + { 1, zFnStrg + 95, FTYP_EXPR }, + { 1, zFnStrg + 85, FTYP_EXPR }, + { 1, zFnStrg +128, FTYP_SELECT }, + { 1, zFnStrg + 81, FTYP_EXPR }, + { 1, zFnStrg + 89, FTYP_EXPR }, + { 1, zFnStrg +126, FTYP_SELECT }, + + { 5, zFnStrg + 0, FTYP_BREAK }, + { 4, zFnStrg + 6, FTYP_CASE }, + { 8, zFnStrg + 13, FTYP_CONTINUE }, + { 5, zFnStrg + 22, FTYP_DEBUG }, + { 6, zFnStrg + 28, FTYP_DEFINE }, + { 4, zFnStrg + 35, FTYP_ELIF }, + { 4, zFnStrg + 40, FTYP_ELSE }, + { 6, zFnStrg + 45, FTYP_ENDDEF }, + { 6, zFnStrg + 52, FTYP_ENDFOR }, + { 5, zFnStrg + 59, FTYP_ENDIF }, + { 8, zFnStrg + 65, FTYP_ENDWHILE }, + { 4, zFnStrg + 74, FTYP_ESAC }, + { 3, zFnStrg + 97, FTYP_FOR }, + { 2, zFnStrg +101, FTYP_IF }, + { 7, zFnStrg +104, FTYP_INCLUDE }, + { 6, zFnStrg +112, FTYP_INVOKE }, + { 6, zFnStrg +119, FTYP_RETURN }, + { 5, zFnStrg +136, FTYP_WHILE } }; + +static char const * const ag_fun_names[ FUNC_CT ] = { + "Bogus", zFnStrg+0, zFnStrg+6, "COMMENT", zFnStrg+13, + zFnStrg+22, zFnStrg+28, zFnStrg+35, zFnStrg+40, zFnStrg+45, + zFnStrg+52, zFnStrg+59, zFnStrg+65, zFnStrg+74, "EXPR", + zFnStrg+97, zFnStrg+101, zFnStrg+104, zFnStrg+112, zFnStrg+119, + "SELECT", "Text", "Unknown", zFnStrg+136 }; + +/* * * * * * * * tpProcess.c use only * * * * * * * * * * * * * */ +/** + * Template Processing Function Table + * + * Pointers to the procedure to call when the function code + * is encountered. + */ +static hdlr_proc_p_t const load_procs[ FUNC_CT ] = { + /* BOGUS */ mFunc_Bogus, + /* BREAK */ mFunc_Break, + /* CASE */ mFunc_Case, + /* COMMENT */ mFunc_Bogus, + /* CONTINUE */ mFunc_Break, + /* DEBUG */ mFunc_Debug, + /* DEFINE */ mFunc_Define, + /* ELIF */ mFunc_Bogus, + /* ELSE */ mFunc_Bogus, + /* ENDDEF */ mFunc_Bogus, + /* ENDFOR */ mFunc_Bogus, + /* ENDIF */ mFunc_Bogus, + /* ENDWHILE */ mFunc_Bogus, + /* ESAC */ mFunc_Bogus, + /* EXPR */ mFunc_Expr, + /* FOR */ mFunc_For, + /* IF */ mFunc_If, + /* INCLUDE */ mFunc_Include, + /* INVOKE */ mFunc_Invoke, + /* RETURN */ mFunc_Return, + /* SELECT */ mFunc_Bogus, + /* TEXT */ mFunc_Text, + /* UNKNOWN */ mFunc_Unknown, + /* WHILE */ mFunc_While +}; + +/* * * * * * * * * * tpLoad.c use only * * * * * * * * * * * * * */ +/** + * Template Unloading Function Table + * + * Pointers to the procedure to call when the function code + * is encountered in a template being unloaded. + */ +unload_proc_t mUnload_Define, mUnload_Select; + +static unload_proc_p_t const unload_procs[ FUNC_CT ] = { + NULL, NULL, NULL, NULL, + NULL, NULL, mUnload_Define, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + NULL, NULL, NULL, NULL, + mUnload_Select, NULL, NULL, NULL +}; + +#define FUNCTION_CKSUM ((unsigned short)0x22FE) + +#endif /* AUTOGEN_FUNCTIONS_H_GUARD */ +/* functions.h ends here */ |