diff options
Diffstat (limited to 'c')
-rw-r--r-- | c/common.cpp | 27 | ||||
-rw-r--r-- | c/pl.cpp | 20 | ||||
-rw-r--r-- | c/pl.h | 8 |
3 files changed, 36 insertions, 19 deletions
diff --git a/c/common.cpp b/c/common.cpp index 494c382..a91836d 100644 --- a/c/common.cpp +++ b/c/common.cpp @@ -2,6 +2,8 @@ #include "common.h" +/* Win32Error: Exception for Windows API errors. */ + Win32Error::Win32Error(const DWORD dwErr) : m_dwErr(dwErr) {} Win32Error::~Win32Error() @@ -46,6 +48,8 @@ const TCHAR* Win32Error::twhat() const noexcept #undef M } +/* Library: Wrapper for loading and freeing dynamically linked libraries. */ + Library::Library(const TCHAR* const tszLibrary) { m_hModule = LoadLibrary(tszLibrary); @@ -66,21 +70,22 @@ static LRESULT CALLBACK CBTProc(const int nCode, const WPARAM wParam, const LPAR return CallNextHookEx(0, nCode, wParam, lParam); HWND hWnd = (HWND)wParam; - if (long lStyle = GetWindowLong(hWnd, GWL_STYLE)) - if (lStyle & WS_POPUP) { - RECT rcMain, rcMsg; - GetWindowRect(g_hWnd, &rcMain); - GetWindowRect(hWnd, &rcMsg); - SetWindowPos(hWnd, NULL, - rcMain.left+(rcMain.right-rcMain.left)/2-(rcMsg.right-rcMsg.left)/2, - rcMain.top+(rcMain.bottom-rcMain.top)/2-(rcMsg.bottom-rcMsg.top)/2, - -1, -1, - SWP_NOZORDER|SWP_NOSIZE|SWP_NOACTIVATE); - } + long lStyle = GetWindowLong(hWnd, GWL_STYLE); + if (!(lStyle & WS_POPUP)) return 0; + + RECT rcMain, rcMsg; + GetWindowRect(g_hWnd, &rcMain); + GetWindowRect(hWnd, &rcMsg); + SetWindowPos(hWnd, NULL, + rcMain.left+(rcMain.right-rcMain.left)/2-(rcMsg.right-rcMsg.left)/2, + rcMain.top+(rcMain.bottom-rcMain.top)/2-(rcMsg.bottom-rcMsg.top)/2, + -1, -1, + SWP_NOZORDER|SWP_NOSIZE|SWP_NOACTIVATE); return 0; } +/* Show message box owned by and centered in the main window. */ int EBMessageBox(const TCHAR* const tszText, const TCHAR* const tszCaption, const unsigned uType) { extern HWND g_hWnd; @@ -3,6 +3,8 @@ #include "pl.h" +/* Frame: Wrapper for opening and closing Prolog foreign frames. */ + Frame::Frame() { m_f = PL_open_foreign_frame(); @@ -18,6 +20,7 @@ void Frame::Close() PL_close_foreign_frame(m_f); } +/* Close foreign frame and invalidate associated data. */ void Frame::Discard() { PL_discard_foreign_frame(m_f); @@ -28,6 +31,8 @@ void Frame::Rewind() PL_rewind_foreign_frame(m_f); } +/* Mark: Wrapper for marking and releasing strings on the Prolog stack. */ + Mark::Mark() { PL_mark_string_buffers(&m_m); @@ -38,6 +43,8 @@ Mark::~Mark() PL_release_string_buffers_from_mark(m_m); } +/* Query: Wrapper for opening, solving and cutting Prolog query. */ + Query::Query(const module_t ctx, const predicate_t p, const term_t t0) { m_q = PL_open_query(ctx, PL_Q_CATCH_EXCEPTION, p, t0); @@ -55,6 +62,7 @@ int Query::Cut() return 0; } +/* Cut query and invalidate associated data. */ int Query::Close() { if (PL_close_query(m_q)) return 1; @@ -69,6 +77,7 @@ int Query::NextSolution() return 0; } +/* Convert Prolog term to normal or wide characters. */ int PL_get_tchars(const term_t t, TCHAR** const pTsz, const int iFlags) { #ifdef UNICODE @@ -83,6 +92,7 @@ int PL_get_tchars(const term_t t, TCHAR** const pTsz, const int iFlags) #endif } +/* Call nullary Prolog predicate, propagating Prolog exceptions. */ int Plx(const char* const szMod, const char* const szPred) { Frame f; @@ -90,3 +100,13 @@ int Plx(const char* const szMod, const char* const szPred) Query q(NULL, PL_predicate(szPred, 0, szMod), t); return q.NextSolution(); } + +/* Call nullary Prolog predicate, ignoring Prolog exceptions. */ +int Pl(const char* const szMod, const char* const szPred) +{ + try { + return Plx(szMod, szPred); + } catch (term_t& t) { + return 0; + } +} @@ -95,14 +95,6 @@ int Plx(const char* const szMod, const char* const szPred, T... args) } /* Call Prolog predicate, ignoring Prolog exceptions. */ -inline int Pl(const char* const szMod, const char* const szPred) -{ - try { - return Plx(szMod, szPred); - } catch (term_t& t) { - return 0; - } -} template <typename ...T> int Pl(const char* const szMod, const char* const szPred, T... args) { |