Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

244 lines
6.2 KiB

/*******************************Module*Header*********************************\
* Module Name: cdconfig.c
*
* Media Control Architecture Redbook CD Audio Driver
*
* History:
* RobinSp - 6 Mar 1992 ported to Windows NT
*
* Copyright (c) 1990-1995 Microsoft Corporation
*
\****************************************************************************/
#include <windows.h>
#include <mmsystem.h>
#include <mmddk.h>
#include "mcicda.h"
#include "cdconfig.h"
#include "cda.h"
#include "cdio.h"
#define MAXINILENGTH 128
TCHAR szIniFile[] = TEXT("system.ini");
TCHAR szNull[] = TEXT("");
int numdrives;
STATICFN LPWSTR GetTail(LPWSTR pch)
{
while (*pch && *pch != ' ')
pch++;
while (*pch == ' ')
pch++ ;
return (pch);
}
STATICFN UINT GetCmdParam (LPDRVCONFIGINFO lpdci)
{
WCHAR sz[MAXINILENGTH];
LPWSTR lpsz;
if ((lpdci->dwDCISize == sizeof(DRVCONFIGINFO)) && GetPrivateProfileStringW(
lpdci->lpszDCISectionName,
lpdci->lpszDCIAliasName,
szNull, sz, MAXINILENGTH, szIniFile))
{
WCHAR parameters[6];
LPWSTR pszDefault;
// We have got the name of the driver
// Just in case the user has added the command parameter to the
// end of the name we had better make sure there is only one token
// on the line. If there is a command parameter this becomes the
// default on the call to read WIN.INI
lpsz = GetTail (sz);
pszDefault = lpsz; // Either the number on the end, or NULL
if (*lpsz) {
// RATS!! There is a parameter on the end of the driver name
while (*--lpsz == TEXT(' ')) {
}
*++lpsz = TEXT('\0'); // Terminate the string after the DLL name
}
if (GetProfileString(sz, lpdci->lpszDCIAliasName, lpsz, parameters, sizeof(parameters)/sizeof(WCHAR))) {
if (parameters[0] == TEXT('\0') ||
parameters[0] < TEXT('0') || parameters[0] > L'9')
return 0;
else
return parameters[0] - L'0';
} else
return(0);
} else
return 0;
}
STATICFN void PutCmdParam(LPDRVCONFIGINFO lpdci, UINT nDrive)
{
WCHAR sz[MAXINILENGTH];
LPWSTR lpch;
if (lpdci->dwDCISize == sizeof(DRVCONFIGINFO))
{
if (GetPrivateProfileStringW(
lpdci->lpszDCISectionName,
lpdci->lpszDCIAliasName,
szNull, sz, MAXINILENGTH-5, szIniFile))
{
// There might be a command parameter on the end of the DLL name.
// Ensure we only have the first token
sz[MAXINILENGTH-1] = 0;
lpch = GetTail(sz);
if (*lpch) {
// RATS!! Not a simple name
while (*--lpch == L' ') {
}
*++lpch = TEXT('\0'); // Terminate the string after the DLL name
}
// lpch addresses the 0 terminating the DLL name
// we now add the command parameter into the same buffer, but
// as a separate string. This will then be written to win.ini
// [mcicda.dll]
// aliasname = parameter
*++lpch = (TCHAR)(nDrive + '0');
*(lpch+1) = '\0';
WriteProfileString(sz, lpdci->lpszDCIAliasName, lpch);
}
}
}
BOOL ConfigDlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
int i;
HWND hListbox;
static LPDRVCONFIGINFO lpdci;
switch (msg) {
case WM_INITDIALOG:
{
WCHAR wszFormat[32];
hListbox = GetDlgItem (hDlg, C_DRIVE_LIST);
LoadString( hInstance, IDS_DRIVE, wszFormat,
sizeof(wszFormat) / sizeof(WCHAR) );
lpdci = (LPDRVCONFIGINFO)lParam;
for (i = 0; i < numdrives; ++i)
{
TCHAR item_name[32];
wsprintf( item_name, wszFormat, CdInfo[i].cDrive );
SendMessage (hListbox, LB_ADDSTRING, 0, (DWORD)(LPWSTR)item_name);
}
i = GetCmdParam(lpdci);
SendMessage (hListbox, LB_SETCURSEL, (UINT)i, 0);
break;
}
case WM_COMMAND:
switch (LOWORD(wParam))
{
case IDOK:
hListbox = GetDlgItem (hDlg, C_DRIVE_LIST);
i = SendMessage (hListbox, LB_GETCURSEL, 0, 0L);
if (i != LB_ERR)
PutCmdParam(lpdci, i);
EndDialog(hDlg, DRVCNF_OK);
break;
case IDCANCEL:
EndDialog(hDlg, DRVCNF_CANCEL);
break;
default:
break;
}
break;
default:
return FALSE;
break;
}
return TRUE;
}
STATICFN void DisplayMessage(
HWND hwndParent,
UINT wMessageID)
{
WCHAR aszCaption[128];
WCHAR aszMessage[128];
LoadStringW( hInstance, wMessageID, aszMessage,
sizeof(aszMessage) / sizeof(WCHAR) );
LoadStringW( hInstance, IDS_CONFIGCAPTION, aszCaption,
sizeof(aszCaption) / sizeof(WCHAR) );
MessageBoxW( hwndParent, aszMessage, aszCaption,
MB_ICONINFORMATION | MB_OK);
}
int PASCAL FAR CDAConfig (HWND hwndParent, LPDRVCONFIGINFO lpInfo)
{
int iResult;
//
// Initialize global count of number of CD drives present
//
numdrives = CDA_init_audio();
//
// If no drives are detected we still allow the install
//
// If there is more than one drive ask the user which one they want
// to use with this driver.
//
// Note that the user may select cancel in the dialog.
//
switch (numdrives) {
case -1:
case 0:
DisplayMessage(hwndParent, IDS_NODRIVES);
iResult = DRVCNF_OK;
break;
case 1:
DisplayMessage(hwndParent, IDS_ONEDRIVE);
iResult = DRVCNF_OK;
break;
default:
iResult = DialogBoxParam(hInstance, MAKEINTRESOURCE(IDD_CONFIG), hwndParent, (DLGPROC)ConfigDlgProc, (DWORD)lpInfo);
break;
}
//
// Close the devices we opened
//
CDA_terminate_audio ();
//
// Tell the control panel whether to cancel or continue
//
return iResult;
}