From e2dfdd7d07f54b464a4419dcf102662f1694d4b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20Ankarstr=C3=B6m?= Date: Fri, 15 Jul 2022 18:50:15 +0200 Subject: Split defs.h into separate header files. This is feasible now that the makedeps script exists to automatically manage build dependencies (see 6034fe2, d00f8b3). --- c/common.cpp | 3 +- c/common.h | 59 +++++++++++++++ c/datalistview.cpp | 6 +- c/datalistview.h | 15 ++++ c/defs.h | 200 -------------------------------------------------- c/episodelistview.cpp | 6 +- c/episodelistview.h | 35 +++++++++ c/listview.cpp | 5 +- c/listview.h | 19 +++++ c/main.cpp | 7 +- c/main.h | 6 ++ c/pl.cpp | 3 +- c/pl.h | 92 +++++++++++++++++++++++ 13 files changed, 248 insertions(+), 208 deletions(-) create mode 100644 c/common.h create mode 100644 c/datalistview.h delete mode 100644 c/defs.h create mode 100644 c/episodelistview.h create mode 100644 c/listview.h create mode 100644 c/main.h create mode 100644 c/pl.h diff --git a/c/common.cpp b/c/common.cpp index 3a99769..1fcff31 100644 --- a/c/common.cpp +++ b/c/common.cpp @@ -3,8 +3,7 @@ #include #include -#include "resource.h" -#include "defs.h" +#include "common.h" /* Convert normal string to TSTR using given codepage. */ TCHAR *TszFromSz(const char *sz, int iCp) diff --git a/c/common.h b/c/common.h new file mode 100644 index 0000000..a6bba23 --- /dev/null +++ b/c/common.h @@ -0,0 +1,59 @@ +#ifndef COMMON_H +#define COMMON_H + +#include +#include +#include +#include + +TCHAR *TszFromSz(const char *, int); +struct Win32Error : public std::exception +{ + Win32Error(DWORD); + ~Win32Error(void); + virtual const char *what(void) const noexcept override; +private: + DWORD m_dwErr; + char *m_szMsg = NULL; +}; +struct Library +{ + Library(const TCHAR *); + ~Library(void); + FARPROC GetProcAddress(const char *); +private: + HMODULE m_hModule; +}; + +#ifdef UNICODE +#define WA "W" +#else +#define WA "A" +#endif + +inline int Cmp(int a, int b) +{ + if (a == b) + return 0; + if (a > b) + return 1; + return -1; +} + +inline int Dpi(int i) +{ + extern int g_iDPI; + return MulDiv(i, g_iDPI, 96); +} + +template +std::optional try_make(A ...args) +{ + try { + return T(args...); + } catch (...) { + return {}; + } +} + +#endif diff --git a/c/datalistview.cpp b/c/datalistview.cpp index 9c13ae8..b730993 100644 --- a/c/datalistview.cpp +++ b/c/datalistview.cpp @@ -4,7 +4,11 @@ #include #include "resource.h" -#include "defs.h" +#include "common.h" +#include "datalistview.h" +#include "episodelistview.h" +#include "listview.h" +#include "main.h" extern EpisodeListView *g_lpElv; diff --git a/c/datalistview.h b/c/datalistview.h new file mode 100644 index 0000000..011f067 --- /dev/null +++ b/c/datalistview.h @@ -0,0 +1,15 @@ +#ifndef DATALISTVIEW_H +#define DATALISTVIEW_H + +#include "listview.h" + +struct DataListView : public ListView +{ + DataListView(void); + void ShowEpisode(int); +}; + +#define DLVSIKEY 0 +#define DLVSIVALUE 1 + +#endif diff --git a/c/defs.h b/c/defs.h deleted file mode 100644 index 102dce2..0000000 --- a/c/defs.h +++ /dev/null @@ -1,200 +0,0 @@ -#ifndef DEFS_H -#define DEFS_H - -#include -#include -#include -#include -#include -#include - -/* common.cpp */ -TCHAR *TszFromSz(const char *, int); -struct Win32Error : public std::exception -{ - Win32Error(DWORD); - ~Win32Error(void); - virtual const char *what(void) const noexcept override; -private: - DWORD m_dwErr; - char *m_szMsg = NULL; -}; -struct Library -{ - Library(const TCHAR *); - ~Library(void); - FARPROC GetProcAddress(const char *); -private: - HMODULE m_hModule; -}; - -/* main.cpp */ -void UpdateLayout(); - -/* listview.cpp */ -struct ListView -{ - ListView(HMENU, DWORD); - int Height(int = -1); - HWND HWnd(void) const; - virtual void UpdateTheme(BOOL); - virtual LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); -protected: - int m_bHeader = 1; - WNDPROC m_prevProc; - HWND m_hWnd; -}; - -/* episodelistview.cpp */ -struct EpisodeListView : public ListView -{ - EpisodeListView(void); - void DoSort(void); - void EnsureFocusVisible(void); - LRESULT HandleNotify(LPARAM); - int ISort(void) const; - void Redraw(void); - void SaveFocus(void); - void SetTop(int); - void RestoreFocus(void); - void SelectUnwatched(int); - void ShowFocus(void); - void Update(void); - void UpdateItem(LPLVITEM); - LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM) override; -private: - int m_iSort; - LVITEM m_lviFocus; - friend int CALLBACK ElvSort(LPARAM, LPARAM, LPARAM); -}; - -/* datalistview.cpp */ -struct DataListView : public ListView -{ - DataListView(void); - void ShowEpisode(int); -}; - -/* pl.cpp */ -int Plx(const char *, const char *); -struct Query -{ - Query(module_t ctx, predicate_t p, term_t t0); - ~Query(void); - int Cut(); - int Close(); - int NextSolution(); -private: - qid_t m_q; -}; - -/* Polymorphic aliases for PL_put_*, PL_get_*. */ -inline int PlPut(term_t t, int x) { return PL_put_integer(t, x); } -inline int PlPut(term_t t, long x) { return PL_put_integer(t, x); } -inline int PlPut(term_t t, long long x) { return PL_put_integer(t, x); } -inline int PlPut(term_t t, atom_t x) { return PL_put_atom(t, x); } -inline int PlPut(term_t t, char *x) { return PL_put_atom(t, PL_new_atom(x)); } -inline int PlPut(term_t t, const char *x) { return PL_put_atom(t, PL_new_atom(x)); } -inline int PlPut(term_t t, int *x) { return -1; } -inline int PlPut(term_t t, long *x) { return -1; } -inline int PlPut(term_t t, long long *x) { return -1; } -inline int PlPut(term_t t, atom_t *x) { return -1; } -inline int PlPut(term_t t, char **x) { return -1; } - -inline int PlGet(term_t t, int x) { return -1; } -inline int PlGet(term_t t, long x) { return -1; } -inline int PlGet(term_t t, long long x) { return -1; } -inline int PlGet(term_t t, atom_t x) { return -1; } -inline int PlGet(term_t t, char *x) { return -1; } -inline int PlGet(term_t t, const char *x) { return -1; } -inline int PlGet(term_t t, int *x) { return PL_get_integer(t, x); } -inline int PlGet(term_t t, long *x) { return PL_get_long(t, x); } -inline int PlGet(term_t t, long long *x) { return PL_get_int64(t, x); } -inline int PlGet(term_t t, atom_t *x) { return PL_get_atom(t, x); } -inline int PlGet(term_t t, char **x) { return PL_get_atom_chars(t, x); } - -/* Helper templates for Plx, Pl. */ -template -int PlPutv(term_t t, T arg) { return PlPut(t, arg); } -template -int PlPutv(term_t t, T arg, R... rest) { return PlPut(t, arg)? PlPutv(t+1, rest...): 0; } -template -int PlGetv(term_t t, T arg) { return PlGet(t, arg); } -template -int PlGetv(term_t t, T arg, R... rest) { return PlGet(t, arg)? PlGetv(t+1, rest...): 0; } -template -int Countv(int i, T arg) { return i+1; } -template -int Countv(int i, T arg, R... rest) { return Countv(i+1, rest...); } - -/* Call Prolog predicate, propagating Prolog exceptions. */ -template -int Plx(const char *szMod, const char *szPred, T... args) -{ - int iArity = Countv(0, args...); - term_t t = PL_new_term_refs(iArity); - if (!PlPutv(t, args...)) return 0; - Query q(NULL, PL_predicate(szPred, iArity, szMod), t); - if (!q.NextSolution()) return 0; - if (!PlGetv(t, args...)) return 0; - return 1; -} - -/* Call Prolog predicate, ignoring Prolog exceptions. */ -inline int Pl(const char *szMod, const char *szPred) -{ - try { - return Plx(szMod, szPred); - } catch (term_t &t) { - return 0; - } -} -template -int Pl(const char *szMod, const char *szPred, T... args) -{ - try { - return Plx(szMod, szPred, args...); - } catch (term_t &t) { - return 0; - } -} - -/* defs.h */ -#ifdef UNICODE -#define WA "W" -#else -#define WA "A" -#endif - -#define DLVSIKEY 0 -#define DLVSIVALUE 1 -#define ELVSIEPISODE 0 -#define ELVSITITLE 1 -#define ELVSIRATING 2 - -inline int Cmp(int a, int b) -{ - if (a == b) - return 0; - if (a > b) - return 1; - return -1; -} - -inline int Dpi(int i) -{ - extern int g_iDPI; - return MulDiv(i, g_iDPI, 96); -} - -template -std::optional try_make(A ...args) -{ - try { - return T(args...); - } catch (...) { - return {}; - } -} - -#endif diff --git a/c/episodelistview.cpp b/c/episodelistview.cpp index 6430b17..a126649 100644 --- a/c/episodelistview.cpp +++ b/c/episodelistview.cpp @@ -4,7 +4,11 @@ #include #include "resource.h" -#include "defs.h" +#include "common.h" +#include "datalistview.h" +#include "episodelistview.h" +#include "listview.h" +#include "pl.h" extern DataListView *g_lpDlv; int CALLBACK ElvSort(LPARAM, LPARAM, LPARAM); diff --git a/c/episodelistview.h b/c/episodelistview.h new file mode 100644 index 0000000..8befc14 --- /dev/null +++ b/c/episodelistview.h @@ -0,0 +1,35 @@ +#ifndef EPISODELISTVIEW_H +#define EPISODELISTVIEW_H + +#include +#include + +#include "listview.h" + +struct EpisodeListView : public ListView +{ + EpisodeListView(void); + void DoSort(void); + void EnsureFocusVisible(void); + LRESULT HandleNotify(LPARAM); + int ISort(void) const; + void Redraw(void); + void SaveFocus(void); + void SetTop(int); + void RestoreFocus(void); + void SelectUnwatched(int); + void ShowFocus(void); + void Update(void); + void UpdateItem(LPLVITEM); + LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM) override; +private: + int m_iSort; + LVITEM m_lviFocus; + friend int CALLBACK ElvSort(LPARAM, LPARAM, LPARAM); +}; + +#define ELVSIEPISODE 0 +#define ELVSITITLE 1 +#define ELVSIRATING 2 + +#endif diff --git a/c/listview.cpp b/c/listview.cpp index 1a06e55..4e9d754 100644 --- a/c/listview.cpp +++ b/c/listview.cpp @@ -2,8 +2,9 @@ #include #include -#include "resource.h" -#include "defs.h" +#include "common.h" +#include "listview.h" +#include "main.h" extern HFONT g_hfNormal; extern HWND g_hWnd; diff --git a/c/listview.h b/c/listview.h new file mode 100644 index 0000000..369c4ec --- /dev/null +++ b/c/listview.h @@ -0,0 +1,19 @@ +#ifndef LISTVIEW_H +#define LISTVIEW_H + +#include + +struct ListView +{ + ListView(HMENU, DWORD); + int Height(int = -1); + HWND HWnd(void) const; + virtual void UpdateTheme(BOOL); + virtual LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); +protected: + int m_bHeader = 1; + WNDPROC m_prevProc; + HWND m_hWnd; +}; + +#endif diff --git a/c/main.cpp b/c/main.cpp index 82c95ba..cbfb8f1 100644 --- a/c/main.cpp +++ b/c/main.cpp @@ -1,10 +1,15 @@ +#include #include #include #include #include #include "resource.h" -#include "defs.h" +#include "common.h" +#include "datalistview.h" +#include "episodelistview.h" +#include "main.h" +#include "pl.h" DataListView *g_lpDlv = nullptr; EpisodeListView *g_lpElv = nullptr; diff --git a/c/main.h b/c/main.h new file mode 100644 index 0000000..0b899e6 --- /dev/null +++ b/c/main.h @@ -0,0 +1,6 @@ +#ifndef MAIN_H +#define MAIN_H + +void UpdateLayout(); + +#endif diff --git a/c/pl.cpp b/c/pl.cpp index 1fbc4e7..ace83e7 100644 --- a/c/pl.cpp +++ b/c/pl.cpp @@ -1,5 +1,6 @@ #include -#include "defs.h" + +#include "pl.h" Query::Query(module_t ctx, predicate_t p, term_t t0) { diff --git a/c/pl.h b/c/pl.h new file mode 100644 index 0000000..f0edfb8 --- /dev/null +++ b/c/pl.h @@ -0,0 +1,92 @@ +#ifndef PL_H +#define PL_H + +#include + +int Plx(const char *, const char *); +struct Query +{ + Query(module_t ctx, predicate_t p, term_t t0); + ~Query(void); + int Cut(); + int Close(); + int NextSolution(); +private: + qid_t m_q; +}; + +#define DLVSIKEY 0 +#define DLVSIVALUE 1 + +/* Polymorphic aliases for PL_put_*, PL_get_*. */ +inline int PlPut(term_t t, int x) { return PL_put_integer(t, x); } +inline int PlPut(term_t t, long x) { return PL_put_integer(t, x); } +inline int PlPut(term_t t, long long x) { return PL_put_integer(t, x); } +inline int PlPut(term_t t, atom_t x) { return PL_put_atom(t, x); } +inline int PlPut(term_t t, char *x) { return PL_put_atom(t, PL_new_atom(x)); } +inline int PlPut(term_t t, const char *x) { return PL_put_atom(t, PL_new_atom(x)); } +inline int PlPut(term_t t, int *x) { return -1; } +inline int PlPut(term_t t, long *x) { return -1; } +inline int PlPut(term_t t, long long *x) { return -1; } +inline int PlPut(term_t t, atom_t *x) { return -1; } +inline int PlPut(term_t t, char **x) { return -1; } + +inline int PlGet(term_t t, int x) { return -1; } +inline int PlGet(term_t t, long x) { return -1; } +inline int PlGet(term_t t, long long x) { return -1; } +inline int PlGet(term_t t, atom_t x) { return -1; } +inline int PlGet(term_t t, char *x) { return -1; } +inline int PlGet(term_t t, const char *x) { return -1; } +inline int PlGet(term_t t, int *x) { return PL_get_integer(t, x); } +inline int PlGet(term_t t, long *x) { return PL_get_long(t, x); } +inline int PlGet(term_t t, long long *x) { return PL_get_int64(t, x); } +inline int PlGet(term_t t, atom_t *x) { return PL_get_atom(t, x); } +inline int PlGet(term_t t, char **x) { return PL_get_atom_chars(t, x); } + +/* Helper templates for Plx, Pl. */ +template +int PlPutv(term_t t, T arg) { return PlPut(t, arg); } +template +int PlPutv(term_t t, T arg, R... rest) { return PlPut(t, arg)? PlPutv(t+1, rest...): 0; } +template +int PlGetv(term_t t, T arg) { return PlGet(t, arg); } +template +int PlGetv(term_t t, T arg, R... rest) { return PlGet(t, arg)? PlGetv(t+1, rest...): 0; } +template +int Countv(int i, T arg) { return i+1; } +template +int Countv(int i, T arg, R... rest) { return Countv(i+1, rest...); } + +/* Call Prolog predicate, propagating Prolog exceptions. */ +template +int Plx(const char *szMod, const char *szPred, T... args) +{ + int iArity = Countv(0, args...); + term_t t = PL_new_term_refs(iArity); + if (!PlPutv(t, args...)) return 0; + Query q(NULL, PL_predicate(szPred, iArity, szMod), t); + if (!q.NextSolution()) return 0; + if (!PlGetv(t, args...)) return 0; + return 1; +} + +/* Call Prolog predicate, ignoring Prolog exceptions. */ +inline int Pl(const char *szMod, const char *szPred) +{ + try { + return Plx(szMod, szPred); + } catch (term_t &t) { + return 0; + } +} +template +int Pl(const char *szMod, const char *szPred, T... args) +{ + try { + return Plx(szMod, szPred, args...); + } catch (term_t &t) { + return 0; + } +} + +#endif -- cgit v1.2.3