Update README to say GPLv2 or later and remove references to bzr.
[jerry/slag.git] / win32 / spoolss / printlib.c
1 #include <windows.h>\r
2 #include <stdio.h>\r
3 #include "printlib.h"\r
4 \r
5 #define DetectNull(p) (p?p:"NULL")\r
6 \r
7 void print_devmode (DEVMODE *pDevModeIn)\r
8 {\r
9         if (pDevModeIn == NULL)\r
10         {\r
11                 printf ("\tDevice Mode\t= (null)\n");\r
12                 return;\r
13         }\r
14 \r
15         printf( "\tDEVMODE:----------\n" );\r
16         printf( "\tDeviceName:      [%s]\n", DetectNull( pDevModeIn->dmDeviceName ) );\r
17         printf( "\tSpecVersion:     %d\n",   pDevModeIn->dmSpecVersion );\r
18         printf( "\tDriverVersion:   %d\n",   pDevModeIn->dmDriverVersion );\r
19         printf( "\tSize:            %d\n",   pDevModeIn->dmSize );\r
20         printf( "\tDriverExtra:     %d\n",   pDevModeIn->dmDriverExtra );\r
21         printf( "\tFields:          0x%x\n", pDevModeIn->dmFields );\r
22 \r
23         if ( pDevModeIn->dmFields & DM_ORIENTATION )\r
24                 printf( "\tOrientation:     %d\n", pDevModeIn->dmOrientation );\r
25         if ( pDevModeIn->dmFields & DM_PAPERSIZE )\r
26                 printf( "\tPaperSize:       %d\n", pDevModeIn->dmPaperSize);\r
27         if ( pDevModeIn->dmFields & DM_PAPERLENGTH )\r
28                 printf( "\tPaperLength:     %d\n", pDevModeIn->dmPaperLength );\r
29         if ( pDevModeIn->dmFields & DM_PAPERWIDTH )\r
30                 printf( "\tPaperWidth:      %d\n", pDevModeIn->dmPaperWidth );\r
31 //      if ( pDevModeIn->dmFields & DM_POSITION )\r
32 //              printf( "\tPosition:        %d\n", pDevModeIn->dmPosition );\r
33         if ( pDevModeIn->dmFields & DM_SCALE )\r
34                 printf( "\tScale:           %d\n", pDevModeIn->dmScale );\r
35         if ( pDevModeIn->dmFields & DM_COPIES )\r
36                 printf( "\tCopies:          %d\n", pDevModeIn->dmCopies );\r
37         if ( pDevModeIn->dmFields & DM_DEFAULTSOURCE )\r
38                 printf( "\tDefaultSource:   %d\n", pDevModeIn->dmDefaultSource );\r
39         if ( pDevModeIn->dmFields & DM_PRINTQUALITY )\r
40                 printf( "\tPrintQuality:    %d\n", pDevModeIn->dmPrintQuality );\r
41         if ( pDevModeIn->dmFields & DM_COLOR )\r
42                 printf( "\tColor:           %d\n", pDevModeIn->dmColor );\r
43         if ( pDevModeIn->dmFields & DM_DUPLEX )\r
44                 printf( "\tDuplex:          %d\n", pDevModeIn->dmDuplex );\r
45         if ( pDevModeIn->dmFields & DM_YRESOLUTION )\r
46                 printf( "\tYResolution:     %d\n", pDevModeIn->dmYResolution );\r
47         if ( pDevModeIn->dmFields & DM_TTOPTION )\r
48                 printf( "\tTTOption:        %d\n", pDevModeIn->dmTTOption );\r
49         if ( pDevModeIn->dmFields & DM_COLLATE )\r
50                 printf( "\tCollate:         %d\n", pDevModeIn->dmCollate );\r
51         if ( pDevModeIn->dmFields & DM_FORMNAME )\r
52                 printf( "\tForm:            [%s]\n", pDevModeIn->dmFormName );\r
53         if ( pDevModeIn->dmFields & DM_LOGPIXELS )\r
54                 printf( "\tLogPixels:       %d\n", pDevModeIn->dmLogPixels );\r
55         if ( pDevModeIn->dmFields & DM_BITSPERPEL )\r
56                 printf( "\tBitsPerPel:      %d\n", pDevModeIn->dmBitsPerPel );\r
57         if ( pDevModeIn->dmFields & DM_PELSWIDTH )\r
58                 printf( "\tPelsWidth:       %d\n", pDevModeIn->dmPelsWidth );\r
59         if ( pDevModeIn->dmFields & DM_PELSHEIGHT )\r
60                 printf( "\tPelsHeight:      %d\n", pDevModeIn->dmPelsHeight );\r
61         if ( pDevModeIn->dmFields & DM_DISPLAYFLAGS )\r
62                 printf( "\tDisplayFlags:    %d\n", pDevModeIn->dmDisplayFlags );\r
63 //      if ( pDevModeIn->dmFields & DM_NUP )\r
64 //              printf( "\tNup:             %d\n", pDevModeIn->dmNup );\r
65         if ( pDevModeIn->dmFields & DM_DISPLAYFREQUENCY )\r
66                 printf( "\tDisplayFrequency:%d\n", pDevModeIn->dmDisplayFrequency );\r
67         if ( pDevModeIn->dmFields & DM_ICMMETHOD )\r
68                 printf( "\tICMMethod:       %d\n", pDevModeIn->dmICMMethod );\r
69         if ( pDevModeIn->dmFields & DM_ICMINTENT )\r
70                 printf( "\tICMIntent:       %d\n", pDevModeIn->dmICMIntent );\r
71         if ( pDevModeIn->dmFields & DM_MEDIATYPE )\r
72                 printf( "\tMediaType:       %d\n", pDevModeIn->dmMediaType );\r
73         if ( pDevModeIn->dmFields & DM_DITHERTYPE )\r
74                 printf( "\tDitherType:      %d\n", pDevModeIn->dmDitherType );\r
75 //      if ( pDevModeIn->dmFields & DM_PANNINGWIDTH )\r
76 //              printf( "\tPanningWidth:    %d\n", pDevModeIn->dmPanningWidth );\r
77 //      if ( pDevModeIn->dmFields & DM_PANNINGHEIGHT )\r
78 //              printf( "\tPanningHeight:   %d\n", pDevModeIn->dmPanningHeight );\r
79 \r
80 #if 0\r
81         if ( bForceIn )\r
82         {\r
83                 printf( "  DEVMODE\n" );\r
84                 Dump( (BYTE*)pDevModeIn, sizeof(DEVMODE), LEADER );\r
85 \r
86                 if ( pDevModeIn->dmDriverExtra )\r
87                 {\r
88                         printf( "  DriverExtra\n" );\r
89                         Dump( (BYTE*)pDevModeIn + sizeof(DEVMODE), pDevModeIn->dmDriverExtra, LEADER );\r
90                 }\r
91         }\r
92 #endif\r
93 \r
94         return;\r
95 }\r
96 \r
97 void print_acl (const char* str, ACL *acl)\r
98 {\r
99         printf ("%s\n", str);\r
100         if (acl == NULL)\r
101                 return;\r
102 \r
103         printf ("\t\tACL Revision \t\t 0x%x\n", acl->AclRevision);\r
104         printf ("\t\tSbz1\t\t 0x%x\n", acl->Sbz1);\r
105         printf ("\t\tSbz2\t\t 0x%x\n", acl->Sbz2);\r
106         printf ("\t\tACL Size\t\t 0x%x\n", acl->AclSize);\r
107         printf ("\t\tACL Count\t\t 0x%x\n", acl->AceCount);\r
108 \r
109 \r
110         return;\r
111 }\r
112 \r
113 void print_sid (const char* str, SID *sid)\r
114 {\r
115         DWORD   i;\r
116 \r
117         printf ("%s\n", str);\r
118         printf ("0x%x\n", sid);\r
119         if (sid == NULL)\r
120                 return;\r
121         printf ("\t\tRevision\t\t0x%x\n", sid->Revision);\r
122         printf ("\t\tSubAuthorityCount\t0x%x\n", sid->SubAuthorityCount);\r
123         printf ("\t\tSubAuthority\n\t");\r
124         while (i < sid->SubAuthorityCount)\r
125         {\r
126                 printf ("\t0x%x", sid->SubAuthority[i]);\r
127                 if (i%4 == 3)\r
128                         printf ("\n\t");\r
129                 i++;\r
130         }\r
131 \r
132         return;\r
133 }\r
134 \r
135 void print_secdesc (SECURITY_DESCRIPTOR *secdesc)\r
136 {\r
137         if (secdesc == NULL)\r
138         {\r
139                 printf ("\tSecurity Descriptor\t= (null)\n");\r
140                 return;\r
141         }\r
142 \r
143         printf ("\tRevision\t= 0x%x\n", secdesc->Revision);\r
144         printf ("\tSbz1\t\t= 0x%x\n", secdesc->Sbz1);\r
145 #if 0\r
146         print_sid ("\tOwner\t\t= ", secdesc->Owner);\r
147         print_sid ("\tGroup\t\t= ",secdesc->Group);\r
148         print_acl ("\tSacl\t\t= ", secdesc->Sacl);\r
149         print_acl ("\tDacl\t\t= ", secdesc->Dacl);\r
150 #endif\r
151         return;\r
152 }\r
153 \r
154 void PrintLastError()\r
155 {\r
156         LPVOID          lpMsgBuf;\r
157         DWORD           status;\r
158 \r
159         status = GetLastError();\r
160 \r
161         FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | \r
162                 FORMAT_MESSAGE_IGNORE_INSERTS, NULL, GetLastError(),\r
163                 MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language\r
164                 (LPTSTR) &lpMsgBuf, 0, NULL);\r
165         printf ("ERROR  [0x%x] : %s\n", status, (char*)lpMsgBuf);\r
166         LocalFree (lpMsgBuf);\r
167 \r
168                 return;\r
169 }\r
170 \r
171 \r
172 void print_job_info_1(PJOB_INFO_1 info)\r
173 {\r
174         printf ("\tJob ID\t\t= %d\n",           info->JobId);\r
175         printf ("\tPrinter Name\t= %s\n",       info->pPrinterName);\r
176         printf ("\tMachine Name\t= %s\n",       info->pMachineName);\r
177         printf ("\tUser Name\t= %s\n",          info->pUserName);\r
178         printf ("\tDocument\t= %s\n",           info->pDocument);\r
179         printf ("\tDatatype\t= %s\n",           info->pDatatype);\r
180         printf ("\tStatus\t\t= %s\n",                   info->pStatus);\r
181         printf ("\tStatus\t= %d\n",             info->Status);\r
182         printf ("\tPriority\t= %d\n",           info->Priority);\r
183         printf ("\tPosition\t= %d\n",           info->Position);\r
184         printf ("\tTotal Pages\t= %d\n",        info->TotalPages);\r
185         printf ("\tPages Printed\t= %d\n",      info->PagesPrinted);\r
186         printf ("\tSubmitted (DD:MM:YY HH:MM:SS)\t= %d:%d:%d %d:%d:%d UTC\n",\r
187                         info->Submitted.wDay, info->Submitted.wMonth,\r
188                         info->Submitted.wYear, info->Submitted.wHour,\r
189                         info->Submitted.wMinute, info->Submitted.wSecond);\r
190 \r
191         return;\r
192 }\r
193 \r
194 void print_job_info_2(PJOB_INFO_2 info)\r
195 {\r
196         printf ("\tJob ID\t\t= %d\n",           info->JobId);\r
197         printf ("\tPrinter Name\t= %s\n",       info->pPrinterName);\r
198         printf ("\tMachine Name\t= %s\n",       info->pMachineName);\r
199         printf ("\tUser Name\t= %s\n",          info->pUserName);\r
200         printf ("\tDocument\t= %s\n",           info->pDocument);\r
201         printf ("\tDatatype\t= %s\n",           info->pDatatype);\r
202         printf ("\tNotify Name\t= %s\n",        info->pNotifyName);\r
203         printf ("\tPrint Processor\t= %s\n",    info->pPrintProcessor);\r
204         printf ("\tParameters\t= %s\n",         info->pParameters);\r
205         printf ("\tDriver Name\t= %s\n",                info->pDriverName);\r
206         printf ("\tStatus\t\t= %s\n",           info->pStatus);\r
207         printf ("\tStatus\t\t= %d\n",           info->Status);\r
208         printf ("\tPriority\t= %d\n",           info->Priority);\r
209         printf ("\tPosition\t= %d\n",           info->Position);\r
210         printf ("\tTotal Pages\t= %d\n",        info->TotalPages);\r
211         printf ("\tPages Printed\t= %d\n",      info->PagesPrinted);\r
212         printf ("\tStart Time\t= %d\n",         info->StartTime);\r
213         printf ("\tUntil Time\t= %d\n",         info->UntilTime);\r
214         printf ("\tTime\t\t= %d\n",             info->Time);\r
215         printf ("\tSize\t\t= %d\n",                     info->Size);\r
216         printf ("\tSubmitted (DD:MM:YY HH:MM:SS)\t= %d:%d:%d %d:%d:%d UTC\n",\r
217                         info->Submitted.wDay, info->Submitted.wMonth,\r
218                         info->Submitted.wYear, info->Submitted.wHour,\r
219                         info->Submitted.wMinute, info->Submitted.wSecond);\r
220         printf ("\tDevice Mode Information\n");\r
221         printf ("\t-----------------------\n");\r
222         print_devmode (info->pDevMode);\r
223         printf ("\tSecurity Descriptor Information\n");\r
224         printf ("\t-------------------------------\n");\r
225         print_secdesc (info->pSecurityDescriptor);\r
226 \r
227         return;\r
228 }\r
229 \r
230 void print_job_info_3(PJOB_INFO_3 info)\r
231 {\r
232         printf ("\tJob ID\t\t= %d\n",           info->JobId);\r
233         printf ("\tJob ID Next Job\t= %d\n",    info->NextJobId);\r
234         printf ("\tReserved (must be 0)\t= %d\n",       info->Reserved);\r
235 \r
236         return;\r
237 }\r
238 \r
239 void print_monitor_info_1 (PMONITOR_INFO_1 info)\r
240 {\r
241                 printf ("\tMonitor Name\t= %s\n",       info->pName);\r
242 \r
243                 return;\r
244 }\r
245 \r
246 void print_monitor_info_2 (PMONITOR_INFO_2 info)\r
247 {\r
248                 printf ("\tMonitor Name\t= %s\n",       info->pName);\r
249                 printf ("\tEnvironment\t= %s\n",        info->pEnvironment);\r
250                 printf ("\tDLL Name\t= %s\n",   info->pDLLName);\r
251 \r
252                 return;\r
253 }\r
254 \r
255 void print_form_info_1 (PFORM_INFO_1 info)\r
256 {\r
257 \r
258                 printf ("\tForm Name\t= %s\n",  info->pName);\r
259                 printf ("\tFlags\t\t= 0x%x\n",          info->Flags);\r
260                 printf ("\tSize\t\t= %d x %d\n", info->Size.cx, info->Size.cy);\r
261                 printf ("\tRectangle\t= [left]%d [right]%d [top]%d [bottom]%d\n", \r
262                                 info->ImageableArea.left, info->ImageableArea.right,\r
263                                 info->ImageableArea.top,        info->ImageableArea.bottom);\r
264 \r
265                 return;\r
266 }\r
267 \r
268 void print_printer_info_1 (PPRINTER_INFO_1 info)\r
269 {\r
270         \r
271                         printf ("\tPrinter Name\t= %s\n", info->pName);\r
272                         printf ("\tDescription\t= %s\n", info->pDescription);\r
273                         printf ("\tComment\t\t= %s\n", info->pComment);\r
274                         printf ("\tFlags\t\t= 0x%x\n", info->Flags);\r
275 \r
276                         return;\r
277 }\r
278 \r
279 void print_printer_info_2 (PPRINTER_INFO_2 info)\r
280 {\r
281                         printf ("\tServer Name\t\t= %s\n",      info->pServerName);\r
282                         printf ("\tPrinter Name\t\t= %s\n",     info->pPrinterName);\r
283                         printf ("\tPort Name\t\t= %s\n",                info->pPortName);\r
284                         printf ("\tShare Name\t\t= %s\n",               info->pShareName);\r
285                         printf ("\tDriver Name\t\t= %s\n",      info->pDriverName);\r
286                         printf ("\tComment\t\t\t= %s\n",                info->pComment);\r
287                         printf ("\tLocation\t\t= %s\n",         info->pLocation);\r
288                         printf ("\tSeparator File\t\t= %s\n",           info->pSepFile);\r
289                         printf ("\tDefault Data Type\t= %s\n",  info->pDatatype);\r
290                         printf ("\tPrint Processor\t\t= %s\n",  info->pPrintProcessor);\r
291                         printf ("\tParameters\t\t= %s\n",                       info->pParameters);\r
292 \r
293                         printf ("\tAttributes\t\t= 0x%x\n",             info->Attributes);\r
294                         printf ("\tPriority\t\t= 0x%x\n",               info->Priority);\r
295                         printf ("\tDefault Priority\t= 0x%x\n",         info->DefaultPriority);\r
296                         printf ("\tStart Time\t\t= 0x%x\n",             info->StartTime);\r
297                         printf ("\tUntil Time\t\t= 0x%x\n",             info->UntilTime);\r
298                         printf ("\tStatus\t\t\t= 0x%x\n",                       info->Status);\r
299                         printf ("\tcJobs\t\t\t= 0x%x\n",                        info->cJobs);\r
300                         printf ("\tAverage PPM\t\t= 0x%x\n",            info->AveragePPM);\r
301 \r
302                         printf ("\tDevice Mode Information\n");\r
303                         printf ("\t-----------------------\n");\r
304                         print_devmode (info->pDevMode);\r
305 #if 0\r
306                         printf ("\tSecurity Descriptor Information\n");\r
307                         printf ("\t-------------------------------\n");\r
308                         print_secdesc (info->pSecurityDescriptor);\r
309 #endif \r
310                         return;\r
311 }\r
312 \r
313 void print_printer_info_5 (PPRINTER_INFO_5 info)\r
314 {\r
315 \r
316                         printf ("\tPrinter Name\t\t\t= %s\n",   info->pPrinterName);\r
317                         printf ("\tPort Name\t\t\t= %s\n",              info->pPortName);\r
318                         printf ("\tAttributes\t\t\t= 0x%x\n",           info->Attributes);\r
319                         printf ("\tDev NotSelect Timeout\t= 0x%x\n",    info->DeviceNotSelectedTimeout);\r
320                         printf ("\tTX RetryTimeout\t\t= 0x%x\n",                info->TransmissionRetryTimeout);\r
321 \r
322                         return;\r
323 \r
324 }\r
325 \r
326 void print_printprocessor_info_1 (PPRINTPROCESSOR_INFO_1 info)\r
327 {\r
328 \r
329         printf ("\tPrint Processor Name\t= %s\n", info->pName);\r
330 \r
331         return;\r
332 }\r
333 \r
334 void print_driver_info_1 (PDRIVER_INFO_1 info)\r
335 {\r
336         printf ("\tDriver Name\t= %s\n\n", info->pName);\r
337 \r
338         return;\r
339 }\r
340 \r
341 void print_driver_info_2 (PDRIVER_INFO_2 info)\r
342 {\r
343                 printf ("\tDriver Name\t= %s\n",        info->pName);\r
344                 printf ("\tEnvironment\t= %s\n",        info->pEnvironment);\r
345                 printf ("\tVersion\t\t= %d\n",          info->cVersion);\r
346                 printf ("\tDriver Path\t= %s\n",        info->pDriverPath);\r
347                 printf ("\tData File\t= %s\n",          info->pDataFile);\r
348                 printf ("\tConfig File\t= %s\n\n",      info->pConfigFile);\r
349 \r
350                 return;\r
351 }\r
352 \r
353 void print_driver_info_3 (PDRIVER_INFO_3 info)\r
354 {\r
355                 char            *ptr = NULL;\r
356 \r
357                 printf ("\tDriver Name\t= %s\n",        info->pName);\r
358                 printf ("\tEnvironment\t= %s\n",        info->pEnvironment);\r
359                 printf ("\tVersion\t\t= %d\n",          info->cVersion);\r
360                 printf ("\tDriver Path\t= %s\n",        info->pDriverPath);\r
361                 printf ("\tData File\t= %s\n",          info->pDataFile);\r
362                 printf ("\tConfig File\t= %s\n",        info->pConfigFile);\r
363                 printf ("\tHelp Path\t= %s\n",          info->pHelpFile);\r
364                 printf ("\tMonitor Name\t= %s\n",       info->pMonitorName);\r
365                 printf ("\tData Type\t= %s\n",          info->pDefaultDataType);\r
366                 ptr = (char*)info->pDependentFiles;\r
367                 while ((ptr != NULL) && (*ptr != '\0'))\r
368                 {\r
369                         printf ("\tDependent Files\t= %s\n", ptr);\r
370                         for (;*ptr != '\0'; ptr++)\r
371                                 /* printf ("%s\n", ptr); */\r
372                                 ;\r
373                         ptr++;\r
374                 }\r
375 \r
376                 return;\r
377 }\r
378 \r
379 void print_driver_info_4 (PDRIVER_INFO_4 info)\r
380 {\r
381                 char            *ptr = NULL;\r
382 \r
383                 printf ("\tDriver Name\t= %s\n",        info->pName);\r
384                 printf ("\tEnvironment\t= %s\n",        info->pEnvironment);\r
385                 printf ("\tVersion\t\t= %d\n",          info->cVersion);\r
386                 printf ("\tDriver Path\t= %s\n",        info->pDriverPath);\r
387                 printf ("\tData File\t= %s\n",          info->pDataFile);\r
388                 printf ("\tConfig File\t= %s\n",        info->pConfigFile);\r
389                 printf ("\tHelp Path\t= %s\n",          info->pHelpFile);\r
390                 printf ("\tMonitor Name\t= %s\n",       info->pMonitorName);\r
391                 printf ("\tData Type\t= %s\n",          info->pDefaultDataType);\r
392                 printf ("\tPrevious Names\t= %s\n",     info->pszzPreviousNames);\r
393                 ptr = (char*)info->pDependentFiles;\r
394                 while ((ptr != NULL) && (*ptr != '\0'))\r
395                 {\r
396                         printf ("\tDependent Files\t= %s\n", ptr);\r
397                         for (;*ptr != '\0'; ptr++)\r
398                                 /* printf ("%s\n", ptr); */\r
399                                 ;\r
400                         ptr++;\r
401                 }\r
402 \r
403                 return;\r
404 }\r
405 \r
406 void print_driver_info_6 (PDRIVER_INFO_6 info)\r
407 {\r
408                 char            *ptr = NULL;\r
409 \r
410                 printf ("\tDriver Name\t= %s\n",        info->pName);\r
411                 printf ("\tEnvironment\t= %s\n",        info->pEnvironment);\r
412                 printf ("\tVersion\t\t= %d\n",          info->cVersion);\r
413                 printf ("\tDriver Path\t= %s\n",        info->pDriverPath);\r
414                 printf ("\tData File\t= %s\n",          info->pDataFile);\r
415                 printf ("\tConfig File\t= %s\n",        info->pConfigFile);\r
416                 printf ("\tHelp Path\t= %s\n",          info->pHelpFile);\r
417                 printf ("\tMonitor Name\t= %s\n",       info->pMonitorName);\r
418                 printf ("\tData Type\t= %s\n",          info->pDefaultDataType);\r
419                 printf ("\tPrevious Names\t= %s\n",     info->pszzPreviousNames);\r
420                 ptr = (char*)info->pDependentFiles;\r
421                 if (ptr != NULL)\r
422                 {\r
423                         while (*ptr != '\0')\r
424                         {\r
425                                 printf ("\tDependent Files\t= %s\n", ptr);\r
426                                 for (;*ptr != '\0'; ptr++)\r
427                                         /* printf ("%s\n", ptr); */\r
428                                         ;\r
429                                 ptr++;\r
430                         }\r
431                 }\r
432                 else\r
433                 {\r
434                         printf ("\tPrevious Names\t= (null)\n");\r
435                 }\r
436 \r
437 \r
438                 ptr = (char*)info->pszzPreviousNames;\r
439                 if (ptr != NULL)\r
440                 {\r
441                         while (*ptr != '\0')\r
442                         {\r
443                                 printf ("\tPrevious Names\t= %s\n", ptr);\r
444                                 for (;*ptr != '\0'; ptr++)\r
445                                         /* printf ("%s\n", ptr); */\r
446                                         ;\r
447                                 ptr++;\r
448                         }\r
449                 }\r
450                 else\r
451                 {\r
452                         printf ("\tPrevious Names\t= (null)\n");\r
453                 }\r
454 \r
455                 printf ("\tDriver Date\t= %d\n", info->ftDriverDate);\r
456                 printf ("\tDriver Version\t= %d\n", info->dwlDriverVersion);\r
457                 printf ("\tManufacture Name = %s\n", info->pszMfgName);\r
458                 printf ("\tOEM URL\t\t= %s\n", info->pszOEMUrl);\r
459                 printf ("\tHardware ID\t= %s\n", info->pszHardwareID);\r
460                 printf ("\tProvider\t= %s\n", info->pszProvider);\r
461 \r
462                 return;\r
463 }\r
464 \r
465 void print_doc_info_1 (PDOC_INFO_1 info)\r
466 {\r
467         printf ("\tDocument Name\t= %s\n", info->pDocName);\r
468         printf ("\tOutput Filename\t= %s\n", info->pOutputFile);\r
469         printf ("\tDatatype\t= %s\n", info->pDatatype);\r
470 \r
471         return;\r
472 }\r
473 \r
474 void print_printer_enum_values (PRINTER_ENUM_VALUES *info)\r
475 {\r
476         DWORD   i = 0;;\r
477 \r
478         printf ("\tValue Name\t= %s [0x%x]\n", info->pValueName, info->cbValueName);\r
479         printf ("\tType\t\t= 0x%x\n", info->dwType);\r
480         printf ("\tSize\t\t= 0x%x\n", info->cbData);\r
481 \r
482         while (i < info->cbData)\r
483         {\r
484                 printf ("\t0x%x", *(info->pData++));\r
485                 if (i%4 == 3)\r
486                         printf ("\n");\r
487                 i++;\r
488         }\r
489         printf ("\n");\r
490 \r
491         return;\r
492 }