Commit 7f6b6eb3 authored by Alexandre Julliard's avatar Alexandre Julliard

wineps.drv: Add a wrapper function for WriteSpool16.

parent 8b154a59
...@@ -33,6 +33,11 @@ WINE_DEFAULT_DEBUG_CHANNEL(psdrv); ...@@ -33,6 +33,11 @@ WINE_DEFAULT_DEBUG_CHANNEL(psdrv);
static const char psbegindocument[] = static const char psbegindocument[] =
"%%BeginDocument: Wine passthrough\n"; "%%BeginDocument: Wine passthrough\n";
DWORD write_spool( PSDRV_PDEVICE *physDev, const void *data, DWORD num )
{
return WriteSpool16( physDev->job.hJob, (LPSTR)data, num );
}
/********************************************************************** /**********************************************************************
* ExtEscape (WINEPS.@) * ExtEscape (WINEPS.@)
*/ */
...@@ -252,10 +257,10 @@ INT CDECL PSDRV_ExtEscape( PSDRV_PDEVICE *physDev, INT nEscape, INT cbInput, LPC ...@@ -252,10 +257,10 @@ INT CDECL PSDRV_ExtEscape( PSDRV_PDEVICE *physDev, INT nEscape, INT cbInput, LPC
* in_data[0] instead. * in_data[0] instead.
*/ */
if(!physDev->job.in_passthrough) { if(!physDev->job.in_passthrough) {
WriteSpool16(physDev->job.hJob, (LPSTR)psbegindocument, sizeof(psbegindocument)-1); write_spool(physDev, psbegindocument, sizeof(psbegindocument)-1);
physDev->job.in_passthrough = TRUE; physDev->job.in_passthrough = TRUE;
} }
return WriteSpool16(physDev->job.hJob,((char*)in_data)+2,*(const WORD*)in_data); return write_spool(physDev,((char*)in_data)+2,*(const WORD*)in_data);
} }
case POSTSCRIPT_IGNORE: case POSTSCRIPT_IGNORE:
......
...@@ -129,7 +129,7 @@ BOOL CDECL PSDRV_Rectangle( PSDRV_PDEVICE *physDev, INT left, INT top, INT right ...@@ -129,7 +129,7 @@ BOOL CDECL PSDRV_Rectangle( PSDRV_PDEVICE *physDev, INT left, INT top, INT right
if(physDev->job.in_passthrough && !physDev->job.had_passthrough_rect && GetROP2(physDev->hdc) == R2_NOP) { if(physDev->job.in_passthrough && !physDev->job.had_passthrough_rect && GetROP2(physDev->hdc) == R2_NOP) {
char buf[256]; char buf[256];
sprintf(buf, "N %d %d %d %d B\n", rect.right - rect.left, rect.bottom - rect.top, rect.left, rect.top); sprintf(buf, "N %d %d %d %d B\n", rect.right - rect.left, rect.bottom - rect.top, rect.left, rect.top);
WriteSpool16(physDev->job.hJob, buf, strlen(buf)); write_spool(physDev, buf, strlen(buf));
physDev->job.had_passthrough_rect = TRUE; physDev->job.had_passthrough_rect = TRUE;
return TRUE; return TRUE;
} }
......
...@@ -196,7 +196,7 @@ DWORD PSDRV_WriteSpool(PSDRV_PDEVICE *physDev, LPCSTR lpData, DWORD cch) ...@@ -196,7 +196,7 @@ DWORD PSDRV_WriteSpool(PSDRV_PDEVICE *physDev, LPCSTR lpData, DWORD cch)
} }
if(physDev->job.in_passthrough) { /* Was in PASSTHROUGH mode */ if(physDev->job.in_passthrough) { /* Was in PASSTHROUGH mode */
WriteSpool16( physDev->job.hJob, (LPSTR)psenddocument, sizeof(psenddocument)-1 ); write_spool( physDev, psenddocument, sizeof(psenddocument)-1 );
physDev->job.in_passthrough = physDev->job.had_passthrough_rect = FALSE; physDev->job.in_passthrough = physDev->job.had_passthrough_rect = FALSE;
} }
...@@ -207,7 +207,7 @@ DWORD PSDRV_WriteSpool(PSDRV_PDEVICE *physDev, LPCSTR lpData, DWORD cch) ...@@ -207,7 +207,7 @@ DWORD PSDRV_WriteSpool(PSDRV_PDEVICE *physDev, LPCSTR lpData, DWORD cch)
do { do {
num = min(num_left, 0x8000); num = min(num_left, 0x8000);
if(WriteSpool16( physDev->job.hJob, (LPSTR)lpData, num ) != num) if(write_spool( physDev, lpData, num ) != num)
return 0; return 0;
lpData += num; lpData += num;
num_left -= num; num_left -= num;
...@@ -217,19 +217,16 @@ DWORD PSDRV_WriteSpool(PSDRV_PDEVICE *physDev, LPCSTR lpData, DWORD cch) ...@@ -217,19 +217,16 @@ DWORD PSDRV_WriteSpool(PSDRV_PDEVICE *physDev, LPCSTR lpData, DWORD cch)
} }
static INT PSDRV_WriteFeature(HANDLE16 hJob, LPCSTR feature, LPCSTR value, LPSTR invocation) static INT PSDRV_WriteFeature(PSDRV_PDEVICE *physDev, LPCSTR feature, LPCSTR value, LPCSTR invocation)
{ {
char *buf = HeapAlloc( PSDRV_Heap, 0, sizeof(psbeginfeature) + char *buf = HeapAlloc( PSDRV_Heap, 0, sizeof(psbeginfeature) +
strlen(feature) + strlen(value)); strlen(feature) + strlen(value));
sprintf(buf, psbeginfeature, feature, value); sprintf(buf, psbeginfeature, feature, value);
WriteSpool16( hJob, buf, strlen(buf) ); write_spool( physDev, buf, strlen(buf) );
write_spool( physDev, invocation, strlen(invocation) );
WriteSpool16( hJob, invocation, strlen(invocation) ); write_spool( physDev, psendfeature, strlen(psendfeature) );
WriteSpool16( hJob, (LPSTR)psendfeature, strlen(psendfeature) );
HeapFree( PSDRV_Heap, 0, buf ); HeapFree( PSDRV_Heap, 0, buf );
return 1; return 1;
...@@ -321,30 +318,28 @@ INT PSDRV_WriteHeader( PSDRV_PDEVICE *physDev, LPCSTR title ) ...@@ -321,30 +318,28 @@ INT PSDRV_WriteHeader( PSDRV_PDEVICE *physDev, LPCSTR title )
sprintf(buf, psheader, escaped_title, llx, lly, urx, ury); sprintf(buf, psheader, escaped_title, llx, lly, urx, ury);
HeapFree(GetProcessHeap(), 0, escaped_title); HeapFree(GetProcessHeap(), 0, escaped_title);
if( WriteSpool16( physDev->job.hJob, buf, strlen(buf) ) != if( write_spool( physDev, buf, strlen(buf) ) != strlen(buf) ) {
strlen(buf) ) {
WARN("WriteSpool error\n"); WARN("WriteSpool error\n");
HeapFree( PSDRV_Heap, 0, buf ); HeapFree( PSDRV_Heap, 0, buf );
return 0; return 0;
} }
HeapFree( PSDRV_Heap, 0, buf ); HeapFree( PSDRV_Heap, 0, buf );
WriteSpool16( physDev->job.hJob, (LPSTR)psbeginprolog, strlen(psbeginprolog) ); write_spool( physDev, psbeginprolog, strlen(psbeginprolog) );
WriteSpool16( physDev->job.hJob, (LPSTR)psprolog, strlen(psprolog) ); write_spool( physDev, psprolog, strlen(psprolog) );
WriteSpool16( physDev->job.hJob, (LPSTR)psendprolog, strlen(psendprolog) ); write_spool( physDev, psendprolog, strlen(psendprolog) );
write_spool( physDev, psbeginsetup, strlen(psbeginsetup) );
WriteSpool16( physDev->job.hJob, (LPSTR)psbeginsetup, strlen(psbeginsetup) );
if(physDev->Devmode->dmPublic.u1.s1.dmCopies > 1) { if(physDev->Devmode->dmPublic.u1.s1.dmCopies > 1) {
char copies_buf[100]; char copies_buf[100];
sprintf(copies_buf, "mark {\n << /NumCopies %d >> setpagedevice\n} stopped cleartomark\n", physDev->Devmode->dmPublic.u1.s1.dmCopies); sprintf(copies_buf, "mark {\n << /NumCopies %d >> setpagedevice\n} stopped cleartomark\n", physDev->Devmode->dmPublic.u1.s1.dmCopies);
WriteSpool16(physDev->job.hJob, copies_buf, strlen(copies_buf)); write_spool(physDev, copies_buf, strlen(copies_buf));
} }
for(slot = physDev->pi->ppd->InputSlots; slot; slot = slot->next) { for(slot = physDev->pi->ppd->InputSlots; slot; slot = slot->next) {
if(slot->WinBin == physDev->Devmode->dmPublic.u1.s1.dmDefaultSource) { if(slot->WinBin == physDev->Devmode->dmPublic.u1.s1.dmDefaultSource) {
if(slot->InvocationString) { if(slot->InvocationString) {
PSDRV_WriteFeature(physDev->job.hJob, "*InputSlot", slot->Name, PSDRV_WriteFeature(physDev, "*InputSlot", slot->Name,
slot->InvocationString); slot->InvocationString);
break; break;
} }
...@@ -354,7 +349,7 @@ INT PSDRV_WriteHeader( PSDRV_PDEVICE *physDev, LPCSTR title ) ...@@ -354,7 +349,7 @@ INT PSDRV_WriteHeader( PSDRV_PDEVICE *physDev, LPCSTR title )
LIST_FOR_EACH_ENTRY(page, &physDev->pi->ppd->PageSizes, PAGESIZE, entry) { LIST_FOR_EACH_ENTRY(page, &physDev->pi->ppd->PageSizes, PAGESIZE, entry) {
if(page->WinPage == physDev->Devmode->dmPublic.u1.s1.dmPaperSize) { if(page->WinPage == physDev->Devmode->dmPublic.u1.s1.dmPaperSize) {
if(page->InvocationString) { if(page->InvocationString) {
PSDRV_WriteFeature(physDev->job.hJob, "*PageSize", page->Name, PSDRV_WriteFeature(physDev, "*PageSize", page->Name,
page->InvocationString); page->InvocationString);
break; break;
} }
...@@ -366,14 +361,14 @@ INT PSDRV_WriteHeader( PSDRV_PDEVICE *physDev, LPCSTR title ) ...@@ -366,14 +361,14 @@ INT PSDRV_WriteHeader( PSDRV_PDEVICE *physDev, LPCSTR title )
for(duplex = physDev->pi->ppd->Duplexes; duplex; duplex = duplex->next) { for(duplex = physDev->pi->ppd->Duplexes; duplex; duplex = duplex->next) {
if(duplex->WinDuplex == win_duplex) { if(duplex->WinDuplex == win_duplex) {
if(duplex->InvocationString) { if(duplex->InvocationString) {
PSDRV_WriteFeature(physDev->job.hJob, "*Duplex", duplex->Name, PSDRV_WriteFeature(physDev, "*Duplex", duplex->Name,
duplex->InvocationString); duplex->InvocationString);
break; break;
} }
} }
} }
WriteSpool16( physDev->job.hJob, (LPSTR)psendsetup, strlen(psendsetup) ); write_spool( physDev, psendsetup, strlen(psendsetup) );
return 1; return 1;
...@@ -392,8 +387,7 @@ INT PSDRV_WriteFooter( PSDRV_PDEVICE *physDev ) ...@@ -392,8 +387,7 @@ INT PSDRV_WriteFooter( PSDRV_PDEVICE *physDev )
sprintf(buf, psfooter, physDev->job.PageNo); sprintf(buf, psfooter, physDev->job.PageNo);
if( WriteSpool16( physDev->job.hJob, buf, strlen(buf) ) != if( write_spool( physDev, buf, strlen(buf) ) != strlen(buf) ) {
strlen(buf) ) {
WARN("WriteSpool error\n"); WARN("WriteSpool error\n");
HeapFree( PSDRV_Heap, 0, buf ); HeapFree( PSDRV_Heap, 0, buf );
return 0; return 0;
...@@ -406,8 +400,7 @@ INT PSDRV_WriteFooter( PSDRV_PDEVICE *physDev ) ...@@ -406,8 +400,7 @@ INT PSDRV_WriteFooter( PSDRV_PDEVICE *physDev )
INT PSDRV_WriteEndPage( PSDRV_PDEVICE *physDev ) INT PSDRV_WriteEndPage( PSDRV_PDEVICE *physDev )
{ {
if( WriteSpool16( physDev->job.hJob, (LPSTR)psendpage, sizeof(psendpage)-1 ) != if( write_spool( physDev, psendpage, sizeof(psendpage)-1 ) != sizeof(psendpage)-1 ) {
sizeof(psendpage)-1 ) {
WARN("WriteSpool error\n"); WARN("WriteSpool error\n");
return 0; return 0;
} }
...@@ -451,8 +444,7 @@ INT PSDRV_WriteNewPage( PSDRV_PDEVICE *physDev ) ...@@ -451,8 +444,7 @@ INT PSDRV_WriteNewPage( PSDRV_PDEVICE *physDev )
physDev->logPixelsX, physDev->logPixelsY, physDev->logPixelsX, physDev->logPixelsY,
xtrans, ytrans, rotation); xtrans, ytrans, rotation);
if( WriteSpool16( physDev->job.hJob, buf, strlen(buf) ) != if( write_spool( physDev, buf, strlen(buf) ) != strlen(buf) ) {
strlen(buf) ) {
WARN("WriteSpool error\n"); WARN("WriteSpool error\n");
HeapFree( PSDRV_Heap, 0, buf ); HeapFree( PSDRV_Heap, 0, buf );
return 0; return 0;
......
...@@ -492,6 +492,8 @@ extern BOOL PSDRV_WriteDownloadGlyphShow(PSDRV_PDEVICE *physDev, WORD *glpyhs, ...@@ -492,6 +492,8 @@ extern BOOL PSDRV_WriteDownloadGlyphShow(PSDRV_PDEVICE *physDev, WORD *glpyhs,
UINT count); UINT count);
extern BOOL PSDRV_EmptyDownloadList(PSDRV_PDEVICE *physDev, BOOL write_undef); extern BOOL PSDRV_EmptyDownloadList(PSDRV_PDEVICE *physDev, BOOL write_undef);
extern DWORD write_spool( PSDRV_PDEVICE *physDev, const void *data, DWORD num );
#define MAX_G_NAME 31 /* max length of PS glyph name */ #define MAX_G_NAME 31 /* max length of PS glyph name */
extern void get_glyph_name(HDC hdc, WORD index, char *name); extern void get_glyph_name(HDC hdc, WORD index, char *name);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment