From: Dmitry Timoshkov dmitry@baikal.ru
Signed-off-by: Dmitry Timoshkov dmitry@baikal.ru --- dlls/prntvpt/ticket.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/dlls/prntvpt/ticket.c b/dlls/prntvpt/ticket.c index bd18544404b..a2c1f446d75 100644 --- a/dlls/prntvpt/ticket.c +++ b/dlls/prntvpt/ticket.c @@ -650,13 +650,14 @@ static void ticket_to_devmode(const struct ticket *ticket, DEVMODEW *dm)
dm->dmSize = sizeof(*dm); dm->dmFields = DM_ORIENTATION | DM_PAPERSIZE | DM_PAPERLENGTH | DM_PAPERWIDTH | DM_SCALE | - DM_COPIES | DM_COLOR | DM_PRINTQUALITY | DM_YRESOLUTION | DM_COLLATE; + DM_COPIES | DM_DEFAULTSOURCE | DM_COLOR | DM_PRINTQUALITY | DM_YRESOLUTION | DM_COLLATE; dm->dmOrientation = ticket->page.orientation; dm->dmPaperSize = ticket->page.media.paper; dm->dmPaperWidth = ticket->page.media.size.width / 100; dm->dmPaperLength = ticket->page.media.size.height / 100; dm->dmScale = ticket->page.scaling; dm->dmCopies = ticket->job.copies; + dm->dmDefaultSource = ticket->job.input_bin; dm->dmColor = ticket->page.color; dm->dmPrintQuality = ticket->page.resolution.x; dm->dmYResolution = ticket->page.resolution.y; @@ -677,6 +678,8 @@ static void devmode_to_ticket(const DEVMODEW *dm, struct ticket *ticket) ticket->page.scaling = dm->dmScale; if (dm->dmFields & DM_COPIES) ticket->job.copies = dm->dmCopies; + if (dm->dmFields & DM_DEFAULTSOURCE) + ticket->job.input_bin = dm->dmDefaultSource; if (dm->dmFields & DM_COLOR) ticket->page.color = dm->dmColor; if (dm->dmFields & DM_PRINTQUALITY)
From: Dmitry Timoshkov dmitry@baikal.ru
Signed-off-by: Dmitry Timoshkov dmitry@baikal.ru --- dlls/prntvpt/prntvpt.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/dlls/prntvpt/prntvpt.spec b/dlls/prntvpt/prntvpt.spec index bc0fe2a88b6..f0ac0d19850 100644 --- a/dlls/prntvpt/prntvpt.spec +++ b/dlls/prntvpt/prntvpt.spec @@ -2,7 +2,7 @@ @ stdcall PTOpenProvider(wstr long ptr) @ stdcall PTOpenProviderEx(wstr long long ptr ptr) @ stdcall PTCloseProvider(ptr) -@ stub BindPTProviderThunk +@ stdcall BindPTProviderThunk(wstr long long ptr ptr) PTOpenProviderEx @ stdcall PTGetPrintCapabilities(ptr ptr ptr ptr) @ stdcall PTMergeAndValidatePrintTicket(ptr ptr ptr long ptr ptr) @ stdcall PTConvertPrintTicketToDevMode(ptr ptr long long ptr ptr ptr)
From: Dmitry Timoshkov dmitry@baikal.ru
Signed-off-by: Dmitry Timoshkov dmitry@baikal.ru --- dlls/prntvpt/prntvpt.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/dlls/prntvpt/prntvpt.spec b/dlls/prntvpt/prntvpt.spec index f0ac0d19850..7bc2163082a 100644 --- a/dlls/prntvpt/prntvpt.spec +++ b/dlls/prntvpt/prntvpt.spec @@ -24,4 +24,4 @@ @ stub GetSchemaVersionThunk @ stub MergeAndValidatePrintTicketThunk2 @ stub MergeAndValidatePrintTicketThunk -@ stub UnbindPTProviderThunk +@ stdcall UnbindPTProviderThunk(ptr) PTCloseProvider
From: Dmitry Timoshkov dmitry@baikal.ru
Signed-off-by: Dmitry Timoshkov dmitry@baikal.ru --- dlls/prntvpt/prntvpt.spec | 2 +- dlls/prntvpt/ticket.c | 41 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 1 deletion(-)
diff --git a/dlls/prntvpt/prntvpt.spec b/dlls/prntvpt/prntvpt.spec index 7bc2163082a..4e8ed25dbc0 100644 --- a/dlls/prntvpt/prntvpt.spec +++ b/dlls/prntvpt/prntvpt.spec @@ -8,7 +8,7 @@ @ stdcall PTConvertPrintTicketToDevMode(ptr ptr long long ptr ptr ptr) @ stdcall PTConvertDevModeToPrintTicket(ptr long ptr long ptr) @ stdcall PTReleaseMemory(ptr) -@ stub ConvertDevModeToPrintTicketThunk2 +@ stdcall ConvertDevModeToPrintTicketThunk2(ptr ptr long long ptr ptr) @ stub ConvertDevModeToPrintTicketThunk @ stub ConvertPrintTicketToDevModeThunk2 @ stub ConvertPrintTicketToDevModeThunk diff --git a/dlls/prntvpt/ticket.c b/dlls/prntvpt/ticket.c index a2c1f446d75..9989b6edf70 100644 --- a/dlls/prntvpt/ticket.c +++ b/dlls/prntvpt/ticket.c @@ -1237,6 +1237,47 @@ HRESULT WINAPI PTConvertDevModeToPrintTicket(HPTPROVIDER provider, ULONG size, P return write_ticket(stream, &ticket, scope); }
+HRESULT WINAPI ConvertDevModeToPrintTicketThunk2(HPTPROVIDER provider, BYTE *dm, ULONG size, + EPrintTicketScope scope, BYTE **ticket, INT *length) +{ + HRESULT hr; + IStream *stream; + + TRACE("%p,%p,%lu,%d,%p,%p\n", provider, dm, size, scope, ticket, length); + + if (!is_valid_provider(provider) || !dm || !ticket || !length) + return E_INVALIDARG; + + hr = CreateStreamOnHGlobal(0, TRUE, &stream); + if (hr != S_OK) return hr; + + hr = PTConvertDevModeToPrintTicket(provider, size, (DEVMODEW *)dm, scope, stream); + if (hr == S_OK) + { + HGLOBAL hmem; + DWORD mem_size; + + hr = GetHGlobalFromStream(stream, &hmem); + if (hr == S_OK) + { + mem_size = GlobalSize(hmem); + *ticket = CoTaskMemAlloc(mem_size); + if (*ticket) + { + BYTE *p = GlobalLock(hmem); + memcpy(*ticket, p, mem_size); + GlobalUnlock(hmem); + *length = mem_size; + } + else + hr = E_OUTOFMEMORY; + } + } + + IStream_Release(stream); + return hr; +} + HRESULT WINAPI PTMergeAndValidatePrintTicket(HPTPROVIDER provider, IStream *base, IStream *delta, EPrintTicketScope scope, IStream *result, BSTR *error) {
From: Dmitry Timoshkov dmitry@baikal.ru
Signed-off-by: Dmitry Timoshkov dmitry@baikal.ru --- dlls/prntvpt/prntvpt.spec | 2 +- dlls/prntvpt/ticket.c | 51 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+), 1 deletion(-)
diff --git a/dlls/prntvpt/prntvpt.spec b/dlls/prntvpt/prntvpt.spec index 4e8ed25dbc0..7e8ff150491 100644 --- a/dlls/prntvpt/prntvpt.spec +++ b/dlls/prntvpt/prntvpt.spec @@ -19,7 +19,7 @@ @ stdcall -private DllUnregisterServer() @ stub GetDeviceDefaultPrintTicketThunk @ stub GetDeviceNamespacesThunk -@ stub GetPrintCapabilitiesThunk2 +@ stdcall GetPrintCapabilitiesThunk2(ptr ptr long ptr ptr ptr) @ stub GetPrintCapabilitiesThunk @ stub GetSchemaVersionThunk @ stub MergeAndValidatePrintTicketThunk2 diff --git a/dlls/prntvpt/ticket.c b/dlls/prntvpt/ticket.c index 9989b6edf70..253ea4ce0a5 100644 --- a/dlls/prntvpt/ticket.c +++ b/dlls/prntvpt/ticket.c @@ -1576,3 +1576,54 @@ HRESULT WINAPI PTGetPrintCapabilities(HPTPROVIDER provider, IStream *stream, ISt
return write_print_capabilities(prov->name, caps); } + +HRESULT WINAPI GetPrintCapabilitiesThunk2(HPTPROVIDER provider, BYTE *ticket, INT ticket_size, + BYTE **print_caps, INT *print_caps_length, BSTR *error) +{ + static const LARGE_INTEGER zero; + HRESULT hr; + IStream *stream, *caps = NULL; + HGLOBAL hmem; + DWORD mem_size; + + TRACE("%p,%p,%d,%p,%p,%p\n", provider, ticket, ticket_size, print_caps, print_caps_length, error); + + if (!is_valid_provider(provider) || !ticket || !print_caps || !print_caps_length) + return E_INVALIDARG; + + hr = CreateStreamOnHGlobal(0, TRUE, &stream); + if (hr != S_OK) return hr; + + hr = IStream_Write(stream, ticket, ticket_size, NULL); + if (hr != S_OK) goto fail; + + IStream_Seek(stream, zero, STREAM_SEEK_SET, NULL); + + hr = CreateStreamOnHGlobal(0, TRUE, &caps); + if (hr != S_OK) goto fail; + + hr = PTGetPrintCapabilities(provider, stream, caps, error); + if (hr != S_OK) goto fail; + + hr = GetHGlobalFromStream(caps, &hmem); + if (hr == S_OK) + { + mem_size = GlobalSize(hmem); + *print_caps = CoTaskMemAlloc(mem_size); + if (*print_caps) + { + BYTE *p = GlobalLock(hmem); + memcpy(*print_caps, p, mem_size); + GlobalUnlock(hmem); + *print_caps_length = mem_size; + } + else + hr = E_OUTOFMEMORY; + } + +fail: + IStream_Release(stream); + if (caps) IStream_Release(caps); + + return hr; +}
From: Dmitry Timoshkov dmitry@baikal.ru
Signed-off-by: Dmitry Timoshkov dmitry@baikal.ru --- dlls/prntvpt/prntvpt.spec | 2 +- dlls/prntvpt/ticket.c | 25 +++++++++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-)
diff --git a/dlls/prntvpt/prntvpt.spec b/dlls/prntvpt/prntvpt.spec index 7e8ff150491..93d4688d086 100644 --- a/dlls/prntvpt/prntvpt.spec +++ b/dlls/prntvpt/prntvpt.spec @@ -10,7 +10,7 @@ @ stdcall PTReleaseMemory(ptr) @ stdcall ConvertDevModeToPrintTicketThunk2(ptr ptr long long ptr ptr) @ stub ConvertDevModeToPrintTicketThunk -@ stub ConvertPrintTicketToDevModeThunk2 +@ stdcall ConvertPrintTicketToDevModeThunk2(ptr ptr long long long ptr ptr ptr) @ stub ConvertPrintTicketToDevModeThunk @ stdcall -private DllCanUnloadNow() @ stub DllGetClassObject diff --git a/dlls/prntvpt/ticket.c b/dlls/prntvpt/ticket.c index 253ea4ce0a5..3dd4e18e9d7 100644 --- a/dlls/prntvpt/ticket.c +++ b/dlls/prntvpt/ticket.c @@ -747,6 +747,31 @@ HRESULT WINAPI PTConvertPrintTicketToDevMode(HPTPROVIDER provider, IStream *stre return S_OK; }
+HRESULT WINAPI ConvertPrintTicketToDevModeThunk2(HPTPROVIDER provider, BYTE *ticket, ULONG ticket_size, EDefaultDevmodeType type, + EPrintTicketScope scope, BYTE **dm, ULONG *size, BSTR *error) +{ + static const LARGE_INTEGER zero; + HRESULT hr; + IStream *stream; + + TRACE("%p,%p,%lu,%d,%d,%p,%p,%p\n", provider, ticket, ticket_size, type, scope, dm, size, error); + + hr = CreateStreamOnHGlobal(0, TRUE, &stream); + if (hr != S_OK) return hr; + + hr = IStream_Write(stream, ticket, ticket_size, NULL); + if (hr == S_OK) + { + IStream_Seek(stream, zero, STREAM_SEEK_SET, NULL); + + hr = PTConvertPrintTicketToDevMode(provider, stream, type, scope, size, (PDEVMODEW *)dm, error); + } + + IStream_Release(stream); + + return hr; +} + static HRESULT add_attribute(IXMLDOMElement *element, const WCHAR *attr, const WCHAR *value) { VARIANT var;
From: Dmitry Timoshkov dmitry@baikal.ru
Signed-off-by: Dmitry Timoshkov dmitry@baikal.ru --- dlls/prntvpt/Makefile.in | 2 -- 1 file changed, 2 deletions(-)
diff --git a/dlls/prntvpt/Makefile.in b/dlls/prntvpt/Makefile.in index 3b2ce0c11af..846f70c0c16 100644 --- a/dlls/prntvpt/Makefile.in +++ b/dlls/prntvpt/Makefile.in @@ -2,8 +2,6 @@ MODULE = prntvpt.dll IMPORTLIB = prntvpt IMPORTS = winspool ole32 oleaut32
-EXTRADLLFLAGS = -Wb,--prefer-native - SOURCES = \ main.c \ ticket.c
From: Dmitry Timoshkov dmitry@baikal.ru
This fixes dotnet35sp1 installation failure.
Signed-off-by: Dmitry Timoshkov dmitry@baikal.ru --- dlls/prntvpt/Makefile.in | 1 + dlls/prntvpt/prntvpt.rc | 27 +++++++++++++++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 dlls/prntvpt/prntvpt.rc
diff --git a/dlls/prntvpt/Makefile.in b/dlls/prntvpt/Makefile.in index 846f70c0c16..051dba89775 100644 --- a/dlls/prntvpt/Makefile.in +++ b/dlls/prntvpt/Makefile.in @@ -4,4 +4,5 @@ IMPORTS = winspool ole32 oleaut32
SOURCES = \ main.c \ + prntvpt.rc \ ticket.c diff --git a/dlls/prntvpt/prntvpt.rc b/dlls/prntvpt/prntvpt.rc new file mode 100644 index 00000000000..df6cf687d87 --- /dev/null +++ b/dlls/prntvpt/prntvpt.rc @@ -0,0 +1,27 @@ +/* + * Copyright 2024 Dmitry Timoshkov + * + * 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 + * + */ + +#define WINE_FILENAME_STR "prntpvt.dll" +#define WINE_FILEDESCRIPTION_STR "Print Ticket Services Module" +#define WINE_FILEVERSION 6,1,2600,5635 +#define WINE_FILEVERSION_STR "6.1.2600.5635" +#define WINE_PRODUCTVERSION 6,1,2600,5635 +#define WINE_PRODUCTVERSION_STR "6.1.2600.5635" + +#include "wine/wine_common_ver.rc"