mirror of https://github.com/tongzx/nt5src
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
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);
|
|
}
|
|
|
|
|