[PrintUI|NTPrint] Printing Application Utility Support
authorJames Tabor <james.tabor@reactos.org>
Wed, 13 May 2020 01:26:02 +0000 (20:26 -0500)
committerJames Tabor <james.tabor@reactos.org>
Wed, 13 May 2020 01:26:02 +0000 (20:26 -0500)
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.

12 files changed:
dll/win32/CMakeLists.txt
win32ss/printing/base/CMakeLists.txt
win32ss/printing/base/ntprint/CMakeLists.txt [new file with mode: 0644]
win32ss/printing/base/ntprint/ntprint.c [new file with mode: 0644]
win32ss/printing/base/ntprint/ntprint.rc [new file with mode: 0644]
win32ss/printing/base/ntprint/ntprint.spec [new file with mode: 0644]
win32ss/printing/base/printui/.keep [deleted file]
win32ss/printing/base/printui/CMakeLists.txt [moved from dll/win32/printui/CMakeLists.txt with 100% similarity]
win32ss/printing/base/printui/printui.c [moved from dll/win32/printui/printui.c with 100% similarity]
win32ss/printing/base/printui/printui.rc [moved from dll/win32/printui/printui.rc with 100% similarity]
win32ss/printing/base/printui/printui.spec [moved from dll/win32/printui/printui.spec with 100% similarity]
win32ss/printing/base/printui/printui_private.h [moved from dll/win32/printui/printui_private.h with 100% similarity]

index e69b50b..476aaec 100644 (file)
@@ -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)
index 25ae882..3101315 100644 (file)
@@ -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 (file)
index 0000000..f468021
--- /dev/null
@@ -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 (file)
index 0000000..1003857
--- /dev/null
@@ -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/win32ss/printing/base/ntprint/ntprint.rc b/win32ss/printing/base/ntprint/ntprint.rc
new file mode 100644 (file)
index 0000000..272f151
--- /dev/null
@@ -0,0 +1,34 @@
+/*
+ * Top level resource file for ntprint.dll
+ *
+ * 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 "winver.h"
+
+#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
+#define WINE_FILEVERSION_STR "5.1.2600.2180"
+
+#define WINE_PRODUCTVERSION      5,1,2600,2180
+#define WINE_PRODUCTVERSION_STR "5.1.2600.2180"
+
+#include "wine/wine_common_ver.rc"
diff --git a/win32ss/printing/base/ntprint/ntprint.spec b/win32ss/printing/base/ntprint/ntprint.spec
new file mode 100644 (file)
index 0000000..04e85fe
--- /dev/null
@@ -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 (file)
index e69de29..0000000