70c51b5f604156f78219537484609a987a557af9
[reactos.git] / lib / rosrtl / misc / devmode.c
1 #include <windows.h>
2 #include <string.h>
3 #include <rosrtl/devmode.h>
4
5 void
6 RosRtlDevModeA2W ( LPDEVMODEW pW, const LPDEVMODEA pA )
7 {
8 #define SIZEOF_DEVMODEA_300 124
9 #define SIZEOF_DEVMODEA_400 148
10 #define SIZEOF_DEVMODEA_500 156
11 #define SIZEOF_DEVMODEW_300 188
12 #define SIZEOF_DEVMODEW_400 212
13 #define SIZEOF_DEVMODEW_500 220
14
15 #define COPYS(f,len) MultiByteToWideChar ( CP_THREAD_ACP, 0, pA->f, len, pW->f, len )
16 #define COPYN(f) pW->f = pA->f
17   memset ( pW, 0, sizeof(DEVMODEW) );
18   COPYS(dmDeviceName, CCHDEVICENAME );
19   COPYN(dmSpecVersion);
20   COPYN(dmDriverVersion);
21   switch ( pA->dmSize )
22     {
23     case SIZEOF_DEVMODEA_300:
24       pW->dmSize = SIZEOF_DEVMODEW_300;
25       break;
26     case SIZEOF_DEVMODEA_400:
27       pW->dmSize = SIZEOF_DEVMODEW_400;
28       break;
29     case SIZEOF_DEVMODEA_500:
30     default: /* FIXME what to do??? */
31       pW->dmSize = SIZEOF_DEVMODEW_500;
32       break;
33     }
34   COPYN(dmDriverExtra);
35   COPYN(dmFields);
36   COPYN(dmPosition.x);
37   COPYN(dmPosition.y);
38   COPYN(dmScale);
39   COPYN(dmCopies);
40   COPYN(dmDefaultSource);
41   COPYN(dmPrintQuality);
42   COPYN(dmColor);
43   COPYN(dmDuplex);
44   COPYN(dmYResolution);
45   COPYN(dmTTOption);
46   COPYN(dmCollate);
47   COPYS(dmFormName,CCHFORMNAME);
48   COPYN(dmLogPixels);
49   COPYN(dmBitsPerPel);
50   COPYN(dmPelsWidth);
51   COPYN(dmPelsHeight);
52   COPYN(dmDisplayFlags); // aka dmNup
53   COPYN(dmDisplayFrequency);
54
55   if ( pA->dmSize <= SIZEOF_DEVMODEA_300 )
56     return; // we're done with 0x300 fields
57
58   COPYN(dmICMMethod);
59   COPYN(dmICMIntent);
60   COPYN(dmMediaType);
61   COPYN(dmDitherType);
62   COPYN(dmReserved1);
63   COPYN(dmReserved2);
64
65   if ( pA->dmSize <= SIZEOF_DEVMODEA_400 )
66     return; // we're done with 0x400 fields
67
68   COPYN(dmPanningWidth);
69   COPYN(dmPanningHeight);
70
71   return;
72
73 #undef COPYN
74 #undef COPYS
75
76 #undef SIZEOF_DEVMODEA_300
77 #undef SIZEOF_DEVMODEA_400
78 #undef SIZEOF_DEVMODEA_500
79 #undef SIZEOF_DEVMODEW_300
80 #undef SIZEOF_DEVMODEW_400
81 #undef SIZEOF_DEVMODEW_500
82 }