windows-nt/Source/XPSP1/NT/multimedia/media/samples/mcipionr/pioncnfg.c
2020-09-26 16:20:57 +08:00

223 lines
6.4 KiB
C

/****************************************************************************
*
* pioncnfg.c
*
* Copyright (c) 1991-1993 Microsoft Corporation. All Rights Reserved
*
***************************************************************************/
#include <windows.h>
#include <windowsx.h>
#include <mmsystem.h>
#include <mmddk.h>
#include "mcipionr.h"
#include "pioncnfg.h"
#define MAX_INI_LENGTH 128 /* maximum .ini file line length */
#ifdef WIN32
#define SZCODE TCHAR
#else
#define SZCODE char _based(_segname("_CODE"))
#endif /* WIN32 */
static UINT nPort; /* which com port we're using */
static UINT nRate; /* which baud rate we're using */
static SZCODE szIniFile[] = TEXT("system.ini"); /* configuration information file */
static SZCODE szNull[] = TEXT("");
static SZCODE szCommIniFormat[] = TEXT("com%1d,%d");
/****************************************************************************
* @doc INTERNAL
*
* @api BOOL | GetDriverName | Returns the file name of the driver
* This is the name of the ini section where the driver stores
* its parameters
*
* @parm LPDRVCONFIGINFO | lpdci | Config information from the DRV_CONFIGURE
* message.
*
* @parm LPTSTR | lpstrDriver | Where to put the driver file name - must
* have room for at least MAX_INI_LENGTH characters
*
* @rdesc TRUE if we found some name
***************************************************************************/
static BOOL PASCAL NEAR GetDriverName(LPDRVCONFIGINFO lpdci, LPTSTR lpstrDriver)
{
if (GetPrivateProfileString( lpdci->lpszDCISectionName,
lpdci->lpszDCIAliasName,
TEXT(""),
lpstrDriver,
MAX_INI_LENGTH,
szIniFile))
{
/* 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.
*/
int i;
for ( i = 0; i < MAX_PATH && lpstrDriver[i] != TEXT('\0'); i++) {
if (lpstrDriver[i] == TEXT(' ')) {
lpstrDriver[i] = TEXT('\0');
break;
}
}
return TRUE;
}
return FALSE;
}
/****************************************************************************
* @doc INTERNAL
*
* @api UINT | GetCmdParam | Returns the currently selected comport and
* baud rate from the user profile
*
* @parm LPDRVCONFIGINFO | lpdci | Config information from the DRV_CONFIGURE
* message.
*
* @rdesc Returns comport number.
***************************************************************************/
static void PASCAL NEAR GetCmdParam(LPDRVCONFIGINFO lpdci, PUINT pPort,
PUINT pRate)
{
TCHAR aszDriver[MAX_INI_LENGTH];
TCHAR sz[MAX_INI_LENGTH];
*pPort = 0; /* Default is com1 */
*pRate = DEFAULT_BAUD_RATE;
if (!GetDriverName(lpdci, aszDriver)) {
return;
}
if (GetProfileString(
aszDriver, lpdci->lpszDCIAliasName, szNull, sz,
MAX_INI_LENGTH)) {
pionGetComportAndRate(sz, pPort, pRate);
}
}
/****************************************************************************
* @doc INTERNAL
*
* @api void | PutCmdParam | Sets the current comport in system.ini.
*
* @parm LPDRVCONFIGINFO | lpdci | Config information from the DRV_CONFIGURE
* message.
*
* @parm UINT | nPort | Comport to set.
*
* @rdesc Returns comport number.
***************************************************************************/
static void PASCAL NEAR PutCmdParam(LPDRVCONFIGINFO lpdci, UINT nPort, UINT nRate)
{
TCHAR aszDriver[MAX_INI_LENGTH];
TCHAR sz[MAX_INI_LENGTH];
if (!GetDriverName(lpdci, aszDriver)) {
return;
}
wsprintf(sz, szCommIniFormat, nPort + 1, nRate);
WriteProfileString(
aszDriver,
lpdci->lpszDCIAliasName,
sz);
}
/****************************************************************************
* @doc INTERNAL
*
* @func BOOL | ConfigDlgProc | Dialog proc for the configuration dialog box.
*
* @parm HWND | hDlg | Handle to the configuration dialog box.
*
* @parm UINT | msg | Message sent to the dialog box.
*
* @parm WPARAM | wParam | Message dependent parameter.
*
* @parm LPARAM | lParam | Message dependent parameter.
*
* @rdesc Returns DRV_OK if the user clicks on "OK" and DRV_CANCEL if the
* user clicks on "Cancel".
***************************************************************************/
BOOL FAR PASCAL _LOADDS ConfigDlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
static LPDRVCONFIGINFO lpdci;
switch (msg) {
case WM_INITDIALOG:
lpdci = (LPDRVCONFIGINFO)lParam;
GetCmdParam(lpdci, &nPort, &nRate);
CheckRadioButton(hDlg, P_COM1, P_COM4, P_COM1 + nPort);
CheckRadioButton(hDlg, R_4800, R_9600,
nRate == 4800 ? R_4800 : R_9600);
break;
case WM_COMMAND:
switch ((WORD)wParam) {
case IDOK:
PutCmdParam(lpdci, nPort, nRate);
EndDialog(hDlg, DRVCNF_OK);
break;
case IDCANCEL:
EndDialog(hDlg, DRVCNF_CANCEL);
break;
case P_COM1:
case P_COM2:
case P_COM3:
case P_COM4:
nPort = wParam - P_COM1;
break;
case R_4800:
nRate = 4800;
break;
case R_9600:
nRate = 9600;
break;
default:
break;
}
break;
default:
return FALSE;
break;
}
return TRUE;
}
/****************************************************************************
* @doc INTERNAL
*
* @func int | pionConfig | This puts up the configuration dialog box.
*
* @parm HWND | hwndParent | Parent window.
*
* @parm LPDRVCONFIGINFO | lpInfo | Config information from the DRV_CONFIGURE
* message.
*
* @rdesc Returns whatever was returned from the dialog box procedure.
***************************************************************************/
int PASCAL FAR pionConfig(HWND hwndParent, LPDRVCONFIGINFO lpInfo)
{
return DialogBoxParam(hInstance, MAKEINTRESOURCE(IDD_PIONCNFG), hwndParent, ConfigDlgProc,
(DWORD)lpInfo);
}