|
|
//*********************************************************************
//* Microsoft Windows **
//* Copyright(c) Microsoft Corp., 1993 **
//*********************************************************************
#include "admincfg.h"
BOOL fInfLoaded = FALSE;
BOOL OpenTemplateDlg(HWND hWnd,TCHAR * szFilename,UINT cbFileName);
BOOL GetATemplateFile(HWND hWnd) { TCHAR szTmpFilename[MAX_PATH+1];
// user cancelled or didn't select a file
if (!OpenTemplateDlg(hWnd,szTmpFilename,ARRAYSIZE(szTmpFilename))) return FALSE;
SendDlgItemMessage(hWnd,IDD_TEMPLATELIST,LB_ADDSTRING,0,(LPARAM) szTmpFilename);
return TRUE; }
UINT LoadTemplatesFromDlg(HWND hWnd) { UINT uRet; TCHAR szFilename[MAX_PATH+1]; UINT i=0; DWORD dwUsed, dwSize;
UnloadTemplates(); // unload previous files, if any
PrepareToLoadTemplates();
while (LB_ERR != SendDlgItemMessage(hWnd,IDD_TEMPLATELIST,LB_GETTEXT, i,(LPARAM) szFilename)) {
uRet = LoadTemplateFile(hWnd,szFilename);
if (uRet != ERROR_SUCCESS) { if (uRet != ERROR_ALREADY_DISPLAYED) { DisplayStandardError(hWnd,szFilename,IDS_ErrOPENTEMPLATE,uRet); }
return uRet; }
i++; }
// Fill up the template file buffer.
i=0; dwUsed = 0; while (LB_ERR != SendDlgItemMessage(hWnd,IDD_TEMPLATELIST,LB_GETTEXT, i,(LPARAM) szFilename)) { dwSize = lstrlen(szFilename)+1; if (!(pbufTemplates=ResizeBuffer(pbufTemplates,hBufTemplates,dwUsed+dwSize+4,&dwBufTemplates))) return ERROR_NOT_ENOUGH_MEMORY;
lstrcpy(pbufTemplates+dwUsed,szFilename); dwUsed += dwSize; i++; }
// doubly null-terminate the buffer... safe to do this because we
// tacked on the extra "+4" in the ResizeBuffer calls above
*(pbufTemplates+dwUsed) = TEXT('\0');
return ERROR_SUCCESS; }
UINT LoadTemplates(HWND hWnd) { UINT uRet; TCHAR *szFilename; UINT i=0;
if (!(*pbufTemplates)) return ERROR_FILE_NOT_FOUND; //Nothing to load.
UnloadTemplates(); // unload previous file, if any
PrepareToLoadTemplates();
szFilename = pbufTemplates; while (*szFilename) { uRet = LoadTemplateFile(hWnd,szFilename);
if (uRet != ERROR_SUCCESS) { if (uRet != ERROR_ALREADY_DISPLAYED) { DisplayStandardError(hWnd,szFilename,IDS_ErrOPENTEMPLATE,uRet); }
return uRet; } szFilename += lstrlen(szFilename)+1; }
return ERROR_SUCCESS; }
BOOL OpenTemplateDlg(HWND hWnd,TCHAR * szFilename,UINT cbFilename) { OPENFILENAME ofn; TCHAR szFilter[SMALLBUF]; TCHAR szOpenInfTitle[SMALLBUF]; lstrcpy(szFilename,szNull); LoadSz(IDS_InfOPENTITLE,szOpenInfTitle,ARRAYSIZE(szOpenInfTitle));
// have to load the openfile filter in 2 stages, because the string
// contains a terminating character and LoadString won't load the
// whole thing in one go
memset(szFilter,0,(ARRAYSIZE(szFilter) * sizeof(TCHAR))); LoadSz(IDS_InfOPENFILTER1,szFilter,ARRAYSIZE(szFilter)); LoadSz(IDS_InfOPENFILTER2,szFilter+lstrlen(szFilter)+1,ARRAYSIZE(szFilter)- (lstrlen(szFilter)-1)); memset(&ofn,0,sizeof(ofn)); ofn.lStructSize = sizeof(ofn); ofn.hwndOwner = hWnd; ofn.hInstance = ghInst; ofn.lpstrFilter = szFilter; ofn.lpstrFile = szFilename; ofn.nMaxFile = cbFilename; ofn.lpstrTitle = szOpenInfTitle; ofn.Flags = OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST | OFN_SHAREAWARE | OFN_HIDEREADONLY;
return GetOpenFileName(&ofn); }
UINT PrepareToLoadTemplates() { gClassList.nUserDataItems = 0; gClassList.nMachineDataItems = 0;
if (!InitializeRootTables()) return ERROR_NOT_ENOUGH_MEMORY;
return ERROR_SUCCESS; }
UINT LoadTemplateFile(HWND hWnd,TCHAR * szFilename) { HANDLE hFile; UINT uRet; TCHAR szStatusTextOld[255]; TCHAR szStatusText[SMALLBUF+MAX_PATH+1];
// open the specified file
if ((hFile = CreateFile(szFilename,GENERIC_READ,FILE_SHARE_READ, NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL)) == INVALID_HANDLE_VALUE) { #ifdef DEBUG
wsprintf(szDebugOut,TEXT("LoadTemplateFile: CreateFile returned %lu\r\n"), GetLastError()); OutputDebugString(szDebugOut); #endif
return (UINT) GetLastError(); }
// save old status bar text
GetStatusText(szStatusTextOld,ARRAYSIZE(szStatusTextOld));
// set status bar text a la "loading template file <name>..."
wsprintf(szStatusText,LoadSz(IDS_LOADINGTEMPLATE,szSmallBuf, ARRAYSIZE(szSmallBuf)),szFilename); SetStatusText(szStatusText);
uRet=ParseTemplateFile(hWnd,hFile,szFilename); SetStatusText(szStatusTextOld); CloseHandle(hFile);
if (uRet != ERROR_SUCCESS) FreeRootTables(); else { fInfLoaded = TRUE; dwAppState |= AS_CANHAVEDOCUMENT; } return uRet; }
VOID UnloadTemplates(VOID) { if (fInfLoaded) { FreeRootTables(); fInfLoaded = FALSE; dwAppState &= ~AS_CANHAVEDOCUMENT; } }
VOID EnableMainMenuItems(HWND hwndApp,BOOL fEnable) { HMENU hMenu = GetMenu(hwndApp); UINT uFlags = MF_BYCOMMAND | (fEnable ? MF_ENABLED : MF_DISABLED);
EnableMenuItem(GetMenu(hwndMain),IDM_NEW,uFlags); EnableMenuItem(GetMenu(hwndMain),IDM_OPEN,uFlags);
}
/*******************************************************************
NAME: GetDefaultTemplateFilename
SYNOPSIS: Builds a default .adm path and filename to look for
NOTES: Fills szFilename with "<windows dir>\INF\ADMINCFG.ADF". Text is loaded from resources since file and directory names are localizable.
********************************************************************/ DWORD GetDefaultTemplateFilename(HWND hWnd,TCHAR * pszFilename,UINT cbFileName) { TCHAR szFileName[MAX_PATH] = {0}; UINT cchFileName; LPTSTR lpEnd;
//
// Load the common adm file
//
if (!GetWindowsDirectory(szFileName,MAX_PATH)) { return 0; }
if (lstrlen (szFileName) > (MAX_PATH - 20)) { *pszFilename = TEXT('\0'); return 0; }
lstrcat(szFileName,szSlash); lstrcat(szFileName,LoadSz(IDS_INFDIR,szSmallBuf,ARRAYSIZE(szSmallBuf))); lstrcat(szFileName,szSlash); lstrcat(szFileName,LoadSz(IDS_DEF_COMMONNAME,szSmallBuf,ARRAYSIZE(szSmallBuf)));
cchFileName = lstrlen (szFileName) + 1;
if (cchFileName <= cbFileName) { lstrcpy (pszFilename, szFileName); lpEnd = pszFilename + lstrlen (pszFilename) + 1; } else { *pszFilename = TEXT('\0'); return 0; }
//
// Add on the base adm filename
//
if (!GetWindowsDirectory(szFileName,MAX_PATH)) { return 0; }
lstrcat(szFileName,szSlash); lstrcat(szFileName,LoadSz(IDS_INFDIR,szSmallBuf,ARRAYSIZE(szSmallBuf))); lstrcat(szFileName,szSlash);
if (g_bWinnt) { lstrcat(szFileName,LoadSz(IDS_DEF_NT_INFNAME,szSmallBuf,ARRAYSIZE(szSmallBuf))); } else { lstrcat(szFileName,LoadSz(IDS_DEF_INFNAME,szSmallBuf,ARRAYSIZE(szSmallBuf))); }
cchFileName += lstrlen (szFileName) + 1;
if (cchFileName < cbFileName) { lstrcat (lpEnd, szFileName); }
return (cchFileName); }
|