#ifndef DEFS_H #define DEFS_H #include #include #include #include /* common.cpp */ TCHAR *TszFromSz(const char *, int); struct Library { Library(const TCHAR *); ~Library(); FARPROC GetProcAddress(const char *); static std::unique_ptr Load(const TCHAR *); 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 Pl(const char *, const char *); 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); } 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...); } template int Pl(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; if (!PL_call_predicate(NULL, PL_Q_NORMAL, PL_predicate(szPred, iArity, szMod), t)) return 0; if (!PlGetv(t, args...)) return 0; return 1; } /* 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); } #endif