+struct msprinter_device
+{
+ HDC hdc, hcdc; /* Printer and the comp. DCs */
+ HANDLE hprinter;
+ Lisp_Object fontlist;
+ char* name;
+ DEVMODE *devmode, *devmode_mirror;
+ size_t devmode_size;
+};
+
+#define DEVICE_MSPRINTER_DATA(d) DEVICE_TYPE_DATA (d, msprinter)
+#define DEVICE_MSPRINTER_HDC(d) (DEVICE_MSPRINTER_DATA (d)->hdc)
+#define DEVICE_MSPRINTER_HCDC(d) (DEVICE_MSPRINTER_DATA (d)->hcdc)
+#define DEVICE_MSPRINTER_HPRINTER(d) (DEVICE_MSPRINTER_DATA (d)->hprinter)
+#define DEVICE_MSPRINTER_FONTLIST(d) (DEVICE_MSPRINTER_DATA (d)->fontlist)
+#define DEVICE_MSPRINTER_NAME(d) (DEVICE_MSPRINTER_DATA (d)->name)
+#define DEVICE_MSPRINTER_DEVMODE(d) (DEVICE_MSPRINTER_DATA (d)->devmode)
+#define DEVICE_MSPRINTER_DEVMODE_MIRROR(d) \
+ (DEVICE_MSPRINTER_DATA (d)->devmode_mirror)
+#define DEVICE_MSPRINTER_DEVMODE_SIZE(d) \
+ (DEVICE_MSPRINTER_DATA (d)->devmode_size)
+
+#define CONSOLE_TYPESYM_MSPRINTER_P(typesym) EQ (typesym, Qmsprinter)
+#define DEVICE_MSPRINTER_P(dev) CONSOLE_TYPESYM_MSPRINTER_P (DEVICE_TYPE (dev))
+#define CHECK_MSPRINTER_DEVICE(z) CHECK_DEVICE_TYPE (z, msprinter)
+#define CONCHECK_MSPRINTER_DEVICE(z) CONCHECK_DEVICE_TYPE (z, msprinter)
+
+/* Printer functions in device-msw.c */
+DEVMODE* msprinter_get_devmode_copy (struct device *d);
+void msprinter_apply_devmode (struct device *d, DEVMODE *devmode);
+
+/* Printer functions in frame-msw.c */
+void msprinter_start_page (struct frame *f);
+
+/* Common checks */
+
+#define DEVICE_MSGDI_P(dev) (DEVICE_MSWINDOWS_P(dev) || DEVICE_MSPRINTER_P(dev))
+#define CHECK_MSGDI_DEVICE(d) \
+ do { \
+ CHECK_DEVICE (d); \
+ if (!(DEVICEP (d) && DEVICE_MSGDI_P(XDEVICE(d)))) \
+ dead_wrong_type_argument \
+ (list3 (Qor, Qmswindows, Qmsprinter), d); \
+ } while (0)
+#define CONCHECK_MSGDI_DEVICE(d) \
+ do { \
+ CHECK_DEVICE (d); \
+ if (!(DEVICEP (d) && DEVICE_MSGDI_P(XDEVICE(d)))) \
+ wrong_type_argument \
+ (list3 (Qor, Qmswindows, Qmsprinter), d); \
+ } while (0)