#include #include #include #include WORD SymbolTable::isInSymbols(char symbol) { for(int i=0;i macroStrings; char *startPosition=mlpPtrString; WORD offsetPosition; pushSymbol(EnvMacroMid); pushSymbol(EnvMacroEnd); pushSymbol(EnvMacroSync); pushSymbol(EnvMacroStart); if(!expect(EnvMacroStart))return; if(!expect(EnvMacroSync))return; popSymbol(2); extractString(macroString); macroStrings.insert(¯oString); popSymbol(1); while(isInSymbols(*mlpPtrString)) { pushSymbol(EnvMacroEnd); if(!expect(*mlpPtrString))return; extractString(macroString); macroStrings.insert(¯oString); popSymbol(1); } popSymbol(1); pushSymbol(EnvMacroEnd); if(!expect(*mlpPtrString))return; popSymbol(1); *startPosition=0; tempString=mInputString; macroString=locateFirstEnvironmentString(macroStrings); tempString+=macroString; offsetPosition=::strlen(mInputString)+::strlen(macroString); tempString+=mlpPtrString; mInputString=tempString; mlpPtrString=((LPSTR)mInputString+offsetPosition); } void Macro::extractString(String ¯oString) { String tempString; BYTE counter(0); while(0!=*mlpPtrString&&!isInSymbols(*mlpPtrString)) { *((LPSTR)tempString+counter++)=*mlpPtrString; mlpPtrString++; } *((LPSTR)tempString+counter)=0; macroString=tempString; } WORD Macro::expect(char symbol) { if(*mlpPtrString==symbol) { mlpPtrString++; return TRUE; } while(0!=*mlpPtrString&&!isInSymbols(*mlpPtrString))mlpPtrString++; return FALSE; } String Macro::locateFirstEnvironmentString(Block &varStrings) { size_t size(varStrings.size()); char *envPtr; for(int i=0;i