263 lines
6.9 KiB
C
263 lines
6.9 KiB
C
/* ADD.C
|
|
**
|
|
** Copyright (C) Microsoft, 1990, All Rights Reserved.
|
|
**
|
|
** Multimedia Control Panel Applet for removing
|
|
** device drivers. See the ispec doc DRIVERS.DOC for more information.
|
|
**
|
|
** This file deals with the case where an OEM driver being installed.
|
|
**
|
|
** History:
|
|
**
|
|
** Thu Nov 1 1991 -by- Sanjaya
|
|
** Created. Originally part of drivers.c
|
|
*/
|
|
|
|
#include <windows.h>
|
|
#include <mmsystem.h>
|
|
#include <memory.h>
|
|
#include <string.h>
|
|
#include <cpl.h>
|
|
|
|
#include "drivers.h"
|
|
#include <cphelp.h>
|
|
#include "sulib.h"
|
|
extern PINF pinfOldDefault;
|
|
extern BOOL bBadOemSetup;
|
|
TCHAR *szFilter[] = {TEXT("Inf Files(*.inf)"), TEXT("*.inf"), TEXT("Drv Files(*.drv)"), TEXT("*.drv"), TEXT("")};
|
|
|
|
BOOL GetDir (HWND);
|
|
void BrowseDlg (HWND, int);
|
|
|
|
/* AddDriversDlg
|
|
*
|
|
* Returns 2 if dialog needs to be redrawn
|
|
* Returns 1 if the oem file has been succesfully located
|
|
* Returns 0 if Cancel has been pressed
|
|
*/
|
|
|
|
INT_PTR AddDriversDlg(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
|
|
{
|
|
switch (message)
|
|
{
|
|
case WM_INITDIALOG:
|
|
|
|
SetDlgItemText(hDlg, ID_TEXT, (LPTSTR)szUnlisted);
|
|
SetDlgItemText(hDlg, ID_EDIT, (LPTSTR)szDirOfSrc);
|
|
return(TRUE);
|
|
|
|
case WM_COMMAND:
|
|
switch(LOWORD(wParam))
|
|
{
|
|
case IDOK:
|
|
if (GetDir(hDlg))
|
|
{
|
|
DialogBox(myInstance, MAKEINTRESOURCE(DLG_UPDATE),
|
|
GetParent(hDlg), AddUnlistedDlg);
|
|
break;
|
|
} else {
|
|
EndDialog(hDlg, 2);
|
|
}
|
|
break;
|
|
|
|
case IDCANCEL:
|
|
EndDialog(hDlg, 0);
|
|
return(TRUE);
|
|
|
|
case IDS_BROWSE:
|
|
lstrcpy(szDrv, szOemInf);
|
|
BrowseDlg(hDlg, 1);
|
|
break;
|
|
|
|
case IDH_DLG_INSERT_DISK:
|
|
goto DoHelp;
|
|
}
|
|
break;
|
|
|
|
default:
|
|
if (message == wHelpMessage) {
|
|
DoHelp:
|
|
WinHelp(hDlg, szDriversHlp, HELP_CONTEXT, IDH_DLG_INSERT_DISK);
|
|
return TRUE;
|
|
} else
|
|
return FALSE;
|
|
|
|
}
|
|
return (FALSE); /* Didn't process a message */
|
|
}
|
|
|
|
|
|
BOOL GetDir(HWND hDlg)
|
|
{
|
|
LPTSTR pstr;
|
|
OFSTRUCT of;
|
|
|
|
wsStartWait();
|
|
|
|
/*
|
|
* Test the edit box for a proper path
|
|
* and look for the oemsetup.inf
|
|
* file. If we don't find it , highlight the
|
|
* text in the edit box and bring up a dialog box
|
|
*/
|
|
|
|
GetDlgItemText( hDlg, ID_EDIT, szDirOfSrc, MAX_PATH);
|
|
RemoveSpaces(szFullPath, szDirOfSrc);
|
|
lstrcpy(szDirOfSrc, szFullPath);
|
|
for (pstr = szFullPath;*pstr;pstr++);
|
|
if (*(pstr-1) != TEXT('\\'))
|
|
*pstr++ = TEXT('\\');
|
|
|
|
*pstr = TEXT('\0');
|
|
|
|
lstrcpy(szDiskPath, szFullPath);
|
|
|
|
/*
|
|
* Look for an oemsetup.inf
|
|
* If you can't find it return false
|
|
*
|
|
*/
|
|
|
|
lstrcpy(pstr, szOemInf);
|
|
|
|
if ((HFILE)HandleToUlong(CreateFile(szFullPath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL)) == -1)
|
|
{
|
|
SendDlgItemMessage(hDlg, ID_EDIT, EM_SETSEL, 0, -1L);
|
|
wsEndWait();
|
|
return (FALSE);
|
|
}
|
|
|
|
/*
|
|
* Change the default inf to this new oemsetup.inf
|
|
* Discard the value of the previous .inf, since it might
|
|
* just be another set of oem drivers.
|
|
*/
|
|
|
|
if (bBadOemSetup)
|
|
infSetDefault(infOpen(szFullPath));
|
|
else
|
|
pinfOldDefault = infSetDefault(infOpen(szFullPath));
|
|
EndDialog(hDlg, 1);
|
|
wsEndWait();
|
|
return(TRUE);
|
|
}
|
|
|
|
|
|
/*
|
|
* Hooks into common dialog to show only directories
|
|
*/
|
|
|
|
UINT_PTR CALLBACK AddFileHookProc(HWND hDlg, UINT iMessage,
|
|
WPARAM wParam, LPARAM lParam)
|
|
{
|
|
TCHAR szTemp[200];
|
|
HWND hTemp;
|
|
|
|
switch (iMessage)
|
|
{
|
|
case WM_INITDIALOG:
|
|
|
|
GetDlgItemText(((LPOPENFILENAME)lParam)->hwndOwner, ID_TEXT,
|
|
szTemp, sizeof(szTemp)/sizeof(TCHAR));
|
|
SetDlgItemText(hDlg, ctlLast+1, szTemp);
|
|
|
|
goto PostMyMessage;
|
|
|
|
case WM_COMMAND:
|
|
|
|
switch (LOWORD(wParam))
|
|
{
|
|
case lst2:
|
|
case cmb2:
|
|
case IDOK:
|
|
|
|
PostMyMessage:
|
|
PostMessage(hDlg, WM_COMMAND, ctlLast+2, 0L);
|
|
break;
|
|
|
|
case IDH_DLG_BROWSE:
|
|
goto DoHelp;
|
|
|
|
case ctlLast+2:
|
|
if (bFindOEM)
|
|
{
|
|
if (SendMessage(hTemp=GetDlgItem(hDlg, lst1), LB_GETCOUNT,
|
|
0, 0L))
|
|
{
|
|
SendMessage(hTemp, LB_SETCURSEL, 0, 0L);
|
|
SendMessage(hDlg, WM_COMMAND, MAKEWPARAM(lst1, LBN_SELCHANGE),
|
|
(LONG_PTR)hTemp);
|
|
break;
|
|
}
|
|
}
|
|
SetDlgItemText(hDlg, edt1, szDrv);
|
|
break;
|
|
}
|
|
break;
|
|
|
|
default:
|
|
|
|
if (iMessage == wHelpMessage)
|
|
{
|
|
DoHelp:
|
|
WinHelp(hDlg, szDriversHlp, HELP_CONTEXT, IDH_DLG_BROWSE);
|
|
return(TRUE);
|
|
}
|
|
}
|
|
|
|
return FALSE; // commdlg, do your thing
|
|
}
|
|
|
|
|
|
/*
|
|
* Function : BrowseDlg
|
|
*
|
|
* Call the GetOpenFileName dialog to open a file
|
|
*
|
|
* Parameters :
|
|
*
|
|
* hDlg : Parent Dialog box
|
|
*
|
|
* iIndex : Index into szFilter to determine which filter(s) to use
|
|
*/
|
|
|
|
|
|
void BrowseDlg(HWND hDlg, int iIndex)
|
|
{
|
|
OPENFILENAME OpenFileName;
|
|
TCHAR szPath[MAX_PATH];
|
|
TCHAR szFile[MAX_PATH];
|
|
|
|
*szPath = TEXT('\0');
|
|
*szFile = TEXT('\0');
|
|
OpenFileName.lStructSize = sizeof(OPENFILENAME);
|
|
OpenFileName.hwndOwner = hDlg;
|
|
OpenFileName.hInstance = myInstance;
|
|
OpenFileName.lpstrFilter = szFilter[0];
|
|
OpenFileName.lpstrCustomFilter = NULL;
|
|
OpenFileName.nMaxCustFilter = 0;
|
|
OpenFileName.nFilterIndex = iIndex;
|
|
OpenFileName.lpstrFile = (LPTSTR)szPath;
|
|
OpenFileName.nMaxFile = sizeof(szPath) / sizeof(TCHAR);
|
|
OpenFileName.lpstrFileTitle = szFile;
|
|
OpenFileName.nMaxFileTitle = sizeof(szFile) / sizeof(TCHAR);
|
|
OpenFileName.lpstrInitialDir = NULL;
|
|
OpenFileName.lpstrTitle = NULL;
|
|
OpenFileName.Flags = OFN_HIDEREADONLY | OFN_ENABLEHOOK |
|
|
/* OFN_FILEMUSTEXIST | */ OFN_ENABLETEMPLATE | OFN_NOCHANGEDIR |
|
|
OFN_SHOWHELP;
|
|
OpenFileName.lCustData = (LONG_PTR)hDlg;
|
|
OpenFileName.lpfnHook = AddFileHookProc;
|
|
|
|
OpenFileName.lpTemplateName = (LPTSTR)MAKEINTRESOURCE(DLG_BROWSE);
|
|
OpenFileName.nFileOffset = 0;
|
|
OpenFileName.nFileExtension = 0;
|
|
OpenFileName.lpstrDefExt = NULL;
|
|
if (GetOpenFileName(&OpenFileName))
|
|
{
|
|
UpdateWindow(hDlg); // force buttons to repaint
|
|
szPath[OpenFileName.nFileOffset] = TEXT('\0');
|
|
SetDlgItemText(hDlg, ID_EDIT, szPath);
|
|
}
|
|
}
|