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.
 
 
 
 
 
 

262 lines
6.9 KiB

/** FILE: cpl.c ************ Module Header ********************************
*
* Initialization module and UPS Control Panel applet procedure.
* Additionally, this file also contains the "CPlApplet" procedure which
* complies with and services the ".CPL" protocol between the Control
* Panel main window procedure and its' applets.
*
* History:
* 12:30 on Tues 23 Apr 1991 -by- Steve Cathcart [stevecat]
* Took base code from Win 3.1 source
* 10:30 on Tues 04 Feb 1992 -by- Steve Cathcart [stevecat]
* Updated code to latest Win 3.1 sources
* 10:00 on Thur Aug 27 1992 -by- Congpa You [congpay]
* Specialize the code for UPS.
***************************************************************************/
//==========================================================================
// Include files
//==========================================================================
#include "ups.h"
#include "cpl.h"
//==========================================================================
// Local Definitions
//==========================================================================
typedef struct {
int idIcon;
int idName;
int idInfo;
int idChild;
BOOL bEnabled;
DWORD dwContext;
PSTR pszHelp;
} APPLET_INFO;
//==========================================================================
// External Declarations
//==========================================================================
/* functions */
extern INT_PTR APIENTRY UPSDlg (HWND, UINT, WPARAM, LPARAM);
extern BOOL RegisterArrowClass(HANDLE);
//==========================================================================
// Data Declarations
//==========================================================================
HANDLE hModule = NULL;
char szSetupInfPath[PATHMAX];
char szErrLS[133];
char szErrMem[133];
char szCtlPanel[30];
char szWinCom[PATHMAX]; /* Path to WIN.COM directory */
char szSystemIniPath[PATHMAX]; /* Path to SYSTEM.INI */
char szCtlIni[PATHMAX]; /* Path to CONTROL.INI */
char szCONTROLINI[] = "control.ini";
// REVIEW change to lower case.
char szSYSTEMINI[] = "SYSTEM.INI";
char szSETUPINF[] = "SETUP.INF";
DWORD dwContext = 0L;
char szControlHlp[] = "control.hlp";
UINT wHelpMessage;
char szCplApplet[] = "CPlApplet";
APPLET_INFO applets[] = {
{ UPSICON , CHILDREN , INFO , CHILD_UPS , TRUE,
IDH_CHILD_UPS , szControlHlp },
};
#define NUM_APPLETS (sizeof(applets)/sizeof(applets[0]))
//==========================================================================
// Local Function Prototypes
//==========================================================================
void RunApplet(HWND hwnd, int cmd);
//==========================================================================
// Functions
//==========================================================================
// Win32 NT Dll Initialization procedure
BOOL DllInitialize(
IN PVOID hmod,
IN ULONG ulReason,
IN PCONTEXT pctx OPTIONAL)
{
if (ulReason != DLL_PROCESS_ATTACH)
{
return TRUE;
}
else
{
hModule = hmod;
}
return TRUE;
UNREFERENCED_PARAMETER(pctx);
}
//---------------------------------------------------------------------------
BOOL InitControlPanel(HWND hwndParent)
{
OFSTRUCT os;
if (!RegisterArrowClass(hModule))
{
return FALSE;
}
LoadString (hModule, ERRMEM, szErrMem, sizeof (szErrMem));
LoadString (hModule, LSFAIL, szErrLS, sizeof (szErrLS));
LoadString (hModule, CPCAPTION, szCtlPanel, sizeof (szCtlPanel));
wsprintf (szSystemIniPath, "%s%s", (LPSTR)szWinCom, (LPSTR)szSYSTEMINI);
wsprintf (szCtlIni, "%s%s", (LPSTR)szWinCom, (LPSTR)szCONTROLINI);
if (OpenFile (szSETUPINF, &os, OF_EXIST) >= 0)
strcpy (szSetupInfPath, os.szPathName);
else
strcpy (szSetupInfPath, szSETUPINF); // not found, use this anyway?
wHelpMessage = RegisterWindowMessage("ShellHelp");
return TRUE;
UNREFERENCED_PARAMETER(hwndParent);
}
void TermControlPanel()
{
UnRegisterArrowClass (hModule);
return;
}
LONG APIENTRY CPlApplet(HWND hWnd, UINT Msg, LPARAM lParam1, LPARAM lParam2)
{
int i, count;
LPNEWCPLINFO lpCPlInfo;
LPCPLINFO lpOldCPlInfo;
static iInitCount = 0;
switch (Msg)
{
case CPL_INIT:
if (!iInitCount)
{
if (!InitControlPanel(hWnd))
return FALSE;
}
iInitCount++;
return TRUE;
case CPL_GETCOUNT:
for (i = count = 0; i < NUM_APPLETS; i++)
if (applets[i].bEnabled)
count++;
return (LONG)count;
case CPL_INQUIRE:
lpOldCPlInfo = (LPCPLINFO)lParam2;
// find the proper applet not counting those that are disabled
for (i = count = 0; i < NUM_APPLETS; i++)
{
if (applets[i].bEnabled)
{
if (count == (int)lParam1)
break;
count++;
}
}
lpOldCPlInfo->idIcon = applets[i].idIcon;
lpOldCPlInfo->idName = applets[i].idName;
lpOldCPlInfo->idInfo = applets[i].idInfo;
lpOldCPlInfo->lData = (LONG)applets[i].idChild;
return TRUE;
case CPL_NEWINQUIRE:
lpCPlInfo = (LPNEWCPLINFO)lParam2;
// find the proper applet not counting those that are disabled
for (i = count = 0; i < NUM_APPLETS; i++)
{
if (applets[i].bEnabled)
{
if (count == (int)lParam1)
break;
count++;
}
}
lpCPlInfo->hIcon = LoadIcon(hModule, MAKEINTRESOURCE(applets[i].idIcon));
LoadString(hModule, applets[i].idName, lpCPlInfo->szName, sizeof(lpCPlInfo->szName));
if (!LoadString(hModule, applets[i].idInfo, lpCPlInfo->szInfo,
sizeof(lpCPlInfo->szInfo)))
lpCPlInfo->szInfo[0] = 0;
lpCPlInfo->dwSize = sizeof(NEWCPLINFO);
lpCPlInfo->lData = (LONG)applets[i].idChild;
lpCPlInfo->dwHelpContext = applets[i].dwContext;
strcpy(lpCPlInfo->szHelpFile, applets[i].pszHelp);
return TRUE;
case CPL_DBLCLK:
dwContext = applets[(int)lParam1].dwContext;
RunApplet(hWnd, (int)lParam2);
break;
case CPL_EXIT:
iInitCount--;
if (!iInitCount)
TermControlPanel();
break;
default:
break;
}
return 0L;
}
void RunApplet(HWND hwnd, int cmd)
{
switch (cmd)
{
case CHILD_UPS:
DialogBox(hModule, MAKEINTRESOURCE(DLG_UPS), hwnd, UPSDlg);
break;
}
}
void CPHelp (HWND hWnd)
{
WinHelp (hWnd, szControlHlp, HELP_CONTEXT, dwContext);
}