mirror of
https://github.com/WinampDesktop/winamp.git
synced 2024-11-30 20:54:31 +01:00
1025 lines
31 KiB
C++
1025 lines
31 KiB
C++
#include <windowsx.h>
|
|
|
|
#include "Main.h"
|
|
#include "api.h"
|
|
#include "../nu/AutoChar.h"
|
|
#include "../nu/ns_wc.h"
|
|
|
|
unsigned char eq_tab[10] = {31, 31, 31, 31, 31, 31, 31, 31, 31, 31};
|
|
|
|
static int writeEQfile(wchar_t *file, char *name);
|
|
static int readEQfile(wchar_t *file, char *name);
|
|
static void deleteEQfile(wchar_t *file, char *name);
|
|
static void addEQtolistbox(wchar_t *file, HWND listbox);
|
|
|
|
static BOOL CALLBACK loadpresetProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
|
|
static BOOL CALLBACK delpresetProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
|
|
static BOOL CALLBACK savepresetProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
|
|
static BOOL CALLBACK loadmp3Proc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
|
|
static BOOL CALLBACK savemp3Proc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
|
|
static BOOL CALLBACK delmp3Proc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
|
|
static BOOL CALLBACK eqProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
|
|
|
|
static int EQ_OnRButtonUp(HWND hwnd, int x, int y, UINT flags);
|
|
static int EQ_OnLButtonDblClk(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT keyFlags)
|
|
{
|
|
if ((config_dsize && config_eqdsize ? 1 : 0)) { x /= 2; y /= 2; }
|
|
if (y <= 14 && x < 252)
|
|
{
|
|
SendMessageW(hMainWindow, WM_COMMAND, WINAMP_OPTIONS_WINDOWSHADE_EQ, 0);
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
static int EQ_OnLButtonUp(HWND hwnd, int x, int y, UINT flags);
|
|
static int EQ_OnLButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT keyFlags);
|
|
static int EQ_OnMouseMove(HWND hwnd, int x, int y, UINT keyFlags);
|
|
static BOOL EQ_OnNCActivate(HWND hwnd, BOOL fActive, HWND hwndActDeact, BOOL fMinimized);
|
|
|
|
static char last_preset[128] = "Default";
|
|
static char sig[] = "Winamp EQ library file v1.1\x1A!--";
|
|
|
|
void eq_autoload(const char *mp3fn)
|
|
{
|
|
if (!config_autoload_eq)
|
|
return;
|
|
|
|
if (readEQfile(EQDIR2, scanstr_back((char*)mp3fn, "\\", (char*)mp3fn - 1) + 1))
|
|
readEQfile(EQDIR1, "Default");
|
|
|
|
PostMessageW(hMainWindow, WM_WA_IPC, IPC_CB_MISC_EQ, IPC_CB_MISC);
|
|
}
|
|
|
|
void eq_dialog(HWND hwnd, int init_state)
|
|
{
|
|
if (!hEQWindow)
|
|
return;
|
|
|
|
int toggle = Ipc_WindowToggle(IPC_CB_WND_EQ, !config_eq_open);
|
|
KillTimer(hEQWindow, 3);
|
|
if (!toggle)
|
|
return;
|
|
|
|
if (!config_eq_open)
|
|
{
|
|
CheckMenuItem(main_menu, WINAMP_OPTIONS_EQ, MF_CHECKED);
|
|
if (eq_startuphack)
|
|
{
|
|
if(!GetParent(hEQWindow))
|
|
SetTimer(hEQWindow, 3, 10, NULL);
|
|
|
|
config_eq_open = 1;
|
|
}
|
|
else
|
|
{
|
|
if(!init_state && !config_minimized)
|
|
ShowWindow(hEQWindow, SW_SHOWNA);
|
|
|
|
config_eq_open = 1;
|
|
|
|
if (config_eq_ws)
|
|
draw_eq_tbar(GetForegroundWindow() == hEQWindow ? 1 : (config_hilite ? 0 : 1));
|
|
|
|
set_aot(1);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (GetForegroundWindow() == hEQWindow || IsChild(hEQWindow, GetForegroundWindow()))
|
|
{
|
|
SendMessageW(hMainWindow, WM_COMMAND, WINAMP_NEXT_WINDOW, 0);
|
|
}
|
|
CheckMenuItem(main_menu, WINAMP_OPTIONS_EQ, MF_UNCHECKED);
|
|
ShowWindow(hEQWindow, SW_HIDE);
|
|
config_eq_open = 0;
|
|
}
|
|
draw_eqplbut(config_eq_open, 0, config_pe_open, 0);
|
|
return ;
|
|
}
|
|
|
|
static void
|
|
EqWindow_OnMouseWheel(HWND hwnd, INT virtualKeys, INT distance, LONG pointer_s)
|
|
{
|
|
SendMessageW(hMainWindow, WM_MOUSEWHEEL, MAKEWPARAM(virtualKeys, distance), (LPARAM)pointer_s);
|
|
}
|
|
|
|
LRESULT CALLBACK EQ_WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
|
{
|
|
switch (uMsg)
|
|
{
|
|
case WM_NOTIFY:
|
|
{
|
|
LPTOOLTIPTEXT tt = (LPTOOLTIPTEXT)lParam;
|
|
if(tt->hdr.hwndFrom = hEQTooltipWindow)
|
|
{
|
|
switch (tt->hdr.code)
|
|
{
|
|
case TTN_SHOW:
|
|
SetWindowPos(tt->hdr.hwndFrom,HWND_TOPMOST,0,0,0,0,SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case WM_DESTROY:
|
|
KillTimer(hwnd, 3);
|
|
if (eq_init)
|
|
draw_eq_kill();
|
|
if (NULL != WASABI_API_APP) WASABI_API_APP->app_unregisterGlobalWindow(hwnd);
|
|
break;
|
|
case WM_TIMER:
|
|
if (wParam == 3)
|
|
{
|
|
KillTimer(hwnd, 3);
|
|
if (!IsMinimized(hMainWindow))
|
|
{
|
|
ShowWindow(hwnd, SW_SHOWNA);
|
|
}
|
|
|
|
// works around a quirk with Bento docked to the right-hand edge
|
|
// where the pledit is left docked on reverting to classic skin (dro)
|
|
if(!GetParent(hwnd)) set_aot(1);
|
|
}
|
|
break;
|
|
case WM_DISPLAYCHANGE:
|
|
InvalidateRect(hwnd, NULL, TRUE);
|
|
break;
|
|
|
|
case WM_SHOWWINDOW:
|
|
if (wParam == TRUE && lParam == SW_PARENTOPENING && !config_eq_open)
|
|
{
|
|
return 0;
|
|
}
|
|
break;
|
|
|
|
HANDLE_MSG(hwnd, WM_QUERYNEWPALETTE, Main_OnQueryNewPalette);
|
|
HANDLE_MSG(hwnd, WM_PALETTECHANGED, Main_OnPaletteChanged);
|
|
HANDLE_MSG(hwnd, WM_LBUTTONUP, EQ_OnLButtonUp);
|
|
HANDLE_MSG(hwnd, WM_RBUTTONUP, EQ_OnRButtonUp);
|
|
HANDLE_MSG(hwnd, WM_LBUTTONDBLCLK, EQ_OnLButtonDblClk);
|
|
HANDLE_MSG(hwnd, WM_LBUTTONDOWN, EQ_OnLButtonDown);
|
|
HANDLE_MSG(hwnd, WM_MOUSEMOVE, EQ_OnMouseMove);
|
|
HANDLE_MSG(hwnd, WM_NCACTIVATE, EQ_OnNCActivate);
|
|
case WM_SYSCOMMAND:
|
|
if ((wParam & 0xfff0) == SC_SCREENSAVE || (wParam & 0xfff0) == SC_MONITORPOWER)
|
|
return SendMessageW(hMainWindow, uMsg, wParam, lParam);
|
|
break;
|
|
|
|
case WM_CLOSE:
|
|
WASABI_API_APP->main_shutdown();
|
|
return 0;
|
|
case WM_PRINTCLIENT:
|
|
draw_printclient_eq((HDC)wParam, lParam);
|
|
return 0;
|
|
case WM_PAINT:
|
|
draw_paint_eq(hwnd);
|
|
return 0;
|
|
case WM_SETCURSOR:
|
|
if (config_usecursors && !disable_skin_cursors)
|
|
{
|
|
if ((HWND)wParam == hEQWindow && HIWORD(lParam) == WM_MOUSEMOVE) eq_ui_handlecursor();
|
|
return TRUE;
|
|
}
|
|
else SetCursor(LoadCursor(NULL, IDC_ARROW));
|
|
break;
|
|
case WM_CREATE:
|
|
hEQWindow = hwnd;
|
|
SetWindowLongPtrW(hEQWindow, GWLP_USERDATA, (config_keeponscreen&2) ? 0x49474541 : 0);
|
|
{
|
|
int w = WINDOW_WIDTH << ((config_dsize && config_eqdsize) ? 1 : 0);
|
|
int h = ((config_eq_ws ? 14 : WINDOW_HEIGHT)) << ((config_dsize && config_eqdsize) ? 1 : 0);
|
|
SetWindowLong(hwnd, GWL_STYLE, GetWindowLongW(hwnd, GWL_STYLE)&~(WS_CAPTION));
|
|
SetWindowPos(hEQWindow, 0, config_eq_wx, config_eq_wy, w, h, SWP_NOACTIVATE | SWP_NOZORDER | SWP_HIDEWINDOW);
|
|
|
|
HACCEL hAccel = LoadAcceleratorsW(language_pack_instance, MAKEINTRESOURCEW(IDR_ACCELERATOR_EQ));
|
|
if (!hAccel && language_pack_instance != hMainInstance) hAccel = LoadAcceleratorsW(hMainInstance, MAKEINTRESOURCEW(IDR_ACCELERATOR_EQ));
|
|
if (hAccel) WASABI_API_APP->app_addAccelerators(hwnd, &hAccel, 1, TRANSLATE_MODE_NORMAL);
|
|
}
|
|
if (NULL != WASABI_API_APP) WASABI_API_APP->app_registerGlobalWindow(hwnd);
|
|
return 0;
|
|
case WM_USER:
|
|
{
|
|
int x;
|
|
draw_eq_slid(0, config_preamp, 0);
|
|
for (x = 1; x <= 10; x ++)
|
|
draw_eq_slid(x, eq_tab[x - 1], 0);
|
|
draw_eq_graphthingy();
|
|
}
|
|
return 0;
|
|
case WM_COMMAND:
|
|
switch (LOWORD(wParam))
|
|
{
|
|
case EQ_PANLEFT:
|
|
if (config_pan - 4 < -128) config_pan = -128;
|
|
else
|
|
{
|
|
if (config_pan - 4 > 0 && config_pan - 4 < 20) config_pan = 0;
|
|
else config_pan -= 4;
|
|
}
|
|
in_setpan(config_pan);
|
|
draw_panbar(config_pan, 0);
|
|
update_panning_text(-2);
|
|
return 0;
|
|
case EQ_PANRIGHT:
|
|
if (config_pan + 4 > 127) config_pan = 127;
|
|
else
|
|
{
|
|
if (config_pan + 4 < 0 && config_pan + 4 > -20) config_pan = 0;
|
|
else config_pan += 4;
|
|
}
|
|
in_setpan(config_pan);
|
|
draw_panbar(config_pan, 0);
|
|
update_panning_text(-2);
|
|
return 0;
|
|
|
|
case WINAMP_OPTIONS_WINDOWSHADE:
|
|
SendMessageW(hMainWindow, WM_COMMAND, WINAMP_OPTIONS_WINDOWSHADE_EQ, 0);
|
|
return 0;
|
|
case IDM_EQ_LOADDEFAULT:
|
|
readEQfile(EQDIR1, "Default");
|
|
PostMessageW(hMainWindow, WM_WA_IPC, IPC_CB_MISC_EQ, IPC_CB_MISC);
|
|
return 0;
|
|
case IDM_EQ_SAVEDEFAULT:
|
|
{
|
|
writeEQfile(EQDIR1, "Default");
|
|
}
|
|
return 0;
|
|
case ID_SAVE_EQF:
|
|
case ID_LOAD_EQF:
|
|
{
|
|
wchar_t filename[1024] = {0};
|
|
size_t size, ns;
|
|
wchar_t *filter, *sf;
|
|
UINT operation;
|
|
OPENFILENAMEW l = {sizeof(OPENFILENAMEW), 0};
|
|
|
|
size = 1024;
|
|
filter = (wchar_t*)calloc(size, sizeof(wchar_t));
|
|
sf = filter;
|
|
ns = 1;
|
|
|
|
getStringW(IDS_P_FILE_EQ, filter, size);
|
|
StringCbLengthW(filter, size, &ns);
|
|
size -= (++ns);
|
|
filter += ns;
|
|
StringCchCopyW(filter, size, L"*.eqf");
|
|
StringCbLengthW(filter, size, &ns);
|
|
size -= (++ns);
|
|
filter += ns;
|
|
getStringW(IDS_P_FILE_ALL, filter, size);
|
|
StringCbLengthW(filter, size, &ns);
|
|
size -= (++ns);
|
|
filter += ns;
|
|
StringCchCopyW(filter, size, L"*.*");
|
|
StringCbLengthW(filter, size, &ns);
|
|
//size -= (ns + 2);
|
|
|
|
l.hwndOwner = hwnd;
|
|
l.lpstrFilter = sf;
|
|
l.lpstrFile = filename;
|
|
l.nMaxFile = sizeof(filename) - 1;
|
|
|
|
operation = (LOWORD(wParam) == ID_SAVE_EQF) ? IDS_P_EQ_FILE_WRITE : IDS_P_EQ_FILE_READ;
|
|
l.lpstrTitle = getStringW(operation, NULL, 0);
|
|
l.lpstrDefExt = L"eqf";
|
|
l.Flags = OFN_HIDEREADONLY | OFN_EXPLORER;
|
|
UninitDragDrops();
|
|
if ((LOWORD(wParam) == ID_SAVE_EQF && GetSaveFileNameW(&l)) ||
|
|
(LOWORD(wParam) != ID_SAVE_EQF && GetOpenFileNameW(&l)))
|
|
{
|
|
if (LOWORD(wParam) == ID_SAVE_EQF) writeEQfile(filename, "Entry1");
|
|
else
|
|
{
|
|
readEQfile(filename, "Entry1");
|
|
PostMessageW(hMainWindow, WM_WA_IPC, IPC_CB_MISC_EQ, IPC_CB_MISC);
|
|
}
|
|
}
|
|
InitDragDrops();
|
|
free(sf);
|
|
}
|
|
|
|
return 0;
|
|
case IDM_EQ_SAVEPRE:
|
|
LPDialogBoxW(IDD_SAVEPRESET, DIALOG_PARENT(hwnd), (WNDPROC)savepresetProc);
|
|
return 0;
|
|
case IDM_EQ_SAVEMP3:
|
|
LPDialogBoxW(IDD_SAVEPRESET, DIALOG_PARENT(hwnd), (WNDPROC)savemp3Proc);
|
|
return 0;
|
|
case IDM_EQ_LOADPRE:
|
|
LPDialogBoxW(IDD_LOADPRESET, DIALOG_PARENT(hwnd), (WNDPROC)loadpresetProc);
|
|
return 0;
|
|
case IDM_EQ_DELPRE:
|
|
LPDialogBoxW(IDD_LOADPRESET, DIALOG_PARENT(hwnd), (WNDPROC)delpresetProc);
|
|
return 0;
|
|
case IDM_EQ_DELMP3:
|
|
LPDialogBoxW(IDD_LOADPRESET, DIALOG_PARENT(hwnd), (WNDPROC)delmp3Proc);
|
|
return 0;
|
|
case IDM_EQ_LOADMP3:
|
|
LPDialogBoxW(IDD_LOADPRESET, DIALOG_PARENT(hwnd), (WNDPROC)loadmp3Proc);
|
|
return 0;
|
|
case EQ_PRESETS:
|
|
{
|
|
extern HMENU top_menu;
|
|
POINT p = {218, 19};
|
|
if ((config_dsize && config_eqdsize))
|
|
{
|
|
p.x *= 2;
|
|
p.y *= 2;
|
|
}
|
|
ClientToScreen(hEQWindow, &p);
|
|
DoTrackPopup(GetSubMenu(top_menu, 1), TPM_LEFTALIGN, p.x, p.y, hEQWindow);
|
|
}
|
|
return 0;
|
|
case EQ_AUTO:
|
|
config_autoload_eq = !config_autoload_eq;
|
|
draw_eq_onauto(config_use_eq, config_autoload_eq, 0, 0);
|
|
PostMessageW(hMainWindow, WM_WA_IPC, IPC_CB_MISC_EQ, IPC_CB_MISC);
|
|
return 0;
|
|
case EQ_ENABLE:
|
|
config_use_eq = !config_use_eq;
|
|
eq_set(config_use_eq, (char*)eq_tab, config_preamp);
|
|
draw_eq_onauto(config_use_eq, config_autoload_eq, 0, 0);
|
|
PostMessageW(hMainWindow, WM_WA_IPC, IPC_CB_MISC_EQ, IPC_CB_MISC);
|
|
return 0;
|
|
case WINAMP_NEXT_WINDOW:
|
|
return SendMessageW(hMainWindow, uMsg, wParam, lParam);
|
|
case ID_PE_CLOSE:
|
|
SendMessageW(hMainWindow, WM_COMMAND, WINAMP_OPTIONS_EQ, 0);
|
|
return 0;
|
|
default:
|
|
{
|
|
int id = LOWORD(wParam);
|
|
if (id == EQ_INCPRE || id == EQ_DECPRE ||
|
|
(id >= EQ_DEC1 && id <= EQ_DEC10) ||
|
|
(id >= EQ_INC1 && id <= EQ_INC10))
|
|
{
|
|
int x;
|
|
int addsub = ((id >= EQ_DEC1 && id <= EQ_DEC10) || id == EQ_DECPRE) ? -2 : 2;
|
|
if (id == EQ_INCPRE || id == EQ_DECPRE)
|
|
{
|
|
config_preamp -= addsub;
|
|
if (config_preamp < 0) config_preamp = 0;
|
|
if (config_preamp > 63) config_preamp = 63;
|
|
}
|
|
else
|
|
{
|
|
int o = (id - (addsub > 0 ? EQ_INC1 : EQ_DEC1));
|
|
int p = eq_tab[o];
|
|
p -= addsub;
|
|
if (p < 0) p = 0;
|
|
if (p > 63) p = 63;
|
|
eq_tab[o] = p;
|
|
}
|
|
draw_eq_slid(0, config_preamp, 0);
|
|
for (x = 1; x <= 10; x ++)
|
|
draw_eq_slid(x, eq_tab[x - 1], 0);
|
|
draw_eq_graphthingy();
|
|
eq_set(config_use_eq, (char*)eq_tab, config_preamp);
|
|
PostMessageW(hMainWindow, WM_WA_IPC, IPC_CB_MISC_EQ, IPC_CB_MISC);
|
|
}
|
|
else
|
|
{
|
|
SendMessageW(hMainWindow, uMsg, wParam, lParam);
|
|
if (GetForegroundWindow() == hMainWindow) SetForegroundWindow(hEQWindow);
|
|
}
|
|
}
|
|
}
|
|
return 0;
|
|
case WM_MOUSEWHEEL:
|
|
EqWindow_OnMouseWheel(hwnd, LOWORD(wParam), (SHORT)HIWORD(wParam), (LONG)lParam);
|
|
return 0;
|
|
}
|
|
|
|
if (FALSE != IsDirectMouseWheelMessage(uMsg))
|
|
{
|
|
SendMessageW(hwnd, WM_MOUSEWHEEL, wParam, lParam);
|
|
return TRUE;
|
|
}
|
|
|
|
return DefWindowProcW(hwnd, uMsg, wParam, lParam);
|
|
}
|
|
|
|
static BOOL CALLBACK loadpresetProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
|
{
|
|
static unsigned char eqtbk[10];
|
|
static int eqpa;
|
|
static char lpp[512];
|
|
switch (uMsg)
|
|
{
|
|
case WM_INITDIALOG:
|
|
{
|
|
addEQtolistbox(EQDIR1, GetDlgItem(hwndDlg, IDC_LOADEQLIST));
|
|
int x = SendMessageW(GetDlgItem(hwndDlg, IDC_LOADEQLIST), LB_FINDSTRINGEXACT, (WPARAM)0, (LPARAM)last_preset);
|
|
if (x != LB_ERR)
|
|
SendMessageW(GetDlgItem(hwndDlg, IDC_LOADEQLIST), LB_SETCURSEL, (WPARAM)x, 0);
|
|
else
|
|
SendMessageW(GetDlgItem(hwndDlg, IDC_LOADEQLIST), LB_SETCURSEL, (WPARAM)-1, 0);
|
|
StringCchCopyA(lpp, 512, last_preset);
|
|
|
|
// show window and restore last position as applicable
|
|
POINT pt = {load_rect.left, load_rect.top};
|
|
if (!windowOffScreen(hwndDlg, pt))
|
|
SetWindowPos(hwndDlg, HWND_TOP, load_rect.left, load_rect.top, 0, 0, SWP_NOSIZE | SWP_NOSENDCHANGING);
|
|
|
|
eqpa = config_preamp;
|
|
memcpy(eqtbk, eq_tab, sizeof(eqtbk));
|
|
}
|
|
return TRUE;
|
|
|
|
case WM_COMMAND:
|
|
switch (LOWORD(wParam))
|
|
{
|
|
case IDOK:
|
|
SendMessageA(GetDlgItem(hwndDlg, IDC_LOADEQLIST), LB_GETTEXT,
|
|
SendMessageW(GetDlgItem(hwndDlg, IDC_LOADEQLIST), LB_GETCURSEL, 0, 0),
|
|
(LPARAM) last_preset);
|
|
readEQfile(EQDIR1, last_preset);
|
|
PostMessageW(hMainWindow, WM_WA_IPC, IPC_CB_MISC_EQ, IPC_CB_MISC);
|
|
GetWindowRect(hwndDlg, &load_rect);
|
|
EndDialog(hwndDlg, 0);
|
|
return FALSE;
|
|
case IDCANCEL:
|
|
config_preamp = eqpa;
|
|
memcpy(eq_tab, eqtbk, sizeof(eqtbk));
|
|
StringCchCopyA(last_preset, 128, lpp);
|
|
SendMessageW(hEQWindow, WM_USER, 0, 0);
|
|
eq_set(config_use_eq, (char*)eq_tab, config_preamp);
|
|
PostMessageW(hMainWindow, WM_WA_IPC, IPC_CB_MISC_EQ, IPC_CB_MISC);
|
|
GetWindowRect(hwndDlg, &load_rect);
|
|
EndDialog(hwndDlg, 1);
|
|
return FALSE;
|
|
case IDC_LOADEQLIST:
|
|
if (HIWORD(wParam) == LBN_DBLCLK)
|
|
SendMessageW(hwndDlg, WM_COMMAND, IDOK, 0);
|
|
if (HIWORD(wParam) == LBN_SELCHANGE)
|
|
{
|
|
SendMessageA(GetDlgItem(hwndDlg, IDC_LOADEQLIST), LB_GETTEXT,
|
|
SendMessageW(GetDlgItem(hwndDlg, IDC_LOADEQLIST), LB_GETCURSEL, 0, 0),
|
|
(LPARAM) last_preset);
|
|
readEQfile(EQDIR1, last_preset);
|
|
PostMessageW(hMainWindow, WM_WA_IPC, IPC_CB_MISC_EQ, IPC_CB_MISC);
|
|
}
|
|
return FALSE;
|
|
}
|
|
return FALSE;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
static BOOL CALLBACK loadmp3Proc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
|
{
|
|
static unsigned char eqtbk[10];
|
|
static int eqpa;
|
|
char buf[1024] = {0};
|
|
switch (uMsg)
|
|
{
|
|
case WM_INITDIALOG:
|
|
addEQtolistbox(EQDIR2, GetDlgItem(hwndDlg, IDC_LOADEQLIST));
|
|
SetWindowTextA(hwndDlg, getString(IDS_LOADAUTOLOAD, NULL, 0));
|
|
{
|
|
int x;
|
|
const wchar_t *filespec = PathFindFileNameW(FileName);
|
|
WideCharToMultiByteSZ(CP_ACP, 0, filespec, -1, buf, 1024, 0, 0);
|
|
SetWindowTextA(GetDlgItem(hwndDlg, IDC_SAVEPRESET_EDIT), buf);
|
|
x = SendMessageW(GetDlgItem(hwndDlg, IDC_LOADEQLIST), LB_FINDSTRINGEXACT, (WPARAM)0, (LPARAM)buf);
|
|
if (x != LB_ERR)
|
|
SendMessageW(GetDlgItem(hwndDlg, IDC_LOADEQLIST), LB_SETCURSEL, (WPARAM)x, 0);
|
|
else
|
|
SendMessageW(GetDlgItem(hwndDlg, IDC_LOADEQLIST), LB_SETCURSEL, (WPARAM)-1, 0);
|
|
|
|
// show window and restore last position as applicable
|
|
POINT pt = {load_rect.left, load_rect.top};
|
|
if (!windowOffScreen(hwndDlg, pt))
|
|
SetWindowPos(hwndDlg, HWND_TOP, load_rect.left, load_rect.top, 0, 0, SWP_NOSIZE | SWP_NOSENDCHANGING);
|
|
}
|
|
eqpa = config_preamp;
|
|
memcpy(eqtbk, eq_tab, sizeof(eqtbk));
|
|
return TRUE;
|
|
|
|
case WM_COMMAND:
|
|
switch (LOWORD(wParam))
|
|
{
|
|
case IDOK:
|
|
SendMessageW(GetDlgItem(hwndDlg, IDC_LOADEQLIST), LB_GETTEXT,
|
|
SendMessageW(GetDlgItem(hwndDlg, IDC_LOADEQLIST), LB_GETCURSEL, 0, 0),
|
|
(LPARAM) buf);
|
|
readEQfile(EQDIR2, buf);
|
|
PostMessageW(hMainWindow, WM_WA_IPC, IPC_CB_MISC_EQ, IPC_CB_MISC);
|
|
GetWindowRect(hwndDlg, &load_rect);
|
|
EndDialog(hwndDlg, 0);
|
|
return FALSE;
|
|
case IDCANCEL:
|
|
config_preamp = eqpa;
|
|
memcpy(eq_tab, eqtbk, sizeof(eqtbk));
|
|
SendMessageW(hEQWindow, WM_USER, 0, 0);
|
|
eq_set(config_use_eq, (char*)eq_tab, config_preamp);
|
|
PostMessageW(hMainWindow, WM_WA_IPC, IPC_CB_MISC_EQ, IPC_CB_MISC);
|
|
GetWindowRect(hwndDlg, &load_rect);
|
|
EndDialog(hwndDlg, 1);
|
|
return FALSE;
|
|
case IDC_LOADEQLIST:
|
|
if (HIWORD(wParam) == LBN_DBLCLK)
|
|
SendMessageW(hwndDlg, WM_COMMAND, IDOK, 0);
|
|
if (HIWORD(wParam) == LBN_SELCHANGE)
|
|
{
|
|
SendMessageW(GetDlgItem(hwndDlg, IDC_LOADEQLIST), LB_GETTEXT,
|
|
SendMessageW(GetDlgItem(hwndDlg, IDC_LOADEQLIST), LB_GETCURSEL, 0, 0),
|
|
(LPARAM) buf);
|
|
readEQfile(EQDIR2, buf);
|
|
PostMessageW(hMainWindow, WM_WA_IPC, IPC_CB_MISC_EQ, IPC_CB_MISC);
|
|
EnableWindow(GetDlgItem(hwndDlg, IDOK), 1);
|
|
}
|
|
return FALSE;
|
|
}
|
|
return FALSE;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
static BOOL CALLBACK savepresetProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
|
{
|
|
char buf[1024] = {0};
|
|
switch (uMsg)
|
|
{
|
|
case WM_INITDIALOG:
|
|
addEQtolistbox(EQDIR1, GetDlgItem(hwndDlg, IDC_LOADEQLIST));
|
|
{
|
|
int x;
|
|
StringCchCopyA(buf, 1024, last_preset);
|
|
SetWindowTextA( GetDlgItem( hwndDlg, IDC_SAVEPRESET_EDIT ), buf );
|
|
x = SendMessageW(GetDlgItem(hwndDlg, IDC_LOADEQLIST), LB_FINDSTRINGEXACT, (WPARAM)0, (LPARAM)buf);
|
|
if (x != LB_ERR)
|
|
SendMessageW(GetDlgItem(hwndDlg, IDC_LOADEQLIST), LB_SETCURSEL, (WPARAM)x, 0);
|
|
else
|
|
SendMessageW(GetDlgItem(hwndDlg, IDC_LOADEQLIST), LB_SETCURSEL, (WPARAM)-1, 0);
|
|
|
|
// show window and restore last position as applicable
|
|
POINT pt = {load_rect.left, load_rect.top};
|
|
if (!windowOffScreen(hwndDlg, pt))
|
|
SetWindowPos(hwndDlg, HWND_TOP, load_rect.left, load_rect.top, 0, 0, SWP_NOSIZE | SWP_NOSENDCHANGING);
|
|
}
|
|
|
|
SendMessageW(GetDlgItem(hwndDlg, IDC_SAVEPRESET_EDIT), EM_LIMITTEXT, _MAX_FNAME, 0);
|
|
|
|
return TRUE;
|
|
case WM_COMMAND:
|
|
switch (LOWORD(wParam))
|
|
{
|
|
case IDOK:
|
|
GetWindowTextA(GetDlgItem(hwndDlg, IDC_SAVEPRESET_EDIT), last_preset, sizeof(last_preset) - 1);
|
|
writeEQfile(EQDIR1, last_preset);
|
|
GetWindowRect(hwndDlg, &load_rect);
|
|
EndDialog(hwndDlg, 0);
|
|
return FALSE;
|
|
case IDCANCEL:
|
|
GetWindowRect(hwndDlg, &load_rect);
|
|
EndDialog(hwndDlg, 1);
|
|
return FALSE;
|
|
case IDC_LOADEQLIST:
|
|
if (HIWORD(wParam) == LBN_DBLCLK)
|
|
SendMessageW(hwndDlg, WM_COMMAND, IDOK, 0);
|
|
if (HIWORD(wParam) == LBN_SELCHANGE)
|
|
{
|
|
SendMessageW(GetDlgItem(hwndDlg, IDC_LOADEQLIST), LB_GETTEXT,
|
|
SendMessageW(GetDlgItem(hwndDlg, IDC_LOADEQLIST), LB_GETCURSEL, 0, 0),
|
|
(LPARAM) buf);
|
|
SetWindowTextA(GetDlgItem(hwndDlg, IDC_SAVEPRESET_EDIT), buf);
|
|
}
|
|
return FALSE;
|
|
case IDC_SAVEPRESET_EDIT:
|
|
if (HIWORD(wParam) == EN_CHANGE)
|
|
{
|
|
int x;
|
|
GetWindowTextA(GetDlgItem(hwndDlg, IDC_SAVEPRESET_EDIT), buf, sizeof(buf) - 1);
|
|
if (lstrlenA(buf)) EnableWindow(GetDlgItem(hwndDlg, IDOK), 1);
|
|
else EnableWindow(GetDlgItem(hwndDlg, IDOK), 0);
|
|
|
|
x = SendMessageW(GetDlgItem(hwndDlg, IDC_LOADEQLIST), LB_FINDSTRINGEXACT, (WPARAM)0, (LPARAM)buf);
|
|
if (x != LB_ERR)
|
|
SendMessageW(GetDlgItem(hwndDlg, IDC_LOADEQLIST), LB_SETCURSEL, (WPARAM)x, 0);
|
|
else
|
|
SendMessageW(GetDlgItem(hwndDlg, IDC_LOADEQLIST), LB_SETCURSEL, (WPARAM)-1, 0);
|
|
}
|
|
}
|
|
return FALSE;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
static BOOL CALLBACK savemp3Proc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
|
{
|
|
char buf[1024] = {0};
|
|
switch (uMsg)
|
|
{
|
|
case WM_INITDIALOG:
|
|
addEQtolistbox(EQDIR2, GetDlgItem(hwndDlg, IDC_LOADEQLIST));
|
|
{
|
|
int x;
|
|
const wchar_t *filespec = PathFindFileNameW(FileName);
|
|
WideCharToMultiByteSZ(CP_ACP, 0, filespec, -1, buf, 1024, 0, 0);
|
|
SetWindowTextA(GetDlgItem(hwndDlg, IDC_SAVEPRESET_EDIT), buf);
|
|
x = SendMessageW(GetDlgItem(hwndDlg, IDC_LOADEQLIST), LB_FINDSTRINGEXACT, (WPARAM)0, (LPARAM)buf);
|
|
if (x != LB_ERR)
|
|
SendMessageW(GetDlgItem(hwndDlg, IDC_LOADEQLIST), LB_SETCURSEL, (WPARAM)x, 0);
|
|
else
|
|
SendMessageW(GetDlgItem(hwndDlg, IDC_LOADEQLIST), LB_SETCURSEL, (WPARAM)-1, 0);
|
|
SetWindowTextA(hwndDlg, getString(IDS_SAVEAUTOLOAD, NULL, 0));
|
|
|
|
// show window and restore last position as applicable
|
|
POINT pt = {load_rect.left, load_rect.top};
|
|
if (!windowOffScreen(hwndDlg, pt))
|
|
SetWindowPos(hwndDlg, HWND_TOP, load_rect.left, load_rect.top, 0, 0, SWP_NOSIZE | SWP_NOSENDCHANGING);
|
|
}
|
|
SendMessageW(GetDlgItem(hwndDlg, IDC_SAVEPRESET_EDIT), EM_LIMITTEXT, _MAX_FNAME, 0);
|
|
|
|
return TRUE;
|
|
case WM_COMMAND:
|
|
switch (LOWORD(wParam))
|
|
{
|
|
case IDOK:
|
|
GetWindowTextA(GetDlgItem(hwndDlg, IDC_SAVEPRESET_EDIT), buf, sizeof(buf) - 1);
|
|
writeEQfile(EQDIR2, buf);
|
|
GetWindowRect(hwndDlg, &load_rect);
|
|
EndDialog(hwndDlg, 0);
|
|
return FALSE;
|
|
case IDCANCEL:
|
|
GetWindowRect(hwndDlg, &load_rect);
|
|
EndDialog(hwndDlg, 1);
|
|
return FALSE;
|
|
case IDC_LOADEQLIST:
|
|
if (HIWORD(wParam) == LBN_DBLCLK)
|
|
SendMessageW(hwndDlg, WM_COMMAND, IDOK, 0);
|
|
if (HIWORD(wParam) == LBN_SELCHANGE)
|
|
{
|
|
SendMessageW(GetDlgItem(hwndDlg, IDC_LOADEQLIST), LB_GETTEXT,
|
|
SendMessageW(GetDlgItem(hwndDlg, IDC_LOADEQLIST), LB_GETCURSEL, 0, 0),
|
|
(LPARAM) buf);
|
|
SetWindowTextA(GetDlgItem(hwndDlg, IDC_SAVEPRESET_EDIT), buf);
|
|
}
|
|
return FALSE;
|
|
case IDC_SAVEPRESET_EDIT:
|
|
if (HIWORD(wParam) == EN_CHANGE)
|
|
{
|
|
int x;
|
|
GetWindowTextA(GetDlgItem(hwndDlg, IDC_SAVEPRESET_EDIT), buf, sizeof(buf) - 1);
|
|
x = SendMessageW(GetDlgItem(hwndDlg, IDC_LOADEQLIST), LB_FINDSTRINGEXACT, (WPARAM)0, (LPARAM)buf);
|
|
if (x != LB_ERR)
|
|
SendMessageW(GetDlgItem(hwndDlg, IDC_LOADEQLIST), LB_SETCURSEL, (WPARAM)x, 0);
|
|
else
|
|
SendMessageW(GetDlgItem(hwndDlg, IDC_LOADEQLIST), LB_SETCURSEL, (WPARAM)-1, 0);
|
|
}
|
|
}
|
|
return FALSE;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
static BOOL CALLBACK delpresetProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
|
{
|
|
switch (uMsg)
|
|
{
|
|
case WM_INITDIALOG:
|
|
{
|
|
addEQtolistbox(EQDIR1, GetDlgItem(hwndDlg, IDC_LOADEQLIST));
|
|
if (SendMessageW(GetDlgItem(hwndDlg, IDC_LOADEQLIST), LB_GETCOUNT, 0, 0) == 0)
|
|
EnableWindow(GetDlgItem(hwndDlg, IDOK), 0);
|
|
SetWindowTextA(hwndDlg, getString(IDS_DELETEPRE1, NULL, 0));
|
|
SetWindowTextA(GetDlgItem(hwndDlg, IDOK), getString(IDS_DELETEAUTOLOAD2, NULL, 0));
|
|
int x = SendMessageW(GetDlgItem(hwndDlg, IDC_LOADEQLIST), LB_FINDSTRINGEXACT, (WPARAM)0, (LPARAM)last_preset);
|
|
if (x != LB_ERR)
|
|
SendMessageW(GetDlgItem(hwndDlg, IDC_LOADEQLIST), LB_SETCURSEL, (WPARAM)x, 0);
|
|
else
|
|
SendMessageW(GetDlgItem(hwndDlg, IDC_LOADEQLIST), LB_SETCURSEL, (WPARAM)-1, 0);
|
|
|
|
// show window and restore last position as applicable
|
|
POINT pt = {load_rect.left, load_rect.top};
|
|
if (!windowOffScreen(hwndDlg, pt))
|
|
SetWindowPos(hwndDlg, HWND_TOP, load_rect.left, load_rect.top, 0, 0, SWP_NOSIZE | SWP_NOSENDCHANGING);
|
|
}
|
|
return TRUE;
|
|
|
|
case WM_COMMAND:
|
|
switch (LOWORD(wParam))
|
|
{
|
|
case IDOK:
|
|
SendMessageW(GetDlgItem(hwndDlg, IDC_LOADEQLIST), LB_GETTEXT,
|
|
SendMessageW(GetDlgItem(hwndDlg, IDC_LOADEQLIST), LB_GETCURSEL, 0, 0),
|
|
(LPARAM) last_preset);
|
|
deleteEQfile(EQDIR1, last_preset);
|
|
GetWindowRect(hwndDlg, &load_rect);
|
|
EndDialog(hwndDlg, 0);
|
|
return FALSE;
|
|
case IDCANCEL:
|
|
GetWindowRect(hwndDlg, &load_rect);
|
|
EndDialog(hwndDlg, 1);
|
|
return FALSE;
|
|
case IDC_LOADEQLIST:
|
|
if (HIWORD(wParam) == LBN_DBLCLK)
|
|
SendMessageW(hwndDlg, WM_COMMAND, IDOK, 0);
|
|
return FALSE;
|
|
}
|
|
return FALSE;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
static BOOL CALLBACK delmp3Proc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
|
{
|
|
char buf[1024] = {0};
|
|
switch (uMsg)
|
|
{
|
|
case WM_INITDIALOG:
|
|
{
|
|
addEQtolistbox(EQDIR2, GetDlgItem(hwndDlg, IDC_LOADEQLIST));
|
|
if (SendMessageW(GetDlgItem(hwndDlg, IDC_LOADEQLIST), LB_GETCOUNT, 0, 0) == 0)
|
|
EnableWindow(GetDlgItem(hwndDlg, IDOK), 0);
|
|
SetWindowTextA(hwndDlg, getString(IDS_DELETEAUTOLOAD1, NULL, 0));
|
|
SetWindowTextA(GetDlgItem(hwndDlg, IDOK), getString(IDS_DELETEAUTOLOAD2, NULL, 0));
|
|
const wchar_t *filespec = PathFindFileNameW(FileName);
|
|
WideCharToMultiByteSZ(CP_ACP, 0, filespec, -1, buf, 1024, 0, 0);
|
|
int x = SendMessageW(GetDlgItem(hwndDlg, IDC_LOADEQLIST), LB_FINDSTRINGEXACT, (WPARAM)0, (LPARAM)buf);
|
|
if (x != LB_ERR)
|
|
SendMessageW(GetDlgItem(hwndDlg, IDC_LOADEQLIST), LB_SETCURSEL, (WPARAM)x, 0);
|
|
else
|
|
SendMessageW(GetDlgItem(hwndDlg, IDC_LOADEQLIST), LB_SETCURSEL, (WPARAM)-1, 0);
|
|
|
|
// show window and restore last position as applicable
|
|
POINT pt = {load_rect.left, load_rect.top};
|
|
if (!windowOffScreen(hwndDlg, pt))
|
|
SetWindowPos(hwndDlg, HWND_TOP, load_rect.left, load_rect.top, 0, 0, SWP_NOSIZE | SWP_NOSENDCHANGING);
|
|
|
|
return TRUE;
|
|
}
|
|
case WM_COMMAND:
|
|
switch (LOWORD(wParam))
|
|
{
|
|
case IDOK:
|
|
SendMessageW(GetDlgItem(hwndDlg, IDC_LOADEQLIST), LB_GETTEXT,
|
|
SendMessageW(GetDlgItem(hwndDlg, IDC_LOADEQLIST), LB_GETCURSEL, 0, 0),
|
|
(LPARAM) buf);
|
|
deleteEQfile(EQDIR2, buf);
|
|
GetWindowRect(hwndDlg, &load_rect);
|
|
EndDialog(hwndDlg, 0);
|
|
return FALSE;
|
|
case IDCANCEL:
|
|
GetWindowRect(hwndDlg, &load_rect);
|
|
EndDialog(hwndDlg, 1);
|
|
return FALSE;
|
|
case IDC_LOADEQLIST:
|
|
if (HIWORD(wParam) == LBN_DBLCLK)
|
|
SendMessageW(hwndDlg, WM_COMMAND, IDOK, 0);
|
|
return FALSE;
|
|
}
|
|
return FALSE;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
static int EQ_OnRButtonUp(HWND hwnd, int x, int y, UINT flags)
|
|
{
|
|
POINT p;
|
|
extern HMENU top_menu;
|
|
GetCursorPos(&p);
|
|
if ((config_dsize && config_eqdsize))
|
|
{
|
|
x /= 2;
|
|
y /= 2;
|
|
}
|
|
|
|
if ((flags & MK_LBUTTON)) return 1;
|
|
|
|
if (x >= 14 && y >= 18 && x <= 14 + 25 && y <= 18 + 12)
|
|
{
|
|
HMENU hmenu = GetSubMenu(GetSubMenu(top_menu, 4), 0);
|
|
CheckMenuItem(hmenu, EQ_ENABLE, config_use_eq ? MF_CHECKED : MF_UNCHECKED);
|
|
DoTrackPopup(hmenu, TPM_LEFTALIGN | TPM_RIGHTBUTTON, p.x, p.y, hwnd);
|
|
}
|
|
else if (x >= 14 + 25 && y >= 18 && x <= 14 + 25 + 33 && y <= 18 + 12)
|
|
{
|
|
HMENU hmenu = GetSubMenu(GetSubMenu(top_menu, 4), 1);
|
|
CheckMenuItem(hmenu, EQ_AUTO, config_autoload_eq ? MF_CHECKED : MF_UNCHECKED);
|
|
DoTrackPopup(hmenu, TPM_LEFTALIGN | TPM_RIGHTBUTTON, p.x, p.y, hwnd);
|
|
}
|
|
else
|
|
{
|
|
DoTrackPopup(main_menu, TPM_LEFTALIGN | TPM_RIGHTBUTTON, p.x, p.y, hMainWindow);
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
static int EQ_OnLButtonUp(HWND hwnd, int x, int y, UINT flags)
|
|
{
|
|
ReleaseCapture();
|
|
if ((config_dsize && config_eqdsize))
|
|
{
|
|
equi_handlemouseevent(x / 2, y / 2, -1, flags);
|
|
}
|
|
else
|
|
{
|
|
equi_handlemouseevent(x, y, -1, flags);
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
// Mousedown handler. Just passes to routines in ui.c, scaling if in doublesize mode
|
|
static int EQ_OnLButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT keyFlags)
|
|
{
|
|
if ((config_dsize && config_eqdsize))
|
|
{
|
|
x /= 2;
|
|
y /= 2;
|
|
}
|
|
|
|
SetCapture(hwnd);
|
|
equi_handlemouseevent(x, y, 1, keyFlags);
|
|
return 1;
|
|
}
|
|
|
|
// Mousemove handler. Just passes to routines in ui.c, scaling if in doublesize mode
|
|
static int EQ_OnMouseMove(HWND hwnd, int x, int y, UINT keyFlags)
|
|
{
|
|
if ((config_dsize && config_eqdsize))
|
|
{
|
|
x /= 2;
|
|
y /= 2;
|
|
}
|
|
|
|
equi_handlemouseevent(x, y, 0, keyFlags);
|
|
return 1;
|
|
}
|
|
|
|
static BOOL EQ_OnNCActivate(HWND hwnd, BOOL fActive, HWND hwndActDeact, BOOL fMinimized)
|
|
{
|
|
if (fActive == FALSE)
|
|
{
|
|
draw_eq_tbar(config_hilite ? 0 : 1);
|
|
}
|
|
else
|
|
{
|
|
draw_eq_tbar(1);
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
int writeEQfile_init(wchar_t *file, char *name, unsigned char *tab)
|
|
{
|
|
unsigned char preamp = 31;
|
|
char s[2048] = {0};
|
|
DWORD a = 0;
|
|
HANDLE hFile = CreateFileW(file, GENERIC_WRITE | GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
|
|
if (hFile == INVALID_HANDLE_VALUE) return 1;
|
|
ReadFile(hFile, s, lstrlenA(sig), &a, NULL);
|
|
if (memcmp(s, sig, lstrlenA(sig)))
|
|
{
|
|
SetFilePointer(hFile, 0, NULL, FILE_BEGIN);
|
|
a = 0; WriteFile(hFile, sig, lstrlenA(sig), &a, NULL);
|
|
SetEndOfFile(hFile);
|
|
}
|
|
while (1)
|
|
{
|
|
a = 0;
|
|
ReadFile(hFile, s, _MAX_FNAME + 1 + 10 + 1, &a, NULL);
|
|
if (a != _MAX_FNAME + 1 + 10 + 1)
|
|
{
|
|
SetFilePointer(hFile, 0, NULL, FILE_END);
|
|
break;
|
|
}
|
|
if (!_stricmp(name, s))
|
|
{
|
|
CloseHandle(hFile);
|
|
return 0; // don't write it
|
|
}
|
|
}
|
|
StringCchCopyExA(s, _MAX_FNAME+1, name, 0, 0, STRSAFE_FILL_BEHIND_NULL);
|
|
memcpy(s + _MAX_FNAME + 1, tab, 10);
|
|
memcpy(s + _MAX_FNAME + 1 + 10, &preamp, 1);
|
|
a = 0; WriteFile(hFile, s, _MAX_FNAME + 1 + 10 + 1, &a, NULL);
|
|
CloseHandle(hFile);
|
|
return 0;
|
|
}
|
|
|
|
static int writeEQfile(wchar_t *file, char *name)
|
|
{
|
|
char s[2048] = {0};
|
|
DWORD a = 0;
|
|
HANDLE hFile = CreateFileW(file, GENERIC_WRITE | GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
|
|
if (hFile == INVALID_HANDLE_VALUE) return 1;
|
|
ReadFile(hFile, s, lstrlenA(sig), &a, NULL);
|
|
if (memcmp(s, sig, lstrlenA(sig)))
|
|
{
|
|
SetFilePointer(hFile, 0, NULL, FILE_BEGIN);
|
|
a = 0; WriteFile(hFile, sig, lstrlenA(sig), &a, NULL);
|
|
SetEndOfFile(hFile);
|
|
}
|
|
while (1)
|
|
{
|
|
a = 0;
|
|
ReadFile(hFile, s, _MAX_FNAME + 1 + sizeof(eq_tab) + sizeof(config_preamp), &a, NULL);
|
|
if (a != _MAX_FNAME + 1 + sizeof(eq_tab) + sizeof(config_preamp))
|
|
{
|
|
SetFilePointer(hFile, 0, NULL, FILE_END);
|
|
break;
|
|
}
|
|
if (!_stricmp(name, s))
|
|
{
|
|
SetFilePointer(hFile, -(signed)a, NULL, FILE_CURRENT);
|
|
break;
|
|
}
|
|
}
|
|
StringCchCopyExA(s, _MAX_FNAME+1, name, 0, 0, STRSAFE_FILL_BEHIND_NULL);
|
|
memcpy(s + _MAX_FNAME + 1, eq_tab, sizeof(eq_tab));
|
|
memcpy(s + _MAX_FNAME + 1 + sizeof(eq_tab), &config_preamp, sizeof(config_preamp));
|
|
a = 0; WriteFile(hFile, s, _MAX_FNAME + 1 + sizeof(eq_tab) + sizeof(config_preamp), &a, NULL);
|
|
CloseHandle(hFile);
|
|
return 0;
|
|
}
|
|
|
|
static int readEQfile(wchar_t *file, char *name)
|
|
{
|
|
char s[2048] = {0};
|
|
DWORD a = 0;
|
|
HANDLE hFile = CreateFileW(file, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
|
|
if (hFile == INVALID_HANDLE_VALUE) return 1;
|
|
ReadFile(hFile, s, lstrlenA(sig), &a, NULL);
|
|
if (memcmp(s, sig, lstrlenA(sig)))
|
|
{
|
|
CloseHandle(hFile);
|
|
return 1;
|
|
}
|
|
while (1)
|
|
{
|
|
a = 0;
|
|
ReadFile(hFile, s, _MAX_FNAME + 1 + sizeof(eq_tab) + sizeof(config_preamp), &a, NULL);
|
|
if (a != _MAX_FNAME + 1 + sizeof(eq_tab) + sizeof(config_preamp))
|
|
{
|
|
CloseHandle(hFile);
|
|
return 1;
|
|
}
|
|
if (!_stricmp(name, s))
|
|
break;
|
|
}
|
|
CloseHandle(hFile);
|
|
memcpy(eq_tab, s + _MAX_FNAME + 1, sizeof(eq_tab));
|
|
memcpy(&config_preamp, s + _MAX_FNAME + 1 + sizeof(eq_tab), sizeof(config_preamp));
|
|
eq_set(config_use_eq, (char*)eq_tab, config_preamp);
|
|
if (hEQWindow) SendMessageW(hEQWindow, WM_USER, 0, 0);
|
|
return 0;
|
|
}
|
|
|
|
static void deleteEQfile(wchar_t *file, char *name)
|
|
{
|
|
wchar_t tmpfile[2048] = {0};
|
|
char s[2048] = {0};
|
|
DWORD a = 0;
|
|
HANDLE hFile = CreateFileW(file, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
|
|
if (hFile == INVALID_HANDLE_VALUE) return ;
|
|
StringCchPrintfW(tmpfile, 2048, L"%s.TMP", file);
|
|
HANDLE hFileOut = CreateFileW(tmpfile, GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
|
|
if (hFileOut == INVALID_HANDLE_VALUE)
|
|
{
|
|
CloseHandle(hFile);
|
|
return ;
|
|
}
|
|
ReadFile(hFile, s, lstrlenA(sig), &a, NULL);
|
|
a = 0; WriteFile(hFileOut, s, lstrlenA(sig), &a, NULL);
|
|
while (1)
|
|
{
|
|
a = 0;
|
|
ReadFile(hFile, s, _MAX_FNAME + 1 + sizeof(eq_tab) + sizeof(config_preamp), &a, NULL);
|
|
if (a != _MAX_FNAME + 1 + sizeof(eq_tab) + sizeof(config_preamp))
|
|
{
|
|
break;
|
|
}
|
|
if (_stricmp(name, s))
|
|
WriteFile(hFileOut, s, a, &a, NULL);
|
|
}
|
|
CloseHandle(hFile);
|
|
CloseHandle(hFileOut);
|
|
DeleteFileW(file);
|
|
StringCchPrintfW(tmpfile, 2048, L"%s.TMP", file);
|
|
MoveFileW(tmpfile, file);
|
|
return ;
|
|
}
|
|
|
|
static void addEQtolistbox(wchar_t *file, HWND listbox)
|
|
{
|
|
char s[2048] = {0};
|
|
DWORD l = 0;
|
|
HANDLE hFile = CreateFileW(file, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
|
|
if (hFile == INVALID_HANDLE_VALUE) return ;
|
|
ReadFile(hFile, s, lstrlenA(sig), &l, NULL);
|
|
if (memcmp(s, sig, lstrlenA(sig)))
|
|
{
|
|
CloseHandle(hFile);
|
|
return ;
|
|
}
|
|
while (1)
|
|
{
|
|
DWORD a = 0;
|
|
ReadFile(hFile, s, _MAX_FNAME + 1 + sizeof(eq_tab) + sizeof(config_preamp), &a, NULL);
|
|
if (a != _MAX_FNAME + 1 + sizeof(eq_tab) + sizeof(config_preamp))
|
|
break;
|
|
SendMessageA(listbox, LB_ADDSTRING, 0, (LPARAM)s); // Must stay in ANSI mode
|
|
}
|
|
CloseHandle(hFile);
|
|
} |