{Start|End}{Doc|Page} go through DCfuncs.
Implement these in the PostScript driver.
Change PSDRV_Escape to use them.

diff --git a/graphics/psdrv/escape.c b/graphics/psdrv/escape.c
index 98a57ab..37dbc28 100644
--- a/graphics/psdrv/escape.c
+++ b/graphics/psdrv/escape.c
@@ -7,12 +7,13 @@
 #include "psdrv.h"
 #include "debugtools.h"
 #include "winspool.h"
+#include "heap.h"
 
 DEFAULT_DEBUG_CHANNEL(psdrv)
 
 
 INT PSDRV_Escape( DC *dc, INT nEscape, INT cbInput, 
-                              SEGPTR lpInData, SEGPTR lpOutData )
+		  SEGPTR lpInData, SEGPTR lpOutData )
 {
     PSDRV_PDEVICE *physDev = (PSDRV_PDEVICE *)dc->physDev;
 
@@ -38,13 +39,11 @@
 
         if(!physDev->job.hJob) {
 	    FIXME("hJob == 0. Now what?\n");
-	    return 0;
+	    return SP_ERROR;
 	}
-
-	if(!PSDRV_WriteEndPage( dc ))
-	    return 0;
-
-	physDev->job.NeedPageHeader = TRUE;
+	
+	if(!PSDRV_EndPage( dc ))
+	    return SP_ERROR;
 	return 1;
           
     case QUERYESCSUPPORT:
@@ -86,46 +85,35 @@
 	return 1;
 
     case STARTDOC:
+      {
+	DOCINFOA doc;
+	char *name = NULL;
+	INT16 ret;
+
         TRACE("STARTDOC\n");
-        if(physDev->job.hJob) {
-	    FIXME("hJob != 0. Now what?\n");
-	    return 0;
-	}
 
-	physDev->job.hJob = OpenJob16(physDev->job.output,
-				    PTR_SEG_TO_LIN(lpInData), dc->hSelf);
-	if(!physDev->job.hJob) {
-	    WARN("OpenJob failed\n");
-	    return 0;
+	/* lpInData may not be 0 terminated so we must copy it */
+	if(lpInData) {
+	    name = HeapAlloc( GetProcessHeap(), 0, cbInput+1 );
+	    memcpy(name, PTR_SEG_TO_LIN(lpInData), cbInput);
+	    name[cbInput] = '\0';
 	}
-	physDev->job.banding = FALSE;
-	physDev->job.NeedPageHeader = FALSE;
-	physDev->job.PageNo = 1;
-	if(!PSDRV_WriteHeader( dc, PTR_SEG_TO_LIN(lpInData), cbInput ))
-	    return 0;
+	doc.cbSize = sizeof(doc);
+	doc.lpszDocName = name;
+	doc.lpszOutput = doc.lpszDatatype = NULL;
+	doc.fwType = 0;
 
-	if(!PSDRV_WriteNewPage( dc ))
-	    return 0;
-	return 1;
+	ret = PSDRV_StartDoc(dc, &doc);
+	if(name) HeapFree( GetProcessHeap(), 0, name );
+	if(ret <= 0) return -1;
+	ret = PSDRV_StartPage(dc);
+	if(ret <= 0) return -1;
+	return ret;
+      }
 
     case ENDDOC:
         TRACE("ENDDOC\n");
-        if(!physDev->job.hJob) {
-	    FIXME("hJob == 0. Now what?\n");
-	    return 0;
-	}
-
-	physDev->job.NeedPageHeader = FALSE;
-
-	if(!PSDRV_WriteFooter( dc ))
-	    return 0;
-
-        if( CloseJob16( physDev->job.hJob ) == SP_ERROR ) {
-	    WARN("CloseJob error\n");
-	    return 0;
-	}
-	physDev->job.hJob = 0;
-	return 1;
+	return PSDRV_EndDoc( dc );
 
     case GETPHYSPAGESIZE:
         {
@@ -257,3 +245,99 @@
 	return 0;
     }
 }
+
+/************************************************************************
+ *           PSDRV_StartPage
+ */
+INT PSDRV_StartPage( DC *dc )
+{
+    PSDRV_PDEVICE *physDev = (PSDRV_PDEVICE *)dc->physDev;
+
+    if(!physDev->job.OutOfPage) {
+        FIXME("Already started a page?\n");
+	return 1;
+    }
+    physDev->job.PageNo++;
+    if(!PSDRV_WriteNewPage( dc ))
+        return 0;
+    physDev->job.OutOfPage = FALSE;
+    return 1;
+}
+
+	
+/************************************************************************
+ *           PSDRV_EndPage
+ */
+INT PSDRV_EndPage( DC *dc )
+{
+    PSDRV_PDEVICE *physDev = (PSDRV_PDEVICE *)dc->physDev;
+
+    if(physDev->job.OutOfPage) {
+        FIXME("Already ended a page?\n");
+	return 1;
+    }
+    if(!PSDRV_WriteEndPage( dc ))
+        return 0;
+    physDev->job.OutOfPage = TRUE;
+    return 1;
+}
+
+
+/************************************************************************
+ *           PSDRV_StartDoc
+ */
+INT PSDRV_StartDoc( DC *dc, const DOCINFOA *doc )
+{
+    PSDRV_PDEVICE *physDev = (PSDRV_PDEVICE *)dc->physDev;
+
+    if(physDev->job.hJob) {
+        FIXME("hJob != 0. Now what?\n");
+	return 0;
+    }
+
+    if(doc->lpszOutput) {
+        HeapFree( PSDRV_Heap, 0, physDev->job.output );
+	physDev->job.output = HEAP_strdupA( PSDRV_Heap, 0, doc->lpszOutput );
+    }
+    physDev->job.hJob = OpenJob16(physDev->job.output,  doc->lpszDocName,
+				  dc->hSelf);
+    if(!physDev->job.hJob) {
+        WARN("OpenJob failed\n");
+	return 0;
+    }
+    physDev->job.banding = FALSE;
+    physDev->job.OutOfPage = TRUE;
+    physDev->job.PageNo = 0;
+    if(!PSDRV_WriteHeader( dc, doc->lpszDocName ))
+        return 0;
+
+    return physDev->job.hJob;
+}
+
+
+/************************************************************************
+ *           PSDRV_EndDoc
+ */
+INT PSDRV_EndDoc( DC *dc )
+{
+    PSDRV_PDEVICE *physDev = (PSDRV_PDEVICE *)dc->physDev;
+
+    if(!physDev->job.hJob) {
+        FIXME("hJob == 0. Now what?\n");
+	return 0;
+    }
+
+    if(!physDev->job.OutOfPage) {
+        WARN("Somebody forgot a EndPage\n");
+	PSDRV_EndPage( dc );
+    }
+    if(!PSDRV_WriteFooter( dc ))
+        return 0;
+
+    if( CloseJob16( physDev->job.hJob ) == SP_ERROR ) {
+        WARN("CloseJob error\n");
+	return 0;
+    }
+    physDev->job.hJob = 0;
+    return 1;
+}
diff --git a/graphics/psdrv/init.c b/graphics/psdrv/init.c
index f750199..4b8c138 100644
--- a/graphics/psdrv/init.c
+++ b/graphics/psdrv/init.c
@@ -36,8 +36,8 @@
     NULL,                            /* pDeleteObject */
     PSDRV_DeviceCapabilities,        /* pDeviceCapabilities */
     PSDRV_Ellipse,                   /* pEllipse */
-    NULL,                            /* pEndDoc */
-    NULL,                            /* pEndPage */
+    PSDRV_EndDoc,                    /* pEndDoc */
+    PSDRV_EndPage,                   /* pEndPage */
     PSDRV_EnumDeviceFonts,           /* pEnumDeviceFonts */
     PSDRV_Escape,                    /* pEscape */
     NULL,                            /* pExcludeClipRect */
@@ -95,8 +95,8 @@
     NULL,                            /* pSetViewportOrg (optional) */
     NULL,                            /* pSetWindowExt (optional) */
     NULL,                            /* pSetWindowOrg (optional) */
-    NULL,                            /* pStartDoc */
-    NULL,                            /* pStartPage */
+    PSDRV_StartDoc,                  /* pStartDoc */
+    PSDRV_StartPage,                 /* pStartPage */
     NULL,                            /* pStretchBlt */
     PSDRV_StretchDIBits              /* pStretchDIBits */
 };
diff --git a/graphics/psdrv/ps.c b/graphics/psdrv/ps.c
index 33b8e9c..b820f43 100644
--- a/graphics/psdrv/ps.c
+++ b/graphics/psdrv/ps.c
@@ -251,11 +251,9 @@
 {
     PSDRV_PDEVICE *physDev = (PSDRV_PDEVICE *)dc->physDev;
 
-    if(physDev->job.NeedPageHeader) {
-	physDev->job.PageNo++;
-        if( !PSDRV_WriteNewPage(dc) )
+    if(physDev->job.OutOfPage) { /* Will get here after NEWFRAME Escape */
+        if( !PSDRV_StartPage(dc) )
 	    return FALSE;
-	physDev->job.NeedPageHeader = FALSE;
     }
     return WriteSpool16( physDev->job.hJob, lpData, cch );
 }
@@ -282,26 +280,20 @@
 
 
 
-INT PSDRV_WriteHeader( DC *dc, char *title, int len )
+INT PSDRV_WriteHeader( DC *dc, LPCSTR title )
 {
     PSDRV_PDEVICE *physDev = (PSDRV_PDEVICE *)dc->physDev;
-    char *buf, *titlebuf, *orient, vectbuf[256];
+    char *buf, *orient, vectbuf[256];
     INPUTSLOT *slot;
     PAGESIZE *page;
     int urx, ury, i, j;
 
-    titlebuf = (char *)HeapAlloc( PSDRV_Heap, 0, len+1 );
-    if(!titlebuf) {
-        WARN("HeapAlloc failed\n");
-        return 0;
-    }
-    memcpy(titlebuf, title, len);
-    titlebuf[len] = '\0';
+    TRACE("'%s'\n", title);
 
-    buf = (char *)HeapAlloc( PSDRV_Heap, 0, sizeof(psheader) + len + 30);
+    buf = (char *)HeapAlloc( PSDRV_Heap, 0, sizeof(psheader) +
+			     strlen(title) + 30 );
     if(!buf) {
         WARN("HeapAlloc failed\n");
-	HeapFree( PSDRV_Heap, 0, titlebuf );
         return 0;
     }
 
@@ -319,16 +311,14 @@
 
     /* FIXME should do something better with BBox */
 
-    sprintf(buf, psheader, titlebuf, 0, 0, urx, ury, orient);		
+    sprintf(buf, psheader, title, 0, 0, urx, ury, orient);		
 
     if( WriteSpool16( physDev->job.hJob, buf, strlen(buf) ) != 
 	                                             strlen(buf) ) {
         WARN("WriteSpool error\n");
-	HeapFree( PSDRV_Heap, 0, titlebuf );
 	HeapFree( PSDRV_Heap, 0, buf );
 	return 0;
     }
-    HeapFree( PSDRV_Heap, 0, titlebuf );
     HeapFree( PSDRV_Heap, 0, buf );
 
     WriteSpool16( physDev->job.hJob, psbeginprolog, strlen(psbeginprolog) );
diff --git a/if1632/gdi.spec b/if1632/gdi.spec
index 5d82103..4fff739 100644
--- a/if1632/gdi.spec
+++ b/if1632/gdi.spec
@@ -258,10 +258,10 @@
 376 pascal16 ResetDC(word ptr) ResetDC16
 377 pascal16 StartDoc(word ptr) StartDoc16
 378 pascal16 EndDoc(word) EndDoc16
-379 pascal16 StartPage(word) stub_GDI_379
+379 pascal16 StartPage(word) StartPage16
 380 pascal16 EndPage(word) EndPage16
 381 pascal16 SetAbortProc(word segptr) SetAbortProc16
-382 pascal16 AbortDoc() stub_GDI_382
+382 pascal16 AbortDoc() AbortDoc16
 400 pascal16 FastWindowFrame(word ptr s_word s_word long) FastWindowFrame16
 401 stub GDIMOVEBITMAP
 403 stub GDIINIT2
diff --git a/include/psdrv.h b/include/psdrv.h
index bacf8e2..3257079 100644
--- a/include/psdrv.h
+++ b/include/psdrv.h
@@ -214,9 +214,9 @@
 typedef struct {
     HANDLE16		hJob;
     LPSTR		output;		/* Output file/port */
-    BOOL              banding;        /* Have we received a NEXTBAND */
-    BOOL		NeedPageHeader; /* Page header not sent yet */
-    INT		PageNo;
+    BOOL		banding;        /* Have we received a NEXTBAND */
+    BOOL		OutOfPage;      /* Page header not sent yet */
+    INT			PageNo;
 } JOB;
 
 typedef struct {
@@ -263,7 +263,7 @@
 		     COLORREF wincolor );
 
 
-extern INT PSDRV_WriteHeader( DC *dc, char *title, int len );
+extern INT PSDRV_WriteHeader( DC *dc, LPCSTR title );
 extern INT PSDRV_WriteFooter( DC *dc );
 extern INT PSDRV_WriteNewPage( DC *dc );
 extern INT PSDRV_WriteEndPage( DC *dc );
@@ -315,6 +315,8 @@
 			   INT xend, INT yend );
 extern BOOL PSDRV_Ellipse( DC *dc, INT left, INT top, INT right,
 			     INT bottom );
+extern INT PSDRV_EndDoc( DC *dc );
+extern INT PSDRV_EndPage( DC *dc );
 extern BOOL PSDRV_EnumDeviceFonts( DC* dc, LPLOGFONT16 plf, 
 				     DEVICEFONTENUMPROC proc, LPARAM lp );
 extern INT PSDRV_Escape( DC *dc, INT nEscape, INT cbInput, 
@@ -349,11 +351,14 @@
 extern VOID PSDRV_SetDeviceClipping( DC *dc );
 extern COLORREF PSDRV_SetPixel( DC *dc, INT x, INT y, COLORREF color );
 extern COLORREF PSDRV_SetTextColor( DC *dc, COLORREF color );
+extern INT PSDRV_StartDoc( DC *dc, const DOCINFOA *doc );
+extern INT PSDRV_StartPage( DC *dc );
 extern INT PSDRV_StretchDIBits( DC *dc, INT xDst, INT yDst,
-				  INT widthDst, INT heightDst, INT xSrc,
-				  INT ySrc, INT widthSrc, INT heightSrc,
-				  const void *bits, const BITMAPINFO *info,
-				  UINT wUsage, DWORD dwRop );
+				INT widthDst, INT heightDst, INT xSrc,
+				INT ySrc, INT widthSrc, INT heightSrc,
+				const void *bits, const BITMAPINFO *info,
+				UINT wUsage, DWORD dwRop );
+
 extern INT PSDRV_ExtDeviceMode(HWND hwnd, LPDEVMODEA lpdmOutput,
 			       LPSTR lpszDevice, LPSTR lpszPort,
 			       LPDEVMODEA lpdmInput, LPSTR lpszProfile,
diff --git a/include/wine/wingdi16.h b/include/wine/wingdi16.h
index 66351c5..cb7f0a0 100644
--- a/include/wine/wingdi16.h
+++ b/include/wine/wingdi16.h
@@ -431,7 +431,7 @@
 INT16       WINAPI OffsetVisRgn16(HDC16,INT16,INT16);
 DWORD       WINAPI OffsetWindowOrg16(HDC16,INT16,INT16);
 BOOL16      WINAPI OffsetWindowOrgEx16(HDC16,INT16,INT16,LPPOINT16);
-HANDLE16    WINAPI OpenJob16(LPSTR,LPSTR,HDC16);
+HANDLE16    WINAPI OpenJob16(LPCSTR,LPCSTR,HDC16);
 BOOL16      WINAPI PaintRgn16(HDC16,HRGN16);
 BOOL16      WINAPI PatBlt16(HDC16,INT16,INT16,INT16,INT16,DWORD);
 HRGN16      WINAPI PathToRegion16(HDC16);
diff --git a/misc/printdrv.c b/misc/printdrv.c
index 1a1471c..2c8553e 100644
--- a/misc/printdrv.c
+++ b/misc/printdrv.c
@@ -25,6 +25,7 @@
 #include "callback.h"
 #include "xmalloc.h"
 #include "options.h"
+#include "heap.h"
 
 DEFAULT_DEBUG_CHANNEL(print)
 
@@ -39,74 +40,65 @@
  */
 INT16 WINAPI StartDoc16( HDC16 hdc, const DOCINFO16 *lpdoc )
 {
-  INT16 retVal;
-  TRACE("(%p)\n", lpdoc );
-  TRACE("%d 0x%lx:0x%p 0x%lx:0x%p\n",lpdoc->cbSize,
-	lpdoc->lpszDocName,PTR_SEG_TO_LIN(lpdoc->lpszDocName),
-	lpdoc->lpszOutput,PTR_SEG_TO_LIN(lpdoc->lpszOutput));
-  TRACE("%d %s %s\n",lpdoc->cbSize,
-	(LPSTR)PTR_SEG_TO_LIN(lpdoc->lpszDocName),
-	(LPSTR)PTR_SEG_TO_LIN(lpdoc->lpszOutput));
-  retVal =  Escape16(hdc, STARTDOC,
-    strlen((LPSTR)PTR_SEG_TO_LIN(lpdoc->lpszDocName)), lpdoc->lpszDocName, 0);
-  TRACE("Escape16 returned %d\n",retVal);
-  return retVal;
+    DOCINFOA docA;
+
+    docA.cbSize = lpdoc->cbSize;
+    docA.lpszDocName = PTR_SEG_TO_LIN(lpdoc->lpszDocName);
+    docA.lpszOutput = PTR_SEG_TO_LIN(lpdoc->lpszOutput);
+    docA.lpszDatatype = NULL;
+    docA.fwType = 0;
+
+    return StartDocA(hdc, &docA);
 }
 
 /******************************************************************
- *                  EndPage16  [GDI.380]
+ *                  StartDocA  [GDI32.347]
  *
  */
-INT16 WINAPI EndPage16( HDC16 hdc )
+INT WINAPI StartDocA(HDC hdc, const DOCINFOA* doc)
 {
-  INT16 retVal;
-  retVal =  Escape16(hdc, NEWFRAME, 0, 0, 0);
-  TRACE("Escape16 returned %d\n",retVal);
-  return retVal;
-}
+    DC *dc = DC_GetDCPtr( hdc );
 
-/******************************************************************
- *                  StartDoc32A  [GDI32.347]
- *
- */
-INT WINAPI StartDocA(HDC hdc ,const DOCINFOA* doc)
-{
     TRACE("DocName = '%s' Output = '%s' Datatype = '%s'\n",
 	  doc->lpszDocName, doc->lpszOutput, doc->lpszDatatype);
-    return  Escape(hdc,
-		   STARTDOC,
-		   strlen(doc->lpszDocName),
-		   doc->lpszDocName,
-		   0);
+
+    if(!dc) return 0;
+
+    if(dc->funcs->pStartDoc)
+        return dc->funcs->pStartDoc( dc, doc );
+    else
+        return Escape(hdc, STARTDOC, strlen(doc->lpszDocName),
+		      doc->lpszDocName, 0);
 }
 
 /*************************************************************************
- *                  StartDoc32W [GDI32.348]
+ *                  StartDocW [GDI32.348]
  * 
  */
-INT WINAPI StartDocW(HDC hdc, const DOCINFOW* doc) {
-  FIXME("stub\n");
-  SetLastError(ERROR_CALL_NOT_IMPLEMENTED); 
-  return 0; /* failure*/
-}
-
-/******************************************************************
- *                  StartPage32  [GDI32.349]
- *
- */
-INT WINAPI StartPage(HDC hdc)
+INT WINAPI StartDocW(HDC hdc, const DOCINFOW* doc)
 {
-  FIXME("stub\n");
-  return 1;
-}
+    DOCINFOA docA;
+    INT ret;
 
-/******************************************************************
- *                  EndPage32  [GDI32.77]
- *
- */
-INT WINAPI EndPage(HDC hdc)
-{
-  return Escape(hdc, NEWFRAME, 0, 0, 0);
+    docA.cbSize = doc->cbSize;
+    docA.lpszDocName = doc->lpszDocName ? 
+      HEAP_strdupWtoA( GetProcessHeap(), 0, doc->lpszDocName ) : NULL;
+    docA.lpszOutput = doc->lpszOutput ?
+      HEAP_strdupWtoA( GetProcessHeap(), 0, doc->lpszOutput ) : NULL;
+    docA.lpszDatatype = doc->lpszDatatype ?
+      HEAP_strdupWtoA( GetProcessHeap(), 0, doc->lpszDatatype ) : NULL;
+    docA.fwType = doc->fwType;
+
+    ret = StartDocA(hdc, &docA);
+
+    if(docA.lpszDocName)
+        HeapFree( GetProcessHeap(), 0, (LPSTR)docA.lpszDocName );
+    if(docA.lpszOutput)
+        HeapFree( GetProcessHeap(), 0, (LPSTR)docA.lpszOutput );
+    if(docA.lpszDatatype)
+        HeapFree( GetProcessHeap(), 0, (LPSTR)docA.lpszDatatype );
+
+    return ret;
 }
 
 /******************************************************************
@@ -115,16 +107,71 @@
  */
 INT16 WINAPI EndDoc16(HDC16 hdc)
 {
-  return  Escape16(hdc, ENDDOC, 0, 0, 0);
+    return EndDoc(hdc);
 }
 
 /******************************************************************
- *                  EndDoc32  [GDI32.76]
+ *                  EndDoc  [GDI32.76]
  *
  */
 INT WINAPI EndDoc(HDC hdc)
 {
-  return Escape(hdc, ENDDOC, 0, 0, 0);
+    DC *dc = DC_GetDCPtr( hdc );
+    if(!dc) return 0;
+
+    if(dc->funcs->pEndDoc)
+        return dc->funcs->pEndDoc( dc );
+    else
+        return Escape(hdc, ENDDOC, 0, 0, 0);
+}
+
+/******************************************************************
+ *                  StartPage16  [GDI.379]
+ *
+ */
+INT16 WINAPI StartPage16(HDC16 hdc)
+{
+    return StartPage(hdc);
+}
+
+/******************************************************************
+ *                  StartPage  [GDI32.349]
+ *
+ */
+INT WINAPI StartPage(HDC hdc)
+{
+    DC *dc = DC_GetDCPtr( hdc );
+    if(!dc) return 0;
+
+    if(dc->funcs->pStartPage)
+        return dc->funcs->pStartPage( dc );
+
+    FIXME("stub\n");
+    return 1;
+}
+
+/******************************************************************
+ *                  EndPage16  [GDI.380]
+ *
+ */
+INT16 WINAPI EndPage16( HDC16 hdc )
+{
+    return EndPage(hdc);
+}
+
+/******************************************************************
+ *                  EndPage  [GDI32.77]
+ *
+ */
+INT WINAPI EndPage(HDC hdc)
+{
+    DC *dc = DC_GetDCPtr( hdc );
+    if(!dc) return 0;
+
+    if(dc->funcs->pEndPage)
+        return dc->funcs->pEndPage( dc );
+    else
+        return Escape(hdc, NEWFRAME, 0, 0, 0);
 }
 
 /******************************************************************************
@@ -132,20 +179,25 @@
  */
 INT16 WINAPI AbortDoc16(HDC16 hdc)
 {
-  return Escape16(hdc, ABORTDOC, 0, 0, 0);
+    return AbortDoc(hdc);
 }
 
 /******************************************************************************
- *                 AbortDoc32  [GDI32.0]
+ *                 AbortDoc  [GDI32.105]
  */
 INT WINAPI AbortDoc(HDC hdc)
 {
-    FIXME("(%d): stub\n", hdc);
-    return 1;
+    DC *dc = DC_GetDCPtr( hdc );
+    if(!dc) return 0;
+
+    if(dc->funcs->pAbortDoc)
+        return dc->funcs->pAbortDoc( dc );
+    else
+        return Escape(hdc, ABORTDOC, 0, 0, 0);
 }
 
 /**********************************************************************
- *           QueryAbort   (GDI.155)
+ *           QueryAbort16   (GDI.155)
  *
  *  Calls the app's AbortProc function if avail.
  *
@@ -363,7 +415,7 @@
 }
 
 /* TTD Need to do some DOS->UNIX file conversion here */
-static int CreateSpoolFile(LPSTR pszOutput)
+static int CreateSpoolFile(LPCSTR pszOutput)
 {
     int fd=-1;
     char psCmd[1024];
@@ -378,7 +430,7 @@
     TRACE("Got printerSpoolCommand '%s' for output device '%s'\n",
 	  psCmd, pszOutput);
     if (!*psCmd)
-        psCmdP = pszOutput;
+        psCmdP = (char *)pszOutput;
     else
     {
         while (*psCmdP && isspace(*psCmdP))
@@ -444,7 +496,7 @@
  *           OpenJob   (GDI.240)
  *
  */
-HANDLE16 WINAPI OpenJob16(LPSTR lpOutput, LPSTR lpTitle, HDC16 hDC)
+HANDLE16 WINAPI OpenJob16(LPCSTR lpOutput, LPCSTR lpTitle, HDC16 hDC)
 {
     HANDLE16 hHandle = (HANDLE16)SP_ERROR;
     PPRINTJOB pPrintJob;