/*********************************************************** ** symbol_set - A public domain C modifier library ** by Allen Webster, "Mr. 4th", allenw@mr4th.com ** ** No warranty implied; use at your own risk ** ** Read README to get started. */ /**************************** ***************************** ********** Setup ********** ***************************** ****************************/ #if 0 /* In ever compilation unit, #include "symbol_set.h" once before using ** any symbol set features or defining a symbol set. */ #include "symbol_set.h" /* In one compilation unit, #include "symbol_set.c" */ #include "symbol_set.c" #endif /****************************************** ******************************************* ********** Define A Symbol Set ********** ******************************************* ******************************************/ #if 0 /* To define a symbol set, copy-paste the block below and then: ** Replace ZZZ with a name for the symbol set. ** Replace Typezz with the type of the symbol set. ** Replace secz with a unique name for the data section of the symbol set. ** IMPORTANT NOTE: only use 4 characters for the section name if you ** want to port to Windows. */ #define SYMBOL_SET_DEFINE ZZZ #define ZZZ_Type Typezz #define ZZZ_section ".sy.secz" #define ZZZ_marker secz #include "symbol_set.define.h" #endif /**************************************************** ***************************************************** ********** Common Symbol Defining Macros ********** ***************************************************** ****************************************************/ #if 0 /* Define a basic struct with a NAME */ #define ZZZ_DEF(N,...) SyDefine(ZZZ, NAME) = { ... } /* Define a basic struct without a name */ #define ZZZ_DEF(...) SyDefineUnnamed(ZZZ, NAME) = { ... } /* Define a struct with a NAME & attach a function. ** Replace zzzprefix with a unique function prefix. ** Update the parameter and return types as needed. */ #define ZZZ_DEF(N,...) \ void zzzprefix_##N(void); \ SyDefine(ZZZ, NAME) = { ..., zzzprefix_##N }; \ void zzzprefix_##N(void) /* Define a struct with a NAME & attach multiple functions ** Replace zzzprefix1... with unique function prefixes. ** Update the parameter and return types as needed. ** Replace ZZZ_PREFIX1... with appropriate names. */ #define ZZZ_DEF(N,...) \ void zzzprefix1_##N(void); \ void zzzprefix2_##N(void); \ SyDefine(ZZZ, NAME) = { ..., zzzprefix1_##N, zzzprefix2_##N } #define ZZZ_PREFIX1(N) void zzzprefix1_##N(void) #define ZZZ_PREFIX2(N) void zzzprefix2_##N(void) #endif