https://git.reactos.org/?p=reactos.git;a=commitdiff;h=98bfe2fc89b1d3dc5a6e4…
commit 98bfe2fc89b1d3dc5a6e433a320e926f5fef4474
Author: James Tabor <james.tabor(a)reactos.org>
AuthorDate: Tue May 12 20:26:02 2020 -0500
Commit: James Tabor <james.tabor(a)reactos.org>
CommitDate: Tue May 12 20:26:02 2020 -0500
[PrintUI|NTPrint] Printing Application Utility Support
PrintUI : Move to printing base directory.
NTPrint : Import from wine.
NTPrint does have a API test program from wine, not imported at this
time.
These will be Sync/Ported to full forked.
---
dll/win32/CMakeLists.txt | 1 -
win32ss/printing/base/CMakeLists.txt | 2 +
win32ss/printing/base/ntprint/CMakeLists.txt | 15 ++
win32ss/printing/base/ntprint/ntprint.c | 156 +++++++++++++++++++++
.../printing/base/ntprint/ntprint.rc | 6 +-
win32ss/printing/base/ntprint/ntprint.spec | 35 +++++
win32ss/printing/base/printui/.keep | 0
.../printing/base}/printui/CMakeLists.txt | 0
.../printing/base}/printui/printui.c | 0
.../printing/base}/printui/printui.rc | 0
.../printing/base}/printui/printui.spec | 0
.../printing/base}/printui/printui_private.h | 0
12 files changed, 211 insertions(+), 4 deletions(-)
diff --git a/dll/win32/CMakeLists.txt b/dll/win32/CMakeLists.txt
index e69b50bc877..476aaec6fcb 100644
--- a/dll/win32/CMakeLists.txt
+++ b/dll/win32/CMakeLists.txt
@@ -157,7 +157,6 @@ add_subdirectory(olethk32)
add_subdirectory(pdh)
add_subdirectory(pidgen)
add_subdirectory(powrprof)
-add_subdirectory(printui)
add_subdirectory(profmap)
add_subdirectory(propsys)
add_subdirectory(psapi)
diff --git a/win32ss/printing/base/CMakeLists.txt b/win32ss/printing/base/CMakeLists.txt
index 25ae88295bc..3101315cff1 100644
--- a/win32ss/printing/base/CMakeLists.txt
+++ b/win32ss/printing/base/CMakeLists.txt
@@ -1,4 +1,6 @@
#add_subdirectory(printui)
+add_subdirectory(ntprint)
+add_subdirectory(printui)
add_subdirectory(spoolss)
add_subdirectory(spoolsv)
add_subdirectory(winspool)
diff --git a/win32ss/printing/base/ntprint/CMakeLists.txt
b/win32ss/printing/base/ntprint/CMakeLists.txt
new file mode 100644
index 00000000000..f468021ff70
--- /dev/null
+++ b/win32ss/printing/base/ntprint/CMakeLists.txt
@@ -0,0 +1,15 @@
+
+add_definitions(-D__WINESRC__)
+include_directories(${REACTOS_SOURCE_DIR}/sdk/include/reactos/wine)
+spec2def(ntprint.dll ntprint.spec)
+
+list(APPEND SOURCE
+ ntprint.c
+ ${CMAKE_CURRENT_BINARY_DIR}/ntprint_stubs.c
+ ${CMAKE_CURRENT_BINARY_DIR}/ntprint.def)
+
+add_library(ntprint MODULE ${SOURCE} ntprint.rc)
+set_module_type(ntprint win32dll)
+target_link_libraries(ntprint wine)
+add_importlibs(ntprint winspool msvcrt kernel32 ntdll)
+add_cd_file(TARGET ntprint DESTINATION reactos/system32 FOR all)
diff --git a/win32ss/printing/base/ntprint/ntprint.c
b/win32ss/printing/base/ntprint/ntprint.c
new file mode 100644
index 00000000000..100385725c8
--- /dev/null
+++ b/win32ss/printing/base/ntprint/ntprint.c
@@ -0,0 +1,156 @@
+/*
+ * Implementation of the Spooler Setup API (Printing)
+ *
+ * Copyright 2007 Detlef Riekenberg
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <stdarg.h>
+
+#define COBJMACROS
+
+#include "windef.h"
+#include "winbase.h"
+#include "winerror.h"
+#include "wingdi.h"
+#include "winnls.h"
+#include "winver.h"
+#include "winspool.h"
+
+#include "wine/debug.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(ntprint);
+
+typedef struct {
+ LPMONITOR_INFO_2W mi2; /* Buffer for installed Monitors */
+ DWORD installed; /* Number of installed Monitors */
+} monitorinfo_t;
+
+/*****************************************************
+ * DllMain
+ */
+BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
+{
+ TRACE("(%p, %d, %p)\n",hinstDLL, fdwReason, lpvReserved);
+
+ switch(fdwReason)
+ {
+ case DLL_WINE_PREATTACH:
+ return FALSE; /* prefer native version */
+
+ case DLL_PROCESS_ATTACH:
+ DisableThreadLibraryCalls( hinstDLL );
+ break;
+ }
+ return TRUE;
+}
+
+/*****************************************************
+ * PSetupCreateMonitorInfo [NTPRINT.@]
+ *
+ *
+ */
+
+HANDLE WINAPI PSetupCreateMonitorInfo(DWORD unknown1, WCHAR *server)
+{
+ monitorinfo_t * mi=NULL;
+ DWORD needed;
+ DWORD res;
+
+ TRACE("(%d, %s)\n", unknown1, debugstr_w(server));
+
+ mi = HeapAlloc(GetProcessHeap(), 0, sizeof(monitorinfo_t));
+ if (!mi) {
+ /* FIXME: SetLastError() needed? */
+ return NULL;
+ }
+
+ /* Get the needed size for all Monitors */
+ res = EnumMonitorsW(server, 2, NULL, 0, &needed, &mi->installed);
+ if (!res && (GetLastError() == ERROR_INSUFFICIENT_BUFFER)) {
+ mi->mi2 = HeapAlloc(GetProcessHeap(), 0, needed);
+ res = EnumMonitorsW(server, 2, (LPBYTE) mi->mi2, needed, &needed,
&mi->installed);
+ }
+
+ if (!res) {
+ HeapFree(GetProcessHeap(), 0, mi);
+ return NULL;
+ }
+
+ TRACE("=> %p (%u monitors installed)\n", mi, mi->installed);
+ return mi;
+}
+
+/*****************************************************
+ * PSetupDestroyMonitorInfo [NTPRINT.@]
+ *
+ */
+
+VOID WINAPI PSetupDestroyMonitorInfo(HANDLE monitorinfo)
+{
+ monitorinfo_t * mi = monitorinfo;
+
+ TRACE("(%p)\n", mi);
+ if (mi) {
+ if (mi->installed) HeapFree(GetProcessHeap(), 0, mi->mi2);
+ HeapFree(GetProcessHeap(), 0, mi);
+ }
+}
+
+/*****************************************************
+ * PSetupEnumMonitor [NTPRINT.@]
+ *
+ * Copy the selected Monitorname to a buffer
+ *
+ * PARAMS
+ * monitorinfo [I] HANDLE from PSetupCreateMonitorInfo
+ * index [I] Nr. of the Monitorname to copy
+ * buffer [I] Target, that receive the Monitorname
+ * psize [IO] PTR to a DWORD that hold the size of the buffer and receive
+ * the needed size, when the buffer is too small
+ *
+ * RETURNS
+ * Success: TRUE
+ * Failure: FALSE
+ *
+ * NOTES
+ * size is in Bytes on w2k and WCHAR on XP
+ *
+ */
+
+BOOL WINAPI PSetupEnumMonitor(HANDLE monitorinfo, DWORD index, LPWSTR buffer, LPDWORD
psize)
+{
+ monitorinfo_t * mi = monitorinfo;
+ LPWSTR nameW;
+ DWORD len;
+
+ TRACE("(%p, %u, %p, %p) => %d\n", mi, index, buffer, psize, psize ?
*psize : 0);
+
+ if (index < mi->installed) {
+ nameW = mi->mi2[index].pName;
+ len = lstrlenW(nameW) + 1;
+ if (len <= *psize) {
+ memcpy(buffer, nameW, len * sizeof(WCHAR));
+ TRACE("#%u: %s\n", index, debugstr_w(buffer));
+ return TRUE;
+ }
+ *psize = len;
+ SetLastError(ERROR_INSUFFICIENT_BUFFER);
+ return FALSE;
+ }
+ SetLastError(ERROR_NO_MORE_ITEMS);
+ return FALSE;
+}
diff --git a/dll/win32/printui/printui.rc b/win32ss/printing/base/ntprint/ntprint.rc
similarity index 87%
copy from dll/win32/printui/printui.rc
copy to win32ss/printing/base/ntprint/ntprint.rc
index bfbae9820a7..272f15159e6 100644
--- a/dll/win32/printui/printui.rc
+++ b/win32ss/printing/base/ntprint/ntprint.rc
@@ -1,5 +1,5 @@
/*
- * Top level resource file for printui.dll
+ * Top level resource file for ntprint.dll
*
* Copyright 2007 Detlef Riekenberg
*
@@ -21,8 +21,8 @@
#include "winver.h"
-#define WINE_FILENAME_STR "printui.dll"
-#define WINE_FILEDESCRIPTION_STR "User Interface for Printing"
+#define WINE_FILENAME_STR "ntprint.dll"
+#define WINE_FILEDESCRIPTION_STR "Spooler Setup API (Printing)"
/* Same Version as WinXP_sp2 */
#define WINE_FILEVERSION 5,1,2600,2180
diff --git a/win32ss/printing/base/ntprint/ntprint.spec
b/win32ss/printing/base/ntprint/ntprint.spec
new file mode 100644
index 00000000000..04e85fe72fc
--- /dev/null
+++ b/win32ss/printing/base/ntprint/ntprint.spec
@@ -0,0 +1,35 @@
+@ stub ClassInstall32
+@ stub PSetupAssociateICMProfiles
+@ stub PSetupBuildDriversFromPath
+@ stub PSetupCreateDrvSetupPage
+@ stdcall PSetupCreateMonitorInfo(long wstr)
+@ stub PSetupCreatePrinterDeviceInfoList
+@ stub PSetupDestroyDriverInfo3
+@ stdcall PSetupDestroyMonitorInfo(long)
+@ stub PSetupDestroyPrinterDeviceInfoList
+@ stub PSetupDestroySelectedDriverInfo
+@ stub PSetupDriverInfoFromName
+@ stdcall PSetupEnumMonitor(long long ptr ptr)
+@ stub PSetupFreeDrvField
+@ stub PSetupGetDriverInfForPrinter
+@ stub PSetupGetDriverInfo3
+@ stub PSetupGetLocalDataField
+@ stub PSetupGetPathToSearch
+@ stub PSetupGetSelectedDriverInfo
+@ stub PSetupInstallICMProfiles
+@ stub PSetupInstallMonitor
+@ stub PSetupInstallPrinterDriver
+@ stub PSetupInstallPrinterDriverFromTheWeb
+@ stub PSetupIsCompatibleDriver
+@ stub PSetupIsDriverInstalled
+@ stub PSetupIsMonitorInstalled
+@ stub PSetupIsOemDriver
+@ stub PSetupIsTheDriverFoundInInfInstalled
+@ stub PSetupKillBadUserConnections
+@ stub PSetupPreSelectDriver
+@ stub PSetupProcessPrinterAdded
+@ stub PSetupRefreshDriverList
+@ stub PSetupSelectDeviceButtons
+@ stub PSetupSelectDriver
+@ stub PSetupSetSelectDevTitleAndInstructions
+@ stub PSetupThisPlatform
diff --git a/win32ss/printing/base/printui/.keep b/win32ss/printing/base/printui/.keep
deleted file mode 100644
index e69de29bb2d..00000000000
diff --git a/dll/win32/printui/CMakeLists.txt
b/win32ss/printing/base/printui/CMakeLists.txt
similarity index 100%
rename from dll/win32/printui/CMakeLists.txt
rename to win32ss/printing/base/printui/CMakeLists.txt
diff --git a/dll/win32/printui/printui.c b/win32ss/printing/base/printui/printui.c
similarity index 100%
rename from dll/win32/printui/printui.c
rename to win32ss/printing/base/printui/printui.c
diff --git a/dll/win32/printui/printui.rc b/win32ss/printing/base/printui/printui.rc
similarity index 100%
rename from dll/win32/printui/printui.rc
rename to win32ss/printing/base/printui/printui.rc
diff --git a/dll/win32/printui/printui.spec b/win32ss/printing/base/printui/printui.spec
similarity index 100%
rename from dll/win32/printui/printui.spec
rename to win32ss/printing/base/printui/printui.spec
diff --git a/dll/win32/printui/printui_private.h
b/win32ss/printing/base/printui/printui_private.h
similarity index 100%
rename from dll/win32/printui/printui_private.h
rename to win32ss/printing/base/printui/printui_private.h