mirror of
https://github.com/vgmstream/vgmstream.git
synced 2024-11-30 17:24:31 +01:00
winamp: print logs
This commit is contained in:
parent
d351710887
commit
475f42ac11
@ -347,6 +347,36 @@ INT_PTR CALLBACK configDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lPara
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case IDC_LOG_BUTTON: { /* shows log */
|
||||||
|
TCHAR wbuf[257*32];
|
||||||
|
char buf[257*32];
|
||||||
|
size_t buf_size = 257*32;
|
||||||
|
int i, max = 0;
|
||||||
|
const char** lines = logger_get_lines(&max);
|
||||||
|
|
||||||
|
/* could use some nice scrollable text but I don't know arcane Windows crap */
|
||||||
|
if (lines == NULL) {
|
||||||
|
snprintf(buf, 257, "%s\n", "couldn't read log");
|
||||||
|
}
|
||||||
|
else if (max == 0) {
|
||||||
|
snprintf(buf, 257, "%s\n", "(empty)");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
//todo improve
|
||||||
|
char* tmp = buf;
|
||||||
|
for (i = 0; i < max; i++) {
|
||||||
|
int done = snprintf(tmp, 256, "%s", lines[i]);
|
||||||
|
if (done < 0 || done >= 256)
|
||||||
|
break;
|
||||||
|
tmp += (done); // + 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
cfg_char_to_wchar(wbuf, buf_size, buf);
|
||||||
|
MessageBox(hDlg, buf, TEXT("vgmstream log"), MB_OK);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
@ -370,3 +400,82 @@ INT_PTR CALLBACK configDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lPara
|
|||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* ************************************* */
|
||||||
|
/* IN_LOG */
|
||||||
|
/* ************************************* */
|
||||||
|
|
||||||
|
/* could just write to file but to avoid leaving temp crap just log to memory and print what when requested */
|
||||||
|
|
||||||
|
winamp_log_t* walog;
|
||||||
|
#define WALOG_MAX_LINES 32
|
||||||
|
#define WALOG_MAX_CHARS 256
|
||||||
|
|
||||||
|
struct winamp_log_t {
|
||||||
|
char data[WALOG_MAX_LINES * WALOG_MAX_CHARS];
|
||||||
|
int logged;
|
||||||
|
const char* lines[WALOG_MAX_LINES];
|
||||||
|
} ;
|
||||||
|
|
||||||
|
void logger_init() {
|
||||||
|
walog = malloc(sizeof(winamp_log_t));
|
||||||
|
if (!walog) return;
|
||||||
|
|
||||||
|
walog->logged = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void logger_free() {
|
||||||
|
free(walog);
|
||||||
|
walog = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* logs to data as a sort of circular buffer. example if max_lines is 6:
|
||||||
|
* - log 0 = "msg1"
|
||||||
|
* ...
|
||||||
|
* - log 5 = "msg5" > limit reached, next will overwrite 0
|
||||||
|
* - log 0 = "msg6" (max 6 logs, but can only write las 6)
|
||||||
|
* - when requested lines should go from current to: 1,2,3,4,5,0
|
||||||
|
*/
|
||||||
|
void logger_callback(int level, const char* str) {
|
||||||
|
char* buf;
|
||||||
|
int pos;
|
||||||
|
if (!walog)
|
||||||
|
return;
|
||||||
|
|
||||||
|
pos = (walog->logged % WALOG_MAX_LINES) * WALOG_MAX_CHARS;
|
||||||
|
buf = &walog->data[pos];
|
||||||
|
snprintf(buf, WALOG_MAX_CHARS, "%s", str);
|
||||||
|
|
||||||
|
walog->logged++;
|
||||||
|
|
||||||
|
/* ??? */
|
||||||
|
if (walog->logged >= 0x7FFFFFFF)
|
||||||
|
walog->logged = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char** logger_get_lines(int* p_max) {
|
||||||
|
int i, from, max;
|
||||||
|
|
||||||
|
if (!walog) {
|
||||||
|
*p_max = 0;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (walog->logged > WALOG_MAX_LINES) {
|
||||||
|
from = (walog->logged % WALOG_MAX_LINES);
|
||||||
|
max = WALOG_MAX_LINES;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
from = 0;
|
||||||
|
max = walog->logged;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < max; i++) {
|
||||||
|
int pos = ((from + i) % WALOG_MAX_LINES) * WALOG_MAX_CHARS;
|
||||||
|
walog->lines[i] = &walog->data[pos];
|
||||||
|
}
|
||||||
|
|
||||||
|
*p_max = max;
|
||||||
|
return walog->lines;
|
||||||
|
}
|
||||||
|
@ -344,6 +344,9 @@ void winamp_Init() {
|
|||||||
|
|
||||||
settings.is_xmplay = is_xmplay();
|
settings.is_xmplay = is_xmplay();
|
||||||
|
|
||||||
|
logger_init();
|
||||||
|
vgmstream_set_log_callback(VGM_LOG_LEVEL_ALL, logger_callback);
|
||||||
|
|
||||||
/* get ini config */
|
/* get ini config */
|
||||||
load_defaults(&defaults);
|
load_defaults(&defaults);
|
||||||
load_config(&input_module, &settings, &defaults);
|
load_config(&input_module, &settings, &defaults);
|
||||||
@ -359,6 +362,7 @@ void winamp_Init() {
|
|||||||
|
|
||||||
/* called at program quit */
|
/* called at program quit */
|
||||||
void winamp_Quit() {
|
void winamp_Quit() {
|
||||||
|
logger_free();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* called before extension checks, to allow detection of mms://, etc */
|
/* called before extension checks, to allow detection of mms://, etc */
|
||||||
|
@ -74,6 +74,16 @@ void load_config(In_Module* input_module, winamp_settings_t* settings, winamp_se
|
|||||||
INT_PTR CALLBACK configDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
|
INT_PTR CALLBACK configDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
|
||||||
|
|
||||||
|
|
||||||
|
/* logger */
|
||||||
|
typedef struct winamp_log_t winamp_log_t;
|
||||||
|
void logger_init();
|
||||||
|
void logger_free();
|
||||||
|
void logger_callback(int level, const char* str);
|
||||||
|
const char** logger_get_lines(int* p_max);
|
||||||
|
|
||||||
|
extern winamp_log_t* walog;
|
||||||
|
|
||||||
|
|
||||||
/* ************************************* */
|
/* ************************************* */
|
||||||
/* IN_UNICODE */
|
/* IN_UNICODE */
|
||||||
/* ************************************* */
|
/* ************************************* */
|
||||||
|
@ -16,3 +16,4 @@
|
|||||||
#define IDC_EXTS_UNKNOWN_ON 1015
|
#define IDC_EXTS_UNKNOWN_ON 1015
|
||||||
#define IDC_EXTS_COMMON_ON 1016
|
#define IDC_EXTS_COMMON_ON 1016
|
||||||
#define IDC_FORCE_TITLE 1017
|
#define IDC_FORCE_TITLE 1017
|
||||||
|
#define IDC_LOG_BUTTON 1018
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
#define IDC_STATIC -1
|
#define IDC_STATIC -1
|
||||||
|
|
||||||
//elements: text, id, x, y, width, height [, style [, extended-style]]
|
//elements: text, id, x, y, width, height [, style [, extended-style]]
|
||||||
IDD_CONFIG DIALOGEX 0, 0, 187, 196
|
IDD_CONFIG DIALOGEX 0, 0, 188, 220
|
||||||
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||||
CAPTION "in_vgmstream configuration"
|
CAPTION "in_vgmstream configuration"
|
||||||
FONT 8, "MS Sans Serif", 0, 0, 0x0
|
FONT 8, "MS Sans Serif", 0, 0, 0x0
|
||||||
@ -44,12 +44,14 @@ BEGIN
|
|||||||
LTEXT "Downmix",IDC_STATIC,7,115,48,12
|
LTEXT "Downmix",IDC_STATIC,7,115,48,12
|
||||||
EDITTEXT IDC_DOWNMIX_CHANNELS,52,112,37,14,ES_AUTOHSCROLL
|
EDITTEXT IDC_DOWNMIX_CHANNELS,52,112,37,14,ES_AUTOHSCROLL
|
||||||
|
|
||||||
CONTROL "Disable tagfile",IDC_TAGFILE_DISABLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,131,87,10
|
CONTROL "Disable tagfile",IDC_TAGFILE_DISABLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,132,87,10
|
||||||
|
|
||||||
CONTROL "Force internal title",IDC_FORCE_TITLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,147,87,10
|
CONTROL "Force internal title",IDC_FORCE_TITLE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,148,87,10
|
||||||
|
|
||||||
CONTROL "Enable unknown exts",IDC_EXTS_UNKNOWN_ON,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,163,87,10
|
CONTROL "Enable unknown exts",IDC_EXTS_UNKNOWN_ON,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,164,87,10
|
||||||
|
|
||||||
CONTROL "Enable common exts",IDC_EXTS_COMMON_ON,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,179,87,10
|
CONTROL "Enable common exts",IDC_EXTS_COMMON_ON,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,180,87,10
|
||||||
|
|
||||||
|
PUSHBUTTON "Open Log",IDC_LOG_BUTTON,7,196,50,14
|
||||||
|
|
||||||
END
|
END
|
||||||
|
Loading…
Reference in New Issue
Block a user