It appears that StartDoc sends the STARTDOC escape with the DOCINFO
structure pointed to with the output data parameter.
diff --git a/graphics/escape.c b/graphics/escape.c
index 2c45d0e..54ca020 100644
--- a/graphics/escape.c
+++ b/graphics/escape.c
@@ -114,7 +114,10 @@
break;
}
- /* Escape(hdc,STARTDOC,LPSTR,NULL); */
+ /* Escape(hdc,STARTDOC,LPSTR,LPDOCINFOA);
+ * lpvOutData is actually a pointer to the DocInfo structure and used as
+ * a second input parameter
+ */
case STARTDOC: /* string may not be \0 terminated */
if(lpszInData) {
@@ -123,6 +126,18 @@
segin = SEGPTR_GET(cp);
} else
segin = 0;
+
+ if(lpvOutData) {
+ DOCINFO16 *lpsegdoc = SEGPTR_NEW(DOCINFO16);
+ DOCINFOA *lpdoc = lpvOutData;
+ memset(lpsegdoc, 0, sizeof(*lpsegdoc));
+ lpsegdoc->cbSize = sizeof(*lpsegdoc);
+ lpsegdoc->lpszDocName = SEGPTR_GET(SEGPTR_STRDUP(lpdoc->lpszDocName));
+ lpsegdoc->lpszOutput = SEGPTR_GET(SEGPTR_STRDUP(lpdoc->lpszOutput));
+ lpsegdoc->lpszDatatype = SEGPTR_GET(SEGPTR_STRDUP(lpdoc->lpszDatatype));
+ lpsegdoc->fwType = lpdoc->fwType;
+ segout = SEGPTR_GET(lpsegdoc);
+ }
break;
case SETABORTPROC:
@@ -193,7 +208,16 @@
SEGPTR_FREE(x);
break;
}
- case STARTDOC:
+ case STARTDOC: {
+ DOCINFO16 *doc = PTR_SEG_TO_LIN(segout);
+ SEGPTR_FREE(PTR_SEG_TO_LIN(doc->lpszDocName));
+ SEGPTR_FREE(PTR_SEG_TO_LIN(doc->lpszOutput));
+ SEGPTR_FREE(PTR_SEG_TO_LIN(doc->lpszDatatype));
+ SEGPTR_FREE(doc);
+ SEGPTR_FREE(PTR_SEG_TO_LIN(segin));
+ break;
+ }
+
case CLIP_TO_PATH:
case END_PATH:
SEGPTR_FREE(PTR_SEG_TO_LIN(segin));