winamp/Src/Winamp/Main.h

1179 lines
38 KiB
C

#ifndef _MAIN_H_
#define _MAIN_H_
#ifdef __cplusplus
//#pragma warning(error:4311)
extern "C"
{
#endif
#include <windows.h>
//#include <windowsx.h>
#include "wasabicfg.h"
#include "wa_ipc.h"
#include "config.h"
#include "dpi.h"
#ifndef __cplusplus
#include "Plush/plush.h"
#endif
#define APSTUDIO_INVOKED
#include "resource.h"
#include <mbstring.h>
#include <shlwapi.h>
#include <stdio.h>
#include <strsafe.h>
#include <shlobj.h>
#include <commctrl.h>
#include <shobjidl.h>
#include <shellapi.h>
#include "in2.h"
#include "strutil.h"
#include "../nu/trace.h"
#ifndef NO_INPLACE_RESOLVE
#if defined(_WIN64)
#include "../Elevator/IFileTypeRegistrar_64.h"
#else
#include "../Elevator/IFileTypeRegistrar_32.h"
#endif
#endif
/* configuration */
//#undef MAX_PATH
//#define MAX_PATH 512
#define OFFSCREEN_Y_POS -30000
#define MAX_URL 4096
extern HINSTANCE language_pack_instance;
#define UPDATE_DISPLAY_TIMER 38
#define STATS_TIMER 64
#define SPLASH_DELAY 2000
#define APP_NAME "Winamp"
#ifdef __alpha
#define APP_VERSION_PLATFORM "(AXP)"
#elif defined(_WIN64)
#define APP_VERSION_PLATFORM "(x64)"
#elif defined(_WIN32_WINCE)
#define APP_VERSION_PLATFORM "(CE)"
#else
#define APP_VERSION_PLATFORM "(x86)"
#endif
extern const char app_name[], app_version[], app_version_string[];
#define BIGINT 1000000000
#define MAINMENU_OPTIONS_BASE (11+g_mm_optionsbase_adj)
#define WINDOWMENU_FFWINDOWS_BASE (3+g_mm_ffwindowsbase_adj)
#define HIDDEN_TRAP -33
#define WINDOW_WIDTH 275
#define WINDOW_HEIGHT 116
#define FALLBACK_FONT L"Arial"
//#define DEFAULT_FONT "Arial Unicode MS"
#define DEFAULT_FONT L"Arial"
//extern prefsDlgRec *g_piprefsdlgs;
#define CAPTION_SIZE (MAX_PATH+128)
#define AUDITSIZE 10
//#define CLASSIC_SKIN_NAME L"Winamp Classic"
#define MODERN_SKIN_NAME L"Winamp Modern"
#define BENTO_SKIN_NAME L"Bento"
#define BIG_BENTO_SKIN_NAME L"Big Bento"
/***********************
*** about.c
*/
void about_dialog(void);
extern int about_lastpage;
extern HWND about_hwnd;
/***********************
*** about2.c
*/
void About2_Start(HWND hwndParent);
void About2_Kill();
/***********************
*** bookmark.c
*/
void Bookmark_additem(wchar_t *fn, wchar_t *ft);
void Bookmark_AddCommandline(wchar_t *commandLine);
/***********************
*** burn.cpp
*/
int burn_start(burnCDStruct *param);
unsigned int burn_doBurn(char *cmdline, HWND winampWnd, HINSTANCE winampInstance);
/***********************
*** config.c
*/
// configuration variables/with defaults
#ifndef NO_INPLACE_RESOLVE
int GetRegistrar(IFileTypeRegistrar **registrar, BOOL use_fallback);
#endif
void init_config();
void setup_config(void);
void config_write(int);
void config_read(int);
BOOL config_setup_filetypes(int mode);
void config_adddesktop(void);
int config_isregistered(wchar_t *);
BOOL config_registermediaplayer(DWORD accessEnabled);
BOOL config_register_capability(wchar_t *ext, int mode);
void config_register(wchar_t *ext, int reg);
void config_setinifile(wchar_t *inifile);
void config_setinidir(const wchar_t *inidir);
void config_setm3udir(const wchar_t *m3udir);
void config_setm3ubase(const wchar_t *m3ubase);
void config_load_langpack_var(void);
void config_save_langpack_var(void);
int config_isdircontext(void);
BOOL config_setup_filetype(const wchar_t *winamp_file, const wchar_t *name, BOOL use_fallback);
BOOL config_adddircontext(BOOL use_fallback);
int config_iscdplayer(void);
BOOL config_removedircontext(BOOL use_fallback);
BOOL config_regcdplayer(int reg, int mode);
void config_remove_winamp_keys(void);
void config_agent_add(void);
void config_agent_remove(void);
void regmimetype(const wchar_t *mtype, const wchar_t *programname, const wchar_t *ext, int nsonly);
void RemoveRegistrar();
/***********************
*** convert.cpp
*/
int convert_file(convertFileStruct *cfs);
void convert_end(convertFileStruct *cfs);
int convert_fileW(convertFileStructW *cfs);
void convert_endW(convertFileStructW *cfs);
HWND convert_config(convertConfigStruct *ccs);
void convert_config_end(convertConfigStruct *ccs);
void convert_enumfmts(converterEnumFmtStruct *cefs);
void convert_setPriority(convertSetPriority *csp);
void convert_setPriorityW(convertSetPriorityW *csp);
int convert_setConfigItem(convertConfigItem *cci);
int convert_getConfigItem(convertConfigItem *cci);
int convert_file_test(convertFileStructW *cfs);
/***********************
*** dde.c
*/
int dde_addstart(HWND hwnd);
void dde_delstart(void);
int dde_isquicklaunchavailable(void);
void dde_addquicklaunch(HWND hwnd);
void dde_adddesktop(HWND hwnd);
void dde_remdesktop(void);
void dde_remquicklaunch(void);
/***********************
*** dock.c
*/
void FixMainWindowRect(RECT *r);
void EstMainWindowRect(RECT *r);
void EstEQWindowRect(RECT *r);
void EstPLWindowRect(RECT *r);
void EstVidWindowRect(RECT *r);
void SetVidWindowRect(RECT *r);
void SetMainWindowRect(RECT *r);
void SetEQWindowRect(RECT *r);
void SetPLWindowRect(RECT *r);
void MoveRect(RECT *r, int x, int y);
int IsWindowAttached(RECT rc, RECT rc2);
void SnapWindowToWindow(RECT *rcSrc, RECT rcDest);
void AdjustSnap(RECT old1, RECT old2, RECT *new1, RECT *new2);
int IsPointInRect(int x, int y, RECT *r);
void FixOverlaps(RECT *r1, RECT *r2);
/***********************
*** draw.c
*/
extern int (WINAPI *jtf_drawtext)(HDC, LPCWSTR, int, LPRECT, UINT);
void draw_set_plbm(HBITMAP);
extern int pe_fontheight;
extern HPALETTE draw_hpal;
void draw_firstinit(void);
void draw_finalquit(void);
void draw_init(void);
void draw_paint(HWND hwnd);
void draw_printclient(HDC hdc, LPARAM drawingOptions);
void draw_kill(void);
void draw_clear(void);
void draw_monostereo(int value); // 0 is neither, 1 is mono, 2 is stereo
void draw_shuffle(int on, int pressed);
void draw_repeat(int on, int pressed);
void draw_eqplbut(int eqon, int eqpressed, int plon, int plpressed);
void draw_volumebar(int volume, int pressed); // volume is 0-51
void draw_panbar(int volume, int pressed);
void draw_songname(const wchar_t *name, int *position, int songlen);
void draw_positionbar(int position, int pressed); // position is 0-256
void draw_bitmixrate(int bitrate, int mixrate);
void draw_buttonbar(int buttonpressed); // starts at 0 with leftmost, -1 = no button
void draw_playicon(int whichicon); // 0 = none, 1 = play, 2 = stop, 4 = pause
void draw_time(int minutes, int seconds, int clear);
void draw_sa(unsigned char *values, int draw); // array of 12 bands, starting with leftmost, of 0..7
void draw_tbuttons(int b1, int b2, int b3, int b4);
void draw_setnoupdate(int);
void draw_tbar(int active, int windowshade, int egg);
void draw_eject(int pressed);
void draw_clutterbar(int enable);
void update_volume_text(int songlen);
void update_panning_text(int songlen);
/*****************
*** draw_eq.c
*/
extern int eq_init;
void draw_eq_init();
void draw_eq_kill();
void draw_paint_eq(HWND hwnd);
void draw_printclient_eq(HDC hdc, LPARAM /*drawingOptions*/);
void draw_eq_tbutton(int b3, int wsb);
void draw_eq_slid(int which, int pos, int pressed); // left to right, 0-64
void draw_eq_tbar(int active);
void draw_eq_onauto(int on, int autoon, int onpressed, int autopressed);
void draw_eq_presets(int pressed);
void draw_eq_graphthingy(void);
/*****************
*** draw_pe.c
*** for functions that accept HDC as the first parameter,
*** hdc can be NULL, and it will use the Window DC
*/
extern int pe_init;
void draw_pe_init();
void draw_pe_kill();
void draw_pe_tbutton(int b2, int b3, int b2_ws);
void draw_paint_pe(HWND hwnd);
void draw_printclient_pe(HWND hwnd, HDC hdc, LPARAM drawingOptions);
void draw_reinit_plfont(int notifyOthers);
void draw_pe_tbar(HWND hwnd, HDC hdc, int state);
void draw_pe_vslide(HWND hwnd, HDC hdc, int pushed, int pos); // pos 0..100
void draw_pe_timedisp(HDC hdc, int minutes, int seconds, int tlm, int clear);
void draw_pe_addbut(int which); // -1 = none, 0 = file, 1 = dir, 2 = loc
void draw_pe_rembut(int which); // -1 = none, 0 = sel, 1 = crop, 2 = all
void draw_pe_selbut(int which); // -1 = none, 0 = all, 1 = none, 2=inv
void draw_pe_miscbut(int which); // -1 = none, 0 = inf, 1 = sort, 2=misc
void draw_pe_iobut(int which); // -1 = none, 0 = load, 1=save, 2=clear
/*****************
*** draw_vw.c
*/
extern int vw_init;
void draw_vw_init();
void draw_vw_kill();
void draw_vw_tbar(int state);
void draw_vw(HDC hdcout);
void draw_paint_vw(HWND hwnd);
void draw_vw_tbutton(int b3);
void draw_vw_mbuts(int whichb);
void draw_vw_info(wchar_t *t, int erase);
/*****************
*** dsp.c
*/
void dsp_init(void);
void dsp_quit(void);
int dsp_dosamples(short int *samples, int numsamples, int bps, int nch, int srate);
int dsp_isactive(void);
/*****************
*** eq.c
*/
extern unsigned char eq_tab[10];
void eq_dialog(HWND, int);
void eq_autoload(const char *mp3fn);
LRESULT CALLBACK EQ_WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
/*****************
*** embedwnd.cpp
*/
#ifdef __cplusplus
typedef struct _EMBEDWND
{
HWND hLastFocus;
} EMBEDWND;
#include "../nu/CGlobalAtom.h"
static CGlobalAtom EMBEDWND_PROPW(L"EMBDEWND");
#define GetEmbedWnd(__hwnd) ((EMBEDWND*)GetPropW(__hwnd, EMBEDWND_PROPW))
#endif
extern LRESULT CALLBACK emb_WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
extern HWND embedWindow(embedWindowState *state);
extern void SnapWindowToAllWindows(RECT *outrc, HWND hwndNoSnap);
extern BOOL SnapToScreen(RECT *outrc);
extern CRITICAL_SECTION embedcs;
extern embedWindowState *embedwndlist; // linked list
extern int embedwndlist_cnt;
#define EMBED_STATE_EXTRA_LINK 0
#define EMBED_STATE_EXTRA_ATTACHED 1
#define EMBED_STATE_EXTRA_GUID 4 // note this reserved 5-7 also
#define EMBED_STATE_EXTRA_REPARENTING 62
#define EMBED_STATE_EXTRA_FFROOTWND 63
/*****************
*** equi.c
*/
extern int minimize_hack_winamp;
extern int do_volbar_active, do_panbar_active;
void eq_ui_handlecursor(void);
void equi_handlemouseevent(int x, int y, int type, int stats);
void ui_handlecursor(void);
BOOL DoTrackPopup(HMENU hMenu, UINT fuFlags, int x, int y, HWND hwnd);
/*****************
*** gen.cpp
*/
void load_genplugins();
void unload_genplugins();
/*****************
*** html.c
*/
void doHtmlPlaylist(void);
/*****************
*** http.c
*/
int httpRetrieveFile(HWND hwnd, const char *url, char *file, char *dlgtitle);
int httpRetrieveFileW(HWND hwnd, const char *url, const wchar_t *file, const wchar_t *dlgtitle);
/*****************
*** in.c
*/
extern In_Module *in_mod;
int in_init();
void in_deinit();
In_Module *in_setmod(wchar_t *filename);
In_Module *in_setmod_noplay(const wchar_t *filename, int *start_offs); // starts at *start_offs, sets *start_offs with the value of the module used
char *in_getfltstr(void);
wchar_t *in_getfltstrW(BOOL skip);
char *in_getextlist(void);
wchar_t *in_getextlistW();
int in_getouttime(void);
int in_getlength(void);
void in_pause(int p);
int in_seek(int time_in_ms);
int in_open(const wchar_t *fn);
void in_setvol(int v);
void in_setpan(int p);
void in_close(void);
int in_infobox(HWND hwnd, const wchar_t *fn);
int in_get_extended_fileinfoW(const wchar_t *fn, const wchar_t *metadata, wchar_t *dest, size_t destlen);
int in_get_extended_fileinfo(const char *fn, const char *metadata, char *dest, size_t destlen);
int in_set_extended_fileinfo(const char *fn, const char *metadata, char *dest);
int in_set_extended_fileinfoW(const wchar_t *fn, const wchar_t *metadata, wchar_t *data);
int in_write_extended_fileinfo();
void eq_set(int on, char data[10], int preamp);
void in_flush(int ms);
/**************
*** jump.c
*/
void SetJumpComparator(void *functionPtr);
void SetJumpComparatorW(void *functionPtr);
int jump_dialog(HWND hwnd);
int jump_file_dialog(HWND hwnd);
/***************
*** m3u.c
*/
int savem3ufn(const wchar_t *filename, int rel, int useBase);
/* main.c */
#include "buildType.h"
#ifndef WM_MOUSEWHEEL
#define WM_MOUSEWHEEL 0x20A
#endif
extern UINT songChangeBroadcastMessage;
extern HMENU main_menu, top_menu, systray_menu, g_submenus_bookmarks1,
g_submenus_bookmarks2, g_submenus_skins1, g_submenus_skins2,
g_submenus_vis, g_submenus_options, g_submenus_lang,
g_submenus_play, v5_top_menu;
extern int unique_loword_command;
extern int g_submenus_lang_id;
extern char g_audiocdletter[];
extern int g_audiocdletters;
extern int g_dropaot_timer_set;
extern int is_install;
extern int g_fsapp;
extern int g_restoreaot_timer_set;
extern int bNoHwndOther;
extern int g_safeMode;
void tealike_crappy_code(unsigned long v[2], unsigned long k[4]);
void UpdateAudioCDMenus(HMENU hmenu);
void MoveOffscreen(HWND hwnd);
void ResolveEnvironmentVariables(wchar_t *string, size_t stringSize);
extern int g_main_created;
extern int g_noreg;
extern wchar_t szAppName[64]; // window class name, generated on the fly.
extern int g_fullstop;
extern int vis_fullscreen;
extern int stat_isit; // used for faster version checking
extern int g_mm_ffoptionsbase_adj;
extern int no_notify_play;
extern int last_no_notify_play;
extern int disable_skin_cursors;
extern int disable_skin_borders;
extern int g_exit_disabled;
extern UINT g_scrollMsg;
LRESULT CALLBACK Main_WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
extern int Ipc_WindowToggle(INT_PTR which, INT_PTR how);
extern int eggstat;
extern int last_brate, g_need_titleupd, g_need_infoupd;
extern int g_stopaftercur;
extern int g_has_deleted_current;
extern int g_has_video_plugin, g_no_video_loaded;
extern char *audits[AUDITSIZE];
extern int audit_ptr;
extern HWND hTooltipWindow, hEQTooltipWindow, hVideoTooltipWindow, hPLTooltipWindow/*, hPL2TooltipWindow*/;
extern HWND hMainWindow, hEQWindow, hPLWindow, /*hMBWindow, */hVideoWindow;
extern HINSTANCE hMainInstance;
extern HANDLE hMainThread;
extern DWORD mainThreadId;
extern int paused;
extern int playing;
extern wchar_t caption[CAPTION_SIZE];
extern wchar_t FileName[FILENAME_SIZE];
extern wchar_t FileTitle[FILETITLE_SIZE];
extern wchar_t FileTitleNum[FILETITLE_SIZE];
extern char *app_date;
extern int g_srate, g_brate, g_nch, g_srate_exact;
extern int g_mm_optionsbase_adj;
extern int g_mm_ffwindowsbase_adj;
extern HWND g_dialog_box_parent;
extern int g_restartonquit;
extern char playlist_custom_font[128];
extern wchar_t playlist_custom_fontW[128];
extern int config_custom_plfont;
extern int disable_skin_cursors;
LRESULT sendMlIpc(int msg, WPARAM param);
extern HWND hExternalVisWindow;
int CALLBACK WINAPI BrowseCallbackProc( HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData);
int CALLBACK WINAPI BrowseCallbackProc_Download(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData);
BOOL CALLBACK browseEnumProc(HWND hwnd, LPARAM lParam);
int Main_OnClose(HWND hwnd);
#define DIALOG_PARENT(w) (g_dialog_box_parent?g_dialog_box_parent:w)
int CreateMainWindow();
void BuildAppName();
WPARAM WinampMessageLoop();
/***************
*** metrics.c
*/
#define METRICS_EMAIL 0x0001
#define METRICS_COUNTRY 0x0002
#define METRICS_ANNOUNCEMENTS 0x0003
#define METRICS_GENDER 0x0004
INT GetMetricsValueW(const char *data, const char *pszType, void *pDest, int cbDest);
BOOL SetMetricsValueW(const char *data, const char *pszType, const void *pVal, int cbVal);
BOOL SendMetrics(const char *data, HWND hwndParent);
INT GetMetricsSize(const char *data);
/***************
*** verchk.c
*/
void newversioncheck(void);
void Ping(const char *url);
/***************
*** ole.cpp
*/
void InitDragDrops();
void UninitDragDrops();
void Ole_initDragDrop(void);
void Ole_uninitDragDrop(void);
void *Ole_getDropTarget(void);
/***************
*** options.c
*/
#define PREFS_UNICODE ((_prefsDlgRec *)1)
#define PREFS_ACP ((_prefsDlgRec *)0)
extern int g_taskbar_dirty;
extern intptr_t prefs_last_page;
extern RECT prefs_rect, alt3_rect, ctrle_rect, about_rect,
loc_rect, time_rect, load_rect, editinfo_rect;
extern HWND prefs_hwnd;
void prefs_dialog(int modal);
void prefs_liveDlgAdd(prefsDlgRec * p);
void prefs_liveDlgRemove(prefsDlgRec * p);
void prefs_liveDlgUpdate(prefsDlgRec * p);
void SetDialogBoxFromFile(FILE *fp, HWND hwndDlg, int id);
/***************
*** options_playlist.cpp
*/
void UpdatePlaylistFontSizeText(void);
void UpdateManualAdvanceState(void);
/***************
*** options_skin.cpp
*/
typedef struct _ENUMSKIN
{
const wchar_t *pszFileName;
const wchar_t *pszName;
int nType;
int bActive;
} ENUMSKIN;
#define SKIN_FILETYPE_EMBED 3
#define SKIN_FILETYPE_DIR 0
#define SKIN_FILETYPE_ZIP 1
#define SKIN_FILETYPE_WSZ 2
#define SKIN_FILETYPE_WAL 4
typedef int (CALLBACK *ENUMSKINPROC)(ENUMSKIN* /*pes*/, void * /*user*/); // return 0 to stop enumeration
int EnumerateSkins(ENUMSKINPROC fnEnumSkin, void *user);
/***************
*** options_general.cpp
*/
typedef struct _ENUMLANG
{
const wchar_t *pszFileName;
const wchar_t *pszName;
int nType;
int bActive;
} ENUMLANG;
//#define LANG_FILETYPE_LNG 1 // DEPRECATED: no longer a supported type
#define LANG_FILETYPE_WLZ 2
#define LANG_FILETYPE_EMBED 3
#define LANG_FILETYPE_ZIP 4 // added 5.66
#define LANG_FILETYPE_DIR 0 // added 5.66
typedef int (CALLBACK *ENUMLANGPROC)(ENUMLANG* /*pel*/, void * /*user*/); // return 0 to stop enumeration
int EnumerateLanguages(ENUMLANGPROC fnEnumLang, void *user);
void LangSwitchToLangPrompt(HWND hwndDlg, wchar_t* newLang);
/***************
*** out.c
*/
extern Out_Module *out_modules[32];
extern Out_Module *out_mod;
void out_init();
void out_deinit();
void out_setwnd();
void out_changed(HINSTANCE hLib, int enabled);
/***************
*** peui.c
*/
void peui_handlemouseevent(HWND hwnd, int x, int y, int type, int stats);
void pe_ui_handlecursor(HWND hwnd);
/****************
*** play.c
*/
void getNewFile(int, HWND, const wchar_t *);
LRESULT getNewLocation(int, HWND); // if the int param is -1, returns a HGLOBAL to the thing instead of acting on it
void StartPlaying();
void StopPlaying(int);
void PausePlaying();
void UnPausePlaying();
void PlayThing(const char *thing, int clearlist);
void BeginPlayback();
/***************
*** playlist.c
*/
__declspec(dllexport) extern wchar_t *(*plstring_wcsdup)(const wchar_t *str);
__declspec(dllexport) extern wchar_t *(*plstring_malloc)(size_t str_size);
__declspec(dllexport) extern void (*plstring_release)(wchar_t *str);
__declspec(dllexport) extern void (*plstring_retain)(wchar_t *str);
int LoadPlaylistByExtension(const wchar_t *fn, const wchar_t *ext, int whattodo, int useBase);
int PlayList_getitem2W(int position, wchar_t *filename, wchar_t *filetitle);
int PlayList_getitem_jtfW(int position, wchar_t *str);
void PlayList_getcurrent_tupdate(wchar_t *FileName, wchar_t *FileTitle);
int IsPlaylistExtension(const wchar_t *extension);
int IsPlaylistExtensionA(const char *extension);
int LoadPlaylist(const wchar_t *filename, int whattodo, int doMIMEcheck); // returns -1 if not a playlist, 0 on success, 1 on failure
void plstring_init();
extern wchar_t playlistStr[19];
void PlayList_UpdateTitle(const wchar_t *filename);
int PlayList_GetNextSelected(int start);
int PlayList_GetSelectedCount();
void PlayList_updateitem(int position);
void PlayList_getcurrent_onstop(wchar_t *filename, wchar_t *filetitle);
int PlayList_gethidden(int pos);
int PlayList_ishidden(int pos);
int PlayList_alldone(int pos);
int PlayList_hasanycurtain(int pos);
int PlayList_current_hidden(void);
const char *PlayList_getcurtain(int pos);
const char *PlayList_getExtInf( int pos );
//const char *PlayList_getbrowser(int pos);
void PlayList_resetcurrent(void);
int PlayList_getitem(int position, wchar_t *filename, wchar_t *filetitle);
int PlayList_getitem2(int position, char *filename, char *filetitle);
int PlayList_getitem3(int position, char *filetitle, char *filelength);
int PlayList_getitem3W(int position, wchar_t *filetitle, wchar_t *filelength);
int PlayList_getitem_pl(int position, wchar_t *);
int PlayList_getlength(void);
int PlayList_deleteitem(int item);
void PlayList_delete(void);
void PlayList_destroy(void);
void PlayList_append(const wchar_t *filename, int is_nde_string);
void PlayList_appendthing(const wchar_t *url, int doMIMEcheck, int is_nde_string);
void PlayList_append_withinfo(const wchar_t *filename, const wchar_t *title, const wchar_t *ext, int length, int is_nde_string);
void PlayList_append_withinfo_curtain(const wchar_t *filename, const wchar_t *title, int length, char *curtain, const wchar_t *ext, int is_nde_string);
void PlayList_append_withinfo_hidden(const wchar_t *filename, const wchar_t *title, int length, char *curtain/*, char *browser*/);
void PlayList_getcurrent(wchar_t *filename, wchar_t *filetitle, wchar_t *filetitlenum);
void PlayList_GetCurrentTitle(wchar_t *filetitle, int cchLen);
void PlayList_setcurrent(const wchar_t *filename, wchar_t *filetitle);
void PlayList_swap(int e1, int e2);
int PlayList_setposition(int pos);
int PlayList_advance(int byval);
int PlayList_getPosition();
int PlayList_getNextPosition();
void PlayList_addfromdlg(const wchar_t *fns); // replace with api_playlistmanager
void PlayList_refreshtitle(void);
wchar_t *PlayList_gettitle(const wchar_t *filename, int useID3);
const wchar_t *PlayList_GetCachedTitle(const wchar_t *filename);
int PlayList_randpos(int);
void PlayList_randomize(void);
void PlayList_reverse(void);
void PlayList_sort(int, int start_p);
void PlayList_adddir(const wchar_t *path, int recurse); // returns 0 if path was invalid // replace with api_playlistmanager
void PlayList_updaterandpos(void);
void PlayList_makerelative(const wchar_t *listfile, wchar_t *filename, int useBase);
int PlayList_getsonglength(int x);
int PlayList_gettotallength(void);
int PlayList_getcurrentlength(void);
int PlayList_getselect(int);
int PlayList_getselect2(int x, wchar_t *filename);
void PlayList_setselect(int, int);
void PlayList_setlastlen(int x);
void PlayList_setitem(int x, const wchar_t *filename, wchar_t *filetitle);
void PlayList_saveend(int start);
void PlayList_restoreend(void);
void PlayList_setcached(int x, int cached);
int PlayList_getcached(int x);
void PlayList_SetLastItem_RepeatCount( int count);
int PlayList_getrepeatcount(int pos);
void PlayList_terminate_lasthidden(void);
void PlayList_SetLastItem_Range(unsigned long starttime, unsigned long endtime);
unsigned long PlayList_GetItem_Start(int pos);
unsigned long PlayList_GetItem_End(int pos);
void PlayList_insert(int position, const wchar_t *filename);
/**************
*** pledit.c
*/
LRESULT CALLBACK PE_WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
void pleditDlg(HWND, int);
void plEditRefresh(void);
void plEditSelect(int song);
extern int pledit_disp_offs;
void PE_Cmd(windowCommand *wc);
/***************
*** pls.c
*/
void saveplsfn(const wchar_t *fn);
int loadpls(HWND, int);
int savepls(HWND hwnd);
/************************
*** sa.c
*/
extern volatile int sa_curmode;
void SpectralAnalyzer_Create();
void SpectralAnalyzer_Destroy();
void sa_setthread(int enabled);
void sa_deinit(void);
void sa_init(int numframes);
int sa_add(char *values, int timestamp, int csa);
char *sa_get(int timestamp, int csa, char data[75*2 + 8]);
/************************
*** set.c
*/
void set_caption(int alt_cb, wchar_t *format, ...);
void set_aot(int);
void set_priority(void);
void set_taskbar(void);
void set_visopts(void);
void do_caption_autoscroll(void);
void set_pl_wnd_tooltip(void);
void set_vid_wnd_tooltip(void);
/***********************
*** shell.cpp
*/
HRESULT ResolveShortCut(HWND hwnd, LPCWSTR pszShortcutFile, LPWSTR pszPath);
//void CreateShortCut(HWND hwnd, LPCSTR pszShortcutFile, LPCSTR pszExe, LPCSTR, int);
void Shell_Free(void *p);
/************************
*** skins.c
*/
BOOL _cleanupDirW(const wchar_t *dir);
extern int g_skinloadedmanually, g_skinmissinggenff;
void CreateDirectoryForFileW(wchar_t *fn, wchar_t *base); // shared for use with wlz files
void Skin_Random(void);
void Skin_Load(void);
void Skin_CleanupZip(void);
void Skin_CleanupAfterCrash(void);
BOOL Skin_Check_Modern_Support();
int Skin_GetRegionPointList(int eq, int **points, int **counts);
/* The indices of Skin_PLColors:
0 - text color - playlist
1 - text color - currently playing playlist entry
2 - background color - playlist
3 - background color - selected playlist entry
4 - text color - video window info, minibrowser info
5 - background - video window info, minibrowser info */
extern int Skin_PLColors[6], Skin_UseGenNums;
extern char Skin_PLFont[128];
extern wchar_t Skin_PLFontW[128];
extern HWND skin_hwnd;
#define N_CURSORS 29
extern HCURSOR Skin_Cursors[N_CURSORS];
/*************************
*** splash.c
*/
void splashDlg(int wait_in_ms);
/*************************
*** stats.c
*/
void Stats_OnPlay(const wchar_t *playstring);
void stats_write(void); // sets some final stats and writes to disk
void stats_getuidstr(char *str);
void stats_init();
void stats_save(); // just writes to disk
/***********************
*** systray.c
*/
extern int systray_intray;
void systray_minimize(wchar_t *tip);
void systray_restore(void);
/* ui.c */
extern int ui_songposition;
extern int ui_songposition_dir;
extern int ui_songposition_tts;
extern int do_posbar_active;
void ui_doscrolling();
void ui_handlemouseevent(int x, int y, int type, int stats); // x,y, -1=up,0=move,1=down, stats = kbstats
void ui_reset();
void ui_drawtime(int time_elapsed, int mode); // mode=0 means called from timer, mode=1 forced
/***********************
*** util.c
*/
LPCWSTR RepairMutlilineString(LPWSTR pszBuffer, INT cchBufferMax);
void recent_add(const wchar_t *loc);
int IsUrl(const char *url);
//int IsCharSpace(char digit);
//int IsCharSpaceW(wchar_t digit);
int IsCharDigit(char digit);
int IsCharDigitW(wchar_t digit);
void mbprintf(char *file, int line, char *format, ...);
void link_handledraw(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
LRESULT link_handlecursor(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
void link_startsubclass(HWND hwndDlg, UINT id);
void myOpenURL(HWND, const wchar_t *url);
void myOpenURLWithFallback(HWND, wchar_t *url, wchar_t *fallbackUrl);
char *my_strdup(char *s);
int geticonid(int x);
int isInetAvailable(void);
unsigned int getDay(void);
const wchar_t *scanstr_backcW(const wchar_t *str, const wchar_t *toscan, const wchar_t *defval);
void getViewport(RECT *r, HWND wnd, int full, RECT *sr);
BOOL windowOffScreen(HWND hwnd, POINT pt);
LPCWSTR BuildFullPath(LPCWSTR pszPathRoot, LPCWSTR pszPath, LPWSTR pszDest, INT cchDest); //
INT ComparePath(LPCWSTR pszPath1, LPCWSTR pszPath2, LPCWSTR pszPathRoot); //
BOOL DisabledWindow_OnMouseClick(HWND hwnd); // call it in WM_SETCURSOR
/***************
*** functions related to uxtheme.dll
*/
#define ETDT_DISABLE 0x01
#define ETDT_ENABLE 0x02
#define ETDT_USETABTEXTURE 0x04
#define ETDT_ENABLETAB (ETDT_ENABLE | ETDT_USETABTEXTURE)
#define ETDT_USEAEROWIZARDTABTEXTURE 0x08
#define ETDT_ENABLEAEROWIZARDTAB (ETDT_ENABLE | ETDT_USEAEROWIZARDTABTEXTURE)
#define ETDT_VALIDBITS (ETDT_DISABLE | ETDT_ENABLE | ETDT_USETABTEXTURE | ETDT_USEAEROWIZARDTABTEXTURE)
int IsWinXPTheme(void);
void DoWinXPStyle(HWND tab);
int IsAero(void);
BOOL IsVista(void);
BOOL IsVistaOrLower(void);
BOOL IsWin8(void);
HRESULT WAEnableThemeDialogTexture(HWND hwnd, DWORD dwFlags);
/***************
*** lang.cpp
*/
HINSTANCE Lang_InitLangSupport(HINSTANCE, const GUID);
void Lang_FollowUserDecimalLocale(void);
void Lang_CleanupZip(void);
void Lang_CleanupAfterCrash(void);
void Lang_EndLangSupport(void);
HINSTANCE Lang_FakeWinampLangHInst(HINSTANCE adjustedHInst);
void Lang_LocaliseAgentOnTheFly(BOOL refresh);
int extract_wlz_to_dir(wchar_t* readme_only_wlz_extraction, BOOL *skip);
char *getString(UINT uID, char *str, size_t maxlen);
wchar_t *getGUIDstr(const GUID, wchar_t *target);
int LPMessageBox(HWND parent, UINT idMessage, UINT idTitle, UINT type);
wchar_t *getStringW(UINT uID, wchar_t *str, size_t maxlen);
#define LPCreateDialog(id, parent, proc) \
LPCreateDialogParam(id, parent, (DLGPROC)proc, 0)
HWND LPCreateDialogParam(int id, HWND parent, DLGPROC proc, LPARAM param);
#define LPDialogBox(id, parent, proc) \
LPDialogBoxParam(id, parent, (DLGPROC)proc, 0)
INT_PTR LPDialogBoxParam(int id, HWND parent, DLGPROC proc, LPARAM param);
#define LPDialogBoxW(id, parent, proc) \
LPDialogBoxParamW(id, parent, (DLGPROC)proc, 0)
INT_PTR LPDialogBoxParamW(int id, HWND parent, DLGPROC proc, LPARAM param);
#define LPCreateDialogW(id, parent, proc) \
LPCreateDialogParamW(id, parent, (DLGPROC)proc, 0)
HWND LPCreateDialogParamW(int id, HWND parent, DLGPROC proc, LPARAM param);
HMENU LPLoadMenu(UINT id);
/***************
*** video.cpp
*/
extern int g_video_numaudiotracks;
extern int g_video_curaudiotrack;
void Browser_Create();
void Browser_Destroy();
extern wchar_t vidoutbuf_save[1024];
extern int is_fullscreen_video;
int ShowVideoWindow(int init_state);
void HideVideoWindow(int autoStop);
LRESULT CALLBACK video_WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
int video_isVideoPlaying();
int videoIsFullscreen();
void videoToggleFullscreen();
void videoForceFullscreenOff();
HWND video_Create();
/***************
*** video_ipc.cpp
*/
int WINAPI VideoIPCProcedure(int which, WPARAM data, LRESULT *returnValue);
/***
** videoui.c
*/
void videoui_handlemouseevent(int x, int y, int type, int stats);
/***********************
*** vis.c
*/
int vis_running();
void vis_start(HWND, wchar_t*);
void vis_stop();
void vsa_init(int numframes);
void vsa_deinit(void);
void vis_setinfo(int srate, int nch);
int vsa_getmode(int *sp, int *wa);
void vis_setprio(void);
int vsa_add(void *data, int timestamp);
int sa_add(char *values, int timestamp, int csa);
void sa_addpcmdata(void *PCMData, int nch, int bps, int timestamp);
void vsa_addpcmdata(void *PCMData, int nch, int bps, int timestamp);
LRESULT CALLBACK VIS_WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
extern HWND hVisWindow, hPLVisWindow;
void vis_setextwindow(HWND hwnd);
/***********************
*** rand.cpp
*/
int warand();
float warandf();
/*******************
*** ipc.cpp
*/
LRESULT Main_OnIPC(HWND hwnd, int which, WPARAM data);
LRESULT wa_register_ipc(WPARAM data);
/*******************
*** fullscreen.cpp
*/
void BeginFullscreenAppMonitor();
void EndFullscreenAppMonitor();
void restoreAOT();
void dropAOT();
/*******************
*** main_mouse.cpp
*/
int Main_OnRButtonUp(HWND hwnd, int x, int y, UINT flags);
int Main_OnLButtonUp(HWND hwnd, int x, int y, UINT flags);
int Main_OnCaptureChanged(HWND hwnd);
int Main_OnLButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT keyFlags);
int Main_OnLButtonDblClk(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT keyFlags);
int Main_OnMouseMove(HWND hwnd, int x, int y, UINT keyFlags);
/*******************
*** main_nonclient.cpp
*/
UINT Main_OnNCHitTest(HWND hwnd, int x, int y);
BOOL Main_OnNCActivate(HWND hwnd, BOOL fActive, HWND hwndActDeact, BOOL fMinimized);
UINT Main_OnNCCalcSize(HWND hwnd, BOOL fCalcValidRects, NCCALCSIZE_PARAMS * lpcsp);
/*******************
*** main_display.cpp
*/
int Main_OnGetText(wchar_t *text, int sizeCch);
int Main_OnDisplayChange(HWND hwnd);
int Main_OnQueryNewPalette(HWND hwnd);
int Main_OnPaletteChanged(HWND hwnd, HWND hwndPaletteChange);
/*******************
*** main_buttons.cpp
*/
int Main_OnButton1(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify);
int Main_OnButton2(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify);
int Main_OnButton3(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify);
int Main_OnButton4(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify);
int Main_OnButton5(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify);
/*******************
*** main_close.cpp
*/
void Main_OnEndSession(HWND hwnd, BOOL fEnding);
int Main_OnClose(HWND hwnd);
int Main_OnDestroy(HWND hwnd);
/*******************
*** main_init.cpp
*/
void RegisterWinamp();
BOOL InitApplication(HINSTANCE hInstance);
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow);
/*******************
*** browser.cpp
*/
/*
void LaunchBrowser(const char *url);
void OpenBrowser();
void Browser_toggleVisible(int showing);
void CloseBrowser();
void Browser_init();
void Browser_kill();
*/
/*******************
*** ExternalCOM.cpp
*/
DISPID __cdecl JSAPI1_GenerateUniqueDispatchId();
HRESULT __cdecl JSAPI1_Initialize();
HRESULT __cdecl JSAPI1_Uninitialize();
HRESULT __cdecl JSAPI1_SkinChanged();
HRESULT __cdecl JSAPI1_CurrentTitleChanged();
/*******************
*** SkinUtils.cpp
*/
const char *GetFontName();
const wchar_t *GetFontNameW();
int GetFontSize();
/***
*** ASXv2.cpp
*/
void loadasxv2fn(const wchar_t *filename, int whattodo);
/*******************
*** Wasabi.cpp
*/
void Wasabi_Load();
void Wasabi_Unload();
void Wasabi_FindSystemServices();
void Wasabi_ForgetSystemServices();
/*******************
*** W5S.cpp
*/
void w5s_init();
void w5s_deinit();
/*******************
*** vu.cpp
*/
void vu_init(int numframes, int srate);
void vu_deinit();
void VU_Create();
void VU_Destroy();
int vu_add(char *values, int timestamp);
int export_vu_get(int channel);
void calcVuData(unsigned char *out, char *data, const int channels, const int bits);
// PlayQueue.cpp
int PlayQueue_OnEOF();
// paths.cpp
BOOL UtilGetSpecialFolderPath(HWND hwnd, TCHAR *path, int folder);
// cmdline.cpp
void GetParameter(const wchar_t *commandLine, wchar_t *yourBuffer, size_t yourBufferSize);
// unsorted
void readwrite_client_uid(int isWrite, wchar_t uid_str[64]);
BOOL read_compatmode();
extern char metric_plugin_list[];
char *export_sa_get_deprecated();
char *export_sa_get(char data[75*2 + 8]);
void export_sa_setreq(int);
extern HWND jump_hwnd, jump_hwnd2;
wchar_t *remove_urlcodesW(wchar_t *p);
int PlayList_get_lastlen();
HBITMAP draw_LBitmap(LPCTSTR bmname, const wchar_t *filename);
extern void draw_mb_info(char *t, int erase);
extern void FormString(char *in, char *out, int maxlen);
extern int plmodified, plcleared, plneedsave;
extern int g_has_deleted_current;
void peui_reset(HWND hwnd);
extern int volatile sa_override;
extern int deferring_show;
extern int g_showcode;
extern int eq_startuphack, pe_startuphack;
extern int g_skinloadedmanually;
void vis_init();
void resizeMediaWnd (HWND hwnd);
extern int g_skinloadedmanually;
int writeEQfile_init(wchar_t *file, char *name, unsigned char *tab);
extern int playlist_open(HWND hwnd);
extern int setPlRating(int rating);
extern int setCurrentRating(int rating);
extern int got_ml;
int peui_isrbuttoncaptured();
extern void makeurlcodes(char *in, char *out);
extern HIMAGELIST toolbarIcons;
extern struct ITaskbarList3* pTaskbar3;
void OnTaskbarButtonCreated(BOOL force);
LRESULT Main_OnCreate(HWND hwnd, LPCREATESTRUCT lpCreateStruct);
LRESULT Main_OnWASystray(HWND hwnd, int id);
LRESULT Main_OnWAMPEGEOF(HWND hwnd);
LRESULT Main_OnSize(HWND hwnd, UINT state, int cx, int cy);
LRESULT Main_OnTimer(HWND hwnd, UINT id);
LRESULT Main_OnDropFiles(HWND hwnd, HDROP hdrop);
LRESULT Main_OnCopyData(HWND hwnd, COPYDATASTRUCT *cds);
extern int m_converting;
void DoInstall(int is_install);
wchar_t *ParseParameters(wchar_t *lpszCmdParam, int *bAdd, int *bBookmark, int *bHandle, int *nCmdShow, int *bCommand, int *bCmdParam, int *bAllowCompat);
#ifdef BETA
void ParseParametersExpired(wchar_t *lpszCmdParam);
#endif
void reg_associated_filetypes(int force);
wchar_t *FindNextCommand(wchar_t *cmdLine);
void parseCmdLine(wchar_t *cmdline, HWND hwnd);
wchar_t *CheckFileBase(wchar_t *lpszCmdParam, HWND hwnd_other, int *exit, int mode);
#define CheckSkin(lpszCmdParam, hwnd_other, exit) CheckFileBase(lpszCmdParam, hwnd_other, exit, 0)
#define CheckLang(lpszCmdParam, hwnd_other, exit) CheckFileBase(lpszCmdParam, hwnd_other, exit, 1)
void LoadPathsIni();
LRESULT Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify);
extern int g_BookmarkTop, g_SkinTop, g_LangTop;
extern int g_open_ml_item_in_pe;
void RegisterConfigGroups();
void CopyExtendedFileInfo(const wchar_t *source, const wchar_t *destination);
int ResizeComboBoxDropDown(HWND hwndDlg, UINT id, const char* str, int width);
int ResizeComboBoxDropDownW(HWND hwndDlg, UINT id, const wchar_t *str, int width);
// creditsrend.c
void render_togglecredits();
void render_quit(void);
void render_render(unsigned char *framebuffer, HDC hdc);
void render_init(int w, int h, char *pal);
// InW.cpp
int InW_IsOurFile(In_Module *mod, const wchar_t *filename);
int InW_Play(In_Module *mod, const wchar_t *filename);
int InW_InfoBox(In_Module *mod, const wchar_t *filename, HWND parent);
void InW_GetFileInfo(In_Module *mod, const wchar_t *filename, wchar_t *title, int *length);
// conversions.cpp
void Float32_To_Int16_Clip(void *destinationBuffer, signed int destinationStride, void *sourceBuffer, signed int sourceStride, unsigned int count);
void Float32_To_Int24_Clip(void *destinationBuffer, signed int destinationStride, void *sourceBuffer, signed int sourceStride, unsigned int count);
HANDLE DuplicateCurrentThread();
/* dwm.cpp */
extern BOOL atti_present;
void DisableVistaPreview();
void DoTheVistaVideoDance();
void RegisterThumbnailTab(HWND hWnd);
void UnregisterThumbnailTab(HWND hWnd);
void OnIconicThumbnail(int width, int height);
void OnThumbnailPreview();
void RefreshIconicThumbnail();
/* handler.cpp */
int HandleFilename(const wchar_t *filename);
/* IVideoD3DOSD.cpp */
HMODULE FindD3DX9();
/* AlbumArt.cpp */
void CleanNameForPath(wchar_t *name);
/* application.cpp */
BOOL IsDirectMouseWheelMessage(const UINT uMsg);
BOOL DirectMouseWheel_EnableConvertToMouseWheel(HWND hwnd, BOOL enable);
BOOL DirectMouseWheel_IsConvertToMouseWheelEnabled(HWND hwnd);
BOOL DirectMouseWheel_ProcessDialogMessage(HWND hwnd, unsigned int uMsg, WPARAM wParam, LPARAM lParam, const int controls[], int controlslen);
HWND ActiveChildWindowFromPoint(HWND hwnd, POINTS cursor_s, const int *controls, size_t controlsCount);
#ifdef __cplusplus
} // extern "C"
#endif
#endif