#include "stdafx.h"
#include <atlframe.h>
#include <atlctrls.h>
#include <atldlgs.h>
#include "resource.h"
#include "MainFrm.h"
#include "PlayList.h"
#include "registry.h"
#include "tedmem.h"
#include "tedplay.h"
#ifdef HAVE_SDL
#include <SDL.h>
#include "AudioSDL.h"
#else
#include "AudioDirectSound.h"
#endif
CAppModule _Module;
static int Run(LPTSTR = NULL, int nCmdShow = SW_SHOWDEFAULT)
{
CMessageLoop theLoop;
_Module.AddMessageLoop(&theLoop);
CMainFrame dlgMain;
dlgMain.Create(NULL);
unsigned int defaultSampleRate = 0;
getRegistryValue(_T("SampleRate"), defaultSampleRate);
if (!defaultSampleRate || defaultSampleRate > 192000) {
defaultSampleRate = 48000;
setRegistryValue(_T("SampleRate"), defaultSampleRate);
}
unsigned int bufferLengthInMsec = 0;
getRegistryValue(_T("BufferLengthInMsec"), bufferLengthInMsec);
if (!bufferLengthInMsec || bufferLengthInMsec > 1000) {
bufferLengthInMsec = 200;
setRegistryValue(_T("BufferLengthInMsec"), bufferLengthInMsec);
}
unsigned int filterOrder = 0;
getRegistryValue(_T("FilterOrder"), filterOrder);
if (!filterOrder || filterOrder > 1024 || filterOrder < 4) {
filterOrder = 12;
setRegistryValue(_T("FilterOrder"), filterOrder);
}
try {
#ifdef HAVE_SDL
int retval = tedplayMain( __argv[1], new AudioSDL(machineInit(defaultSampleRate, filterOrder), defaultSampleRate,
bufferLengthInMsec));
#else
int retval = tedplayMain( __argv[1],
new AudioDirectSound(machineInit(defaultSampleRate, filterOrder),
TED_SOUND_CLOCK, defaultSampleRate, bufferLengthInMsec));
#endif
unsigned int regVal = 0;
if (getRegistryValue(_T("DisableSID"), regVal) && regVal) {
tedPlaySidEnable(false, 0);
::CheckMenuItem(dlgMain.GetMenu(), ID_TOOLS_DISABLESID, MF_CHECKED);
}
regVal = 0;
if (getRegistryValue(_T("TedChannel1WaveForm"), regVal) && regVal) {
tedPlaySetWaveform(0, regVal);
} else {
regVal = 1;
tedPlaySetWaveform(0, 1);
}
::CheckMenuItem(dlgMain.GetMenu(), ID_TEDCHANNEL1_SQUAREWAVE + regVal - 1, MF_CHECKED);
regVal = 0;
if (getRegistryValue(_T("TedChannel2WaveForm"), regVal) && regVal) {
tedPlaySetWaveform(1, regVal);
} else {
regVal = 1;
tedPlaySetWaveform(1, 1);
}
::CheckMenuItem(dlgMain.GetMenu(), ID_TEDCHANNEL2_SQUAREWAVE + regVal - 1, MF_CHECKED);
if (::PathFileExists(__argv[1])) {
dlgMain.UpdateSubsong();
}
} catch (_TCHAR *str) {
MessageBox(NULL, str, _T("Exception occured."), MB_OK | MB_ICONERROR);
}
int nRet = dlgMain.ShowWindow(SW_NORMAL);
nRet = theLoop.Run();
tedplayClose();
_Module.RemoveMessageLoop();
return nRet;
}
int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE , LPTSTR lpstrCmdLine, int nCmdShow)
{
#if _DEBUG
#endif
HRESULT hRes = ::CoInitialize(NULL);
ATLASSERT(SUCCEEDED(hRes));
HANDLE m_hMutex = ::CreateMutex(NULL, FALSE, _T("WinTedPlayInstance"));
if( m_hMutex != NULL ) { if(::GetLastError() == ERROR_ALREADY_EXISTS)
return FALSE; }
::DefWindowProc(NULL, 0, 0, 0L);
AtlInitCommonControls(ICC_COOL_CLASSES | ICC_BAR_CLASSES
| ICC_WIN95_CLASSES
);
hRes = _Module.Init(NULL, hInstance);
ATLASSERT(SUCCEEDED(hRes));
int nRet = Run(lpstrCmdLine, nCmdShow);
_Module.Term();
::CoUninitialize();
if (m_hMutex)
::CloseHandle(m_hMutex);
return nRet;
}