/* 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 #include #include #include #include #include "drivers.h" #include #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); } }