1 /*****************************************************************************/ 2 /* */ 3 /* macro.h */ 4 /* */ 5 /* Macros for the ca65 macroassembler */ 6 /* */ 7 /* */ 8 /* */ 9 /* (C) 1998-2011, Ullrich von Bassewitz */ 10 /* Roemerstrasse 52 */ 11 /* D-70794 Filderstadt */ 12 /* EMail: uz@cc65.org */ 13 /* */ 14 /* */ 15 /* This software is provided 'as-is', without any expressed or implied */ 16 /* warranty. In no event will the authors be held liable for any damages */ 17 /* arising from the use of this software. */ 18 /* */ 19 /* Permission is granted to anyone to use this software for any purpose, */ 20 /* including commercial applications, and to alter it and redistribute it */ 21 /* freely, subject to the following restrictions: */ 22 /* */ 23 /* 1. The origin of this software must not be misrepresented; you must not */ 24 /* claim that you wrote the original software. If you use this software */ 25 /* in a product, an acknowledgment in the product documentation would be */ 26 /* appreciated but is not required. */ 27 /* 2. Altered source versions must be plainly marked as such, and must not */ 28 /* be misrepresented as being the original software. */ 29 /* 3. This notice may not be removed or altered from any source */ 30 /* distribution. */ 31 /* */ 32 /*****************************************************************************/ 33 34 35 36 #ifndef MACRO_H 37 #define MACRO_H 38 39 40 41 /*****************************************************************************/ 42 /* Forwards */ 43 /*****************************************************************************/ 44 45 46 47 struct StrBuf; 48 49 50 51 /*****************************************************************************/ 52 /* Data */ 53 /*****************************************************************************/ 54 55 56 57 /* Macro styles */ 58 #define MAC_STYLE_CLASSIC 0 59 #define MAC_STYLE_DEFINE 1 60 61 /* Macro as an opaque data type */ 62 struct Macro; 63 typedef struct Macro Macro; 64 65 66 67 /*****************************************************************************/ 68 /* Code */ 69 /*****************************************************************************/ 70 71 72 73 void MacDef (unsigned Style); 74 /* Parse a macro definition */ 75 76 void MacUndef (const struct StrBuf* Name, unsigned char Style); 77 /* Undefine the macro with the given name and style. A style mismatch is 78 ** treated as if the macro didn't exist. 79 */ 80 81 void MacExpandStart (Macro* M); 82 /* Start expanding a macro */ 83 84 void MacAbort (void); 85 /* Abort the current macro expansion */ 86 87 Macro* FindMacro (const struct StrBuf* Name); 88 /* Try to find the macro with the given name and return it. If no macro with 89 ** this name was found, return NULL. 90 */ 91 92 Macro* FindDefine (const struct StrBuf* Name); 93 /* Try to find the define style macro with the given name and return it. If no 94 ** such macro was found, return NULL. 95 */ 96 97 int InMacExpansion (void); 98 /* Return true if we're currently expanding a macro */ 99 100 void DisableDefineStyleMacros (void); 101 /* Disable define style macros until EnableDefineStyleMacros is called */ 102 103 void EnableDefineStyleMacros (void); 104 /* Re-enable define style macros previously disabled with 105 ** DisableDefineStyleMacros. 106 */ 107 108 109 110 /* End of macro.h */ 111 112 #endif 113