[PATCH 2/3] wineps: Add helpers to enter and leave passthrough.

Huw Davies huw at codeweavers.com
Wed Oct 3 05:39:20 CDT 2018


Signed-off-by: Huw Davies <huw at codeweavers.com>
---
 dlls/wineps.drv/escape.c | 10 +---------
 dlls/wineps.drv/ps.c     | 27 +++++++++++++++++++++++----
 dlls/wineps.drv/psdrv.h  |  3 +++
 3 files changed, 27 insertions(+), 13 deletions(-)

diff --git a/dlls/wineps.drv/escape.c b/dlls/wineps.drv/escape.c
index f9616bc..7b90116 100644
--- a/dlls/wineps.drv/escape.c
+++ b/dlls/wineps.drv/escape.c
@@ -44,10 +44,6 @@
 
 WINE_DEFAULT_DEBUG_CHANNEL(psdrv);
 
-static const char psbegindocument[] =
-"%%BeginDocument: Wine passthrough\n";
-
-
 DWORD write_spool( PHYSDEV dev, const void *data, DWORD num )
 {
     PSDRV_PDEVICE *physDev = get_psdrv_dev( dev );
@@ -269,11 +265,7 @@ INT PSDRV_ExtEscape( PHYSDEV dev, INT nEscape, INT cbInput, LPCVOID in_data,
              * length of the string, rather than 2 more.  So we'll use the WORD at
              * in_data[0] instead.
              */
-            if (physDev->job.passthrough_state == passthrough_none)
-            {
-                write_spool(dev, psbegindocument, sizeof(psbegindocument) - 1);
-                physDev->job.passthrough_state = passthrough_active;
-            }
+            passthrough_enter(dev);
             return write_spool(dev, ((char*)in_data) + 2, *(const WORD*)in_data);
         }
 
diff --git a/dlls/wineps.drv/ps.c b/dlls/wineps.drv/ps.c
index 663cc23..4fd3c76 100644
--- a/dlls/wineps.drv/ps.c
+++ b/dlls/wineps.drv/ps.c
@@ -213,9 +213,31 @@ static const char psarrayput[] =
 static const char psarraydef[] =
 "/%s %d array def\n";
 
+static const char psbegindocument[] =
+"%%BeginDocument: Wine passthrough\n";
 static const char psenddocument[] =
 "\n%%EndDocument\n";
 
+void passthrough_enter(PHYSDEV dev)
+{
+    PSDRV_PDEVICE *physDev = get_psdrv_dev( dev );
+
+    if (physDev->job.passthrough_state != passthrough_none) return;
+
+    write_spool(dev, psbegindocument, sizeof(psbegindocument) - 1);
+    physDev->job.passthrough_state = passthrough_active;
+}
+
+void passthrough_leave(PHYSDEV dev)
+{
+    PSDRV_PDEVICE *physDev = get_psdrv_dev( dev );
+
+    if (physDev->job.passthrough_state == passthrough_none) return;
+
+    write_spool(dev, psenddocument, sizeof(psenddocument) - 1);
+    physDev->job.passthrough_state = passthrough_none;
+}
+
 DWORD PSDRV_WriteSpool(PHYSDEV dev, LPCSTR lpData, DWORD cch)
 {
     PSDRV_PDEVICE *physDev = get_psdrv_dev( dev );
@@ -226,10 +248,7 @@ DWORD PSDRV_WriteSpool(PHYSDEV dev, LPCSTR lpData, DWORD cch)
 	return 0;
     }
 
-    if(physDev->job.passthrough_state != passthrough_none) { /* Was in PASSTHROUGH mode */
-        write_spool( dev, psenddocument, sizeof(psenddocument)-1 );
-        physDev->job.passthrough_state = passthrough_none;
-    }
+    passthrough_leave(dev);
 
     if(physDev->job.OutOfPage) { /* Will get here after NEWFRAME Escape */
         if( !PSDRV_StartPage(dev) )
diff --git a/dlls/wineps.drv/psdrv.h b/dlls/wineps.drv/psdrv.h
index d92fbb3..9cbee65 100644
--- a/dlls/wineps.drv/psdrv.h
+++ b/dlls/wineps.drv/psdrv.h
@@ -578,6 +578,9 @@ extern void T42_free(TYPE42 *t42) DECLSPEC_HIDDEN;
 extern DWORD RLE_encode(BYTE *in_buf, DWORD len, BYTE *out_buf) DECLSPEC_HIDDEN;
 extern DWORD ASCII85_encode(BYTE *in_buf, DWORD len, BYTE *out_buf) DECLSPEC_HIDDEN;
 
+extern void passthrough_enter(PHYSDEV dev) DECLSPEC_HIDDEN;
+extern void passthrough_leave(PHYSDEV dev) DECLSPEC_HIDDEN;
+
 #define push_lc_numeric(x) do {					\
 	const char *tmplocale = setlocale(LC_NUMERIC,NULL);	\
 	setlocale(LC_NUMERIC,x);
-- 
2.7.4




More information about the wine-devel mailing list