|
|
/*****************************************************************************\
* MODULE: wpnpin32.cxx * * Entry/Exit routines for the library. * * Routines * -------- * PrintUIEntryW * PrintUIEntryA * * * Copyright (C) 1997-1998 Hewlett-Packard Company. * Copyright (C) 1997-1998 Microsoft Corporation. * * History: * 10-Oct-1997 GFS Initial checkin * 23-Oct-1997 GFS Modified PrintUIEntry to PrintUIEntryW * 22-Jun-1998 CHW Cleaned * \*****************************************************************************/
#include "libpriv.h"
/*****************************************************************************\
* PrintUIEntryW (Unicode) * * \*****************************************************************************/ DLLEXPORT DWORD WINAPI PrintUIEntryW( HWND hWnd, HINSTANCE hInstance, LPCWSTR lpwszCmdDat, int nShow) { DWORD dwRet; int cbSize = 0; LPSTR lpszCmdDat = NULL;
cbSize = WideCharToMultiByte(CP_ACP, 0, lpwszCmdDat, -1, lpszCmdDat, cbSize, NULL, NULL);
if (lpszCmdDat = (LPSTR)memAlloc(cbSize)) { if (WideCharToMultiByte(CP_ACP, 0, lpwszCmdDat, -1, lpszCmdDat, cbSize, NULL, NULL)) {
dwRet = PrintUIEntryA(hWnd, hInstance, lpszCmdDat, nShow);
} else {
dwRet = E_FAIL; }
memFree(lpszCmdDat, cbSize);
} else {
dwRet = ERROR_OUTOFMEMORY; }
// Set lasterror and return error.
//
SetLastError(dwRet);
return dwRet; }
/*****************************************************************************\
* PrintUIEntryA (Ansi) * * \*****************************************************************************/ DLLEXPORT DWORD WINAPI PrintUIEntryA( HWND hWnd, HINSTANCE hInstance, LPCSTR lpszCmdDat, int nShow) { DWORD dwResult; UINT idTxt; UINT fMB; int nArgs; DWORD dwRet; LPSI lpsi; TCHAR *pszCap = NULL; INT cbStrLength = 0;
// lop off the offending '@' at beginning of name.
//
lpszCmdDat++;
// Create a SETUPINFO structure and proceed to the
// installation.
//
if (lpsi = (LPSI)memAlloc(sizeof(SETUPINFO))) {
// Parse command-line args into the (lpsi) structure. The
// return of this function will return the number of arguments
// encountered.
//
nArgs = GetCommandLineArgs(lpsi, lpszCmdDat);
// Add the printer. This launches the whole process.
//
dwResult = (nArgs == 8 ? AddOnePrinter(lpsi, hWnd) : RET_INVALID_DAT_FILE);
cbStrLength = lstrlen( lpsi->szFriendly ) + 1; pszCap = (TCHAR *)memAlloc( cbStrLength * sizeof(TCHAR) ); if (pszCap) { if (cbStrLength > 1) { // Put the friendly-name as our caption.
//
lstrcpy( pszCap, lpsi->szFriendly ); *(pszCap + lstrlen(pszCap) * sizeof(TCHAR)) = TEXT('\0'); } else { *pszCap = TEXT('\0'); } }
// Clean up memory not cleaned up in AddPrinter
//
memFree(lpsi, sizeof(SETUPINFO));
lpsi = NULL;
} else {
if (g_szPrinter) { cbStrLength = lstrlen(g_szPrinter); } cbStrLength += 1; pszCap = memAlloc(cbStrLength * sizeof(TCHAR)); if (pszCap) { if (cbStrLength > 1) { lstrcpy(pszCap, g_szPrinter); } else { *pszCap = TEXT('\0'); } } dwResult = RET_ALLOC_ERR; }
// This what we'll return to the caller.
//
dwRet = (dwResult == RET_OK ? ERROR_SUCCESS : E_FAIL);
// Give the caller a message indicating the status of the
// printer install.
//
switch (dwResult) {
case RET_OK: idTxt = IDS_OK; fMB = MB_OK | MB_ICONASTERISK; break;
case RET_ALLOC_ERR: case RET_DRIVER_NODE_ERROR: idTxt = IDS_ALLOC_ERR; fMB = MB_OK | MB_ICONEXCLAMATION; break;
case RET_INVALID_INFFILE: case RET_SECT_NOT_FOUND: case RET_INVALID_PRINTER_DRIVER: case RET_INVALID_DLL: case RET_DRIVER_NOT_FOUND: case RET_DRIVER_FOUND: idTxt = IDS_INVALID_INFFILE; fMB = MB_OK | MB_ICONEXCLAMATION; break;
case RET_NO_UNIQUE_NAME: idTxt = IDS_NO_UNIQUE_NAME; fMB = MB_OK | MB_ICONSTOP; break;
case RET_USER_CANCEL: idTxt = IDS_USER_CANCEL; fMB = MB_OK | MB_ICONEXCLAMATION; break;
case RET_FILE_COPY_ERROR: idTxt = IDS_FILE_COPY_ERROR; fMB = MB_OK | MB_ICONHAND; break;
case RET_ADD_PRINTER_ERROR: idTxt = IDS_ADD_PRINTER_ERROR; fMB = MB_OK | MB_ICONERROR; break;
case RET_BROWSE_ERROR: idTxt = IDS_BROWSE_ERR; fMB = MB_OK | MB_ICONERROR; break;
case RET_INVALID_DAT_FILE: idTxt = IDS_INVALID_DAT_FILE; fMB = MB_OK | MB_ICONERROR; break;
default: idTxt = IDS_DEFAULT_ERROR; fMB = MB_OK | MB_ICONERROR; break; }
// Display the messagebox.
//
prvMsgBox(hWnd, szCap, idTxt, fMB);
if (pszCap) { memFree( pszCap, cbStrLength * sizeof(TCHAR) ); }
return dwRet; }
|