mshtml/tests: Add a trailing '\n' to ok() calls.
[wine] / dlls / commdlg.dll16 / printdlg.c
1 /*
2  * COMMDLG - Print Dialog
3  *
4  * Copyright 1994 Martin Ayotte
5  * Copyright 1996 Albrecht Kleine
6  * Copyright 1999 Klaas van Gend
7  * Copyright 2000 Huw D M Davies
8  *
9  * This library is free software; you can redistribute it and/or
10  * modify it under the terms of the GNU Lesser General Public
11  * License as published by the Free Software Foundation; either
12  * version 2.1 of the License, or (at your option) any later version.
13  *
14  * This library is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
17  * Lesser General Public License for more details.
18  *
19  * You should have received a copy of the GNU Lesser General Public
20  * License along with this library; if not, write to the Free Software
21  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
22  */
23
24 #include <ctype.h>
25 #include <stdlib.h>
26 #include <stdarg.h>
27 #include <stdio.h>
28 #include <string.h>
29
30 #define NONAMELESSUNION
31 #define NONAMELESSSTRUCT
32 #include "windef.h"
33 #include "winbase.h"
34 #include "wingdi.h"
35 #include "wine/wingdi16.h"
36 #include "winuser.h"
37 #include "wine/winuser16.h"
38 #include "commdlg.h"
39 #include "dlgs.h"
40 #include "wine/debug.h"
41 #include "cderr.h"
42 #include "winspool.h"
43 #include "cdlg16.h"
44
45 WINE_DEFAULT_DEBUG_CHANNEL(commdlg);
46
47 static void global_handle_to_16( HGLOBAL16 *h16, HGLOBAL handle )
48 {
49     DWORD size;
50     HGLOBAL16 ret;
51
52     if (!handle) return;
53     size = GlobalSize( handle );
54     if (*h16) ret = GlobalReAlloc16( GMEM_MOVEABLE, *h16, size );
55     else ret = GlobalAlloc16( GMEM_MOVEABLE, size );
56     if (ret)
57     {
58         void *src = GlobalLock( handle );
59         void *dst = GlobalLock16( ret );
60         memcpy( dst, src, size );
61         GlobalUnlock( handle );
62         GlobalUnlock16( ret );
63         *h16 = ret;
64     }
65 }
66
67 static HGLOBAL global_handle_from_16( HGLOBAL16 handle )
68 {
69     DWORD size;
70     HGLOBAL ret;
71
72     if (!handle) return 0;
73     size = GlobalSize16( handle );
74     if ((ret = GlobalAlloc( GMEM_MOVEABLE, size )))
75     {
76         void *src = GlobalLock16( handle );
77         void *dst = GlobalLock( ret );
78         memcpy( dst, src, size );
79         GlobalUnlock16( handle );
80         GlobalUnlock( ret );
81     }
82     return ret;
83 }
84
85 /**********************************************************************
86  *
87  *      16 bit commdlg
88  */
89
90 /***********************************************************************
91  *           PrintDlg   (COMMDLG.20)
92  *
93  *  Displays the PRINT dialog box, which enables the user to specify
94  *  specific properties of the print job.
95  *
96  * RETURNS
97  *  nonzero if the user pressed the OK button
98  *  zero    if the user cancelled the window or an error occurred
99  *
100  * BUGS
101  *  * calls up to the 32-bit versions of the Dialogs, which look different
102  *  * Customizing is *not* implemented.
103  */
104
105 BOOL16 WINAPI PrintDlg16( LPPRINTDLG16 lppd )
106 {
107     PRINTDLGA pd32;
108     BOOL ret;
109
110     pd32.lStructSize = sizeof(pd32);
111     pd32.Flags       = lppd->Flags & ~(PD_ENABLEPRINTTEMPLATE | PD_ENABLEPRINTTEMPLATEHANDLE |
112                                        PD_ENABLESETUPTEMPLATE | PD_ENABLESETUPTEMPLATEHANDLE |
113                                        PD_ENABLEPRINTHOOK | PD_ENABLESETUPHOOK);
114     pd32.hwndOwner   = HWND_32(lppd->hwndOwner);
115     pd32.hDevMode    = global_handle_from_16( lppd->hDevMode );
116     pd32.hDevNames   = global_handle_from_16( lppd->hDevNames );
117     pd32.nFromPage   = lppd->nFromPage;
118     pd32.nToPage     = lppd->nToPage;
119     pd32.nMinPage    = lppd->nMinPage;
120     pd32.nMaxPage    = lppd->nMaxPage;
121     pd32.nCopies     = lppd->nCopies;
122
123     if (lppd->Flags & (PD_ENABLEPRINTTEMPLATE | PD_ENABLEPRINTTEMPLATEHANDLE |
124                        PD_ENABLESETUPTEMPLATE | PD_ENABLESETUPTEMPLATEHANDLE))
125         FIXME( "custom templates no longer supported, using default\n" );
126     if (lppd->Flags & PD_ENABLEPRINTHOOK)
127         FIXME( "custom print hook %p no longer supported\n", lppd->lpfnPrintHook );
128     if (lppd->Flags & PD_ENABLESETUPHOOK)
129         FIXME( "custom setup hook %p no longer supported\n", lppd->lpfnSetupHook );
130
131     if ((ret = PrintDlgA( &pd32 )))
132     {
133         lppd->hDC = HDC_16( pd32.hDC );
134         global_handle_to_16( &lppd->hDevNames, pd32.hDevNames );
135         global_handle_to_16( &lppd->hDevMode, pd32.hDevMode );
136
137         lppd->nFromPage   = pd32.nFromPage;
138         lppd->nToPage     = pd32.nToPage;
139         lppd->nMinPage    = pd32.nMinPage;
140         lppd->nMaxPage    = pd32.nMaxPage;
141         lppd->nCopies     = pd32.nCopies;
142     }
143     GlobalFree( pd32.hDevNames );
144     GlobalFree( pd32.hDevMode );
145     return ret;
146 }
147
148 /***********************************************************************
149  *           PrintDlgProc   (COMMDLG.21)
150  */
151 BOOL16 CALLBACK PrintDlgProc16(HWND16 hDlg16, UINT16 uMsg, WPARAM16 wParam, LPARAM lParam)
152 {
153     FIXME( "%04x %04x %04x %08lx: stub\n", hDlg16, uMsg, wParam, lParam );
154     return FALSE;
155 }
156
157 /***********************************************************************
158  *           PrintSetupDlgProc   (COMMDLG.22)
159  */
160 BOOL16 CALLBACK PrintSetupDlgProc16(HWND16 hWnd16, UINT16 wMsg, WPARAM16 wParam,
161                                    LPARAM lParam)
162 {
163   HWND hWnd = HWND_32(hWnd16);
164   switch (wMsg)
165     {
166     case WM_INITDIALOG:
167       TRACE("WM_INITDIALOG lParam=%08lX\n", lParam);
168       ShowWindow(hWnd, SW_SHOWNORMAL);
169       return (TRUE);
170     case WM_COMMAND:
171       switch (wParam) {
172       case IDOK:
173         EndDialog(hWnd, TRUE);
174         return(TRUE);
175       case IDCANCEL:
176         EndDialog(hWnd, FALSE);
177         return(TRUE);
178       }
179       return(FALSE);
180     }
181   return FALSE;
182 }