/// Generates the truth table. void MainWindow::generate() { delete_columns(); get_variables(); FunctionParser p; switch(m_mode) { case Function: char func[128]; Edit_GetText(m_hWndFunction, func, 128); try { p = FunctionParser(m_variables, func); } catch(FunctionParser::FunctionParserException& e) { MessageBox(e.what(), "Function Parser Error", MB_OK | MB_ICONERROR); return; } build_table(&p); break; case Minterm: break; case Maxterm: break; } }
size_t Lua::Leanify(size_t size_leanified /*= 0*/) { // skip header p_read += 0xC; p_write = p_read - size_leanified; fp -= size_leanified; FunctionParser(); return p_write - fp; }
// copied from an old code, need to refactor someday void Lua::FunctionParser() { uint32_t i; char *oldp; // Function header i = *(uint32_t *)p_read; p_read += i + 4; // remove Source name, Line defined and last line defined memset(p_write, 0, 12); *(uint32_t *)(p_write + 12) = *(uint32_t *)(p_read + 8); p_write += 0x10; p_read += 0xC; // Instruction list i = *(uint32_t *)p_read * 4 + 4; memmove(p_write, p_read, i); p_write += i; p_read += i; oldp = p_read; // Constant list i = *(uint32_t *)p_read; p_read += 4; while (i--) { switch (*p_read++) { // 1=LUA_TBOOLEAN case 1: p_read++; break; // 3=LUA_TNUMBER case 3: p_read += 8; break; // 4=LUA_TSTRING case 4: p_read += *(uint32_t *)p_read + 4; } } // Function prototype list i = *(uint32_t *)p_read; p_read += 4; memmove(p_write, oldp, p_read - oldp); p_write += p_read - oldp; while (i--) { FunctionParser(); } // Source line position list (optional debug data) p_read += *((uint32_t *)p_read) * 4 + 4; // Local list (optional debug data) i = *(uint32_t *)p_read; p_read += 4; while (i--) { p_read += *(uint32_t *)p_read + 12; } // Upvalue list (optional debug data) i = *(uint32_t *)p_read; p_read += 4; while (i--) { p_read += *(uint32_t *)p_read + 4; } // strip above optional debug data memset(p_write, 0, 12); p_write += 12; }