-
-
Notifications
You must be signed in to change notification settings - Fork 31
/
lprint.h
175 lines (149 loc) · 6.97 KB
/
lprint.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
//
// Header file for LPrint, a Label Printer Application
//
// Copyright © 2019-2023 by Michael R Sweet.
//
// Licensed under Apache License v2.0. See the file "LICENSE" for more
// information.
//
#ifndef LPRINT_H
# define LPRINT_H
# include "config.h"
# include <pappl/pappl.h>
# include <math.h>
//
// Debug macro...
//
# ifdef DEBUG
# define LPRINT_DEBUG(...) fprintf(stderr, __VA_ARGS__)
# else
# define LPRINT_DEBUG(...)
# endif // DEBUG
//
// Function annotations...
//
# if defined(__GNUC__) || defined(__has_extension)
# define LPRINT_FORMAT(a,b) __attribute__ ((__format__(__printf__, a,b)))
# define LPRINT_NONNULL(...) __attribute__ ((nonnull(__VA_ARGS__)))
# define LPRINT_NORETURN __attribute__ ((noreturn))
# else
# define LPRINT_FORMAT(a,b)
# define LPRINT_NONNULL(...)
# define LPRINT_NORETURN
# endif // __GNUC__ || __has_extension
//
// The CUPS API is changed in CUPS v3...
//
# if CUPS_VERSION_MAJOR < 3
# define CUPS_ENCODING_ISO8859_1 CUPS_ISO8859_1
# define CUPS_ENCODING_JIS_X0213 CUPS_JIS_X0213
# define cups_len_t int
# define cups_page_header_t cups_page_header2_t
# define cupsArrayNew cupsArrayNew3
# define cupsLangGetName(lang) lang->language
# define cupsRasterReadHeader cupsRasterReadHeader2
# define cupsRasterWriteHeader cupsRasterWriteHeader2
# define cupsTempFd(prefix,suffix,buffer,bufsize) cupsTempFd(buffer,bufsize)
# define httpConnect httpConnect2
# define httpDecode64(out,outlen,in,end) httpDecode64_2(out,outlen,in)
# define httpEncode64(out,outlen,in,inlen,url) httpEncode64_2(out,outlen,in,inlen)
# define httpGetDateString httpGetDateString2
# define httpRead httpRead2
# define httpReconnect httpReconnect2
# define httpStatusString httpStatus
# define httpWrite httpWrite2
# define httpWriteResponse(http,code) (httpWriteResponse(http,code) == 0)
# define IPP_NUM_CAST (int)
# if CUPS_VERSION_MINOR < 3
# define HTTP_STATUS_FOUND (http_status_t)302
# endif // CUPS_VERSION_MINOR < 3
# if CUPS_VERSION_MINOR < 5
# define cupsArrayGetCount cupsArrayCount
# define cupsArrayGetElement(a,n) cupsArrayIndex(a,(int)n)
# define cupsArrayGetFirst cupsArrayFirst
# define cupsArrayGetLast cupsArrayLast
# define cupsArrayGetNext cupsArrayNext
# define cupsArrayGetPrev cupsArrayPrev
# define cupsGetUser cupsUser
# define httpAddrConnect httpAddrConnect2
# define httpAddrGetFamily httpAddrFamily
# define httpAddrGetLength httpAddrLength
# define httpAddrGetString httpAddrString
# define httpAddrIsLocalhost httpAddrLocalhost
# define httpSetEncryption(http,e) (httpEncryption(http,e)>=0)
# define ippGetFirstAttribute ippFirstAttribute
# define ippGetNextAttribute ippNextAttribute
typedef cups_array_func_t cups_array_cb_t;
typedef cups_acopy_func_t cups_acopy_cb_t;
typedef cups_afree_func_t cups_afree_cb_t;
typedef cups_raster_iocb_t cups_raster_cb_t;
typedef ipp_copycb_t ipp_copy_cb_t;
# else
# define httpDecode64 httpDecode64_3
# define httpEncode64 httpEncode64_3
# endif // CUPS_VERSION_MINOR < 5
# else
# define cups_len_t size_t
# define cups_utf8_t char
# define IPP_NUM_CAST (size_t)
# endif // CUPS_VERSION_MAJOR < 3
//
// Constants...
//
# define LPRINT_TESTPAGE_MIMETYPE "application/vnd.lprint-test"
# define LPRINT_TESTPAGE_HEADER "T*E*S*T*P*A*G*E*"
# ifdef LPRINT_EXPERIMENTAL
# define LPRINT_BROTHER_PT_CBP_MIMETYPE "application/vnd.brother-pt-cbp"
# define LPRINT_CPCL_MIMETYPE "application/vnd.zebra-cpcl"
# endif // LPRINT_EXPERIMENTAL
# define LPRINT_EPL2_MIMETYPE "application/vnd.eltron-epl"
# define LPRINT_SLP_MIMETYPE "application/vnd.sii-slp"
# define LPRINT_TSPL_MIMETYPE "application/vnd.tsc-tspl"
# define LPRINT_ZPL_MIMETYPE "application/vnd.zebra-zpl"
//
// Types...
//
typedef struct lprint_dither_s // Dithering state
{
pappl_dither_t dither; // Dither matrix to use
unsigned char *input[4]; // Input lines for dithering (only 3 are needed, 4 makes it easier for ring buffer)
unsigned in_width, // Width in pixels
in_height, // Height in lines
in_left, // Left (starting) pixel
in_top, // Top-most pixel
in_bottom; // Bottom-most pixel
unsigned char in_bpp, // Input bits per pixel (1 or 8)
in_white; // Input white pixel value (0 or 255)
unsigned char *output, // Output bitmap
out_white; // Output white pixel value (0 or 255)
unsigned out_width; // Output width in bytes
} lprint_dither_t;
typedef struct lprint_cmedia_s // Custom label sizes (per-printer/source)
{
char custom_name[PAPPL_MAX_SOURCE][128];
// Custom media size names
} lprint_cmedia_t;
//
// Functions...
//
extern bool lprintDitherAlloc(lprint_dither_t *dither, pappl_job_t *job, pappl_pr_options_t *options, cups_cspace_t out_cspace, double out_gamma);
extern void lprintDitherFree(lprint_dither_t *dither);
extern bool lprintDitherLine(lprint_dither_t *dither, unsigned y, const unsigned char *line);
extern bool lprintMediaLoad(pappl_printer_t *printer, pappl_pr_driver_data_t *data);
extern const char *lprintMediaMatch(pappl_printer_t *printer, int source, int width, int length);
extern bool lprintMediaSave(pappl_printer_t *printer, pappl_pr_driver_data_t *data);
extern bool lprintMediaUI(pappl_client_t *client, pappl_printer_t *printer);
extern void lprintMediaUpdate(pappl_printer_t *printer, pappl_pr_driver_data_t *data);
# ifdef LPRINT_EXPERIMENTAL
extern bool lprintBrother(pappl_system_t *system, const char *driver_name, const char *device_uri, const char *device_id, pappl_pr_driver_data_t *data, ipp_t **attrs, void *cbdata);
extern bool lprintCPCL(pappl_system_t *system, const char *driver_name, const char *device_uri, const char *device_id, pappl_pr_driver_data_t *driver_data, ipp_t **driver_attrs, void *cbdata);
# endif // LPRINT_EXPERIMENTAL
extern bool lprintDYMO(pappl_system_t *system, const char *driver_name, const char *device_uri, const char *device_id, pappl_pr_driver_data_t *data, ipp_t **attrs, void *cbdata);
extern bool lprintEPL2(pappl_system_t *system, const char *driver_name, const char *device_uri, const char *device_id, pappl_pr_driver_data_t *data, ipp_t **attrs, void *cbdata);
extern bool lprintSII(pappl_system_t *system, const char *driver_name, const char *device_uri, const char *device_id, pappl_pr_driver_data_t *data, ipp_t **attrs, void *cbdata);
extern bool lprintTestFilterCB(pappl_job_t *job, pappl_device_t *device, void *data);
extern const char *lprintTestPageCB(pappl_printer_t *printer, char *buffer, size_t bufsize);
extern bool lprintTSPL(pappl_system_t *system, const char *driver_name, const char *device_uri, const char *device_id, pappl_pr_driver_data_t *data, ipp_t **attrs, void *cbdata);
extern bool lprintZPL(pappl_system_t *system, const char *driver_name, const char *device_uri, const char *device_id, pappl_pr_driver_data_t *data, ipp_t **attrs, void *cbdata);
extern void lprintZPLQueryDriver(pappl_system_t *system, const char *device_uri, char *name, size_t namesize);
#endif // !LPRINT_H