CAPS Universe documentation  1.0.4
All you need to know to be successful
libcapsbase.h
Go to the documentation of this file.
1#pragma once
2
3/*
4 * SPDX-License-Identifier: LGPL-2.1-or-later
5 *
6 * (c) 2018 Juergen Borleis <projects@caps-printing.org>
7 *
8 * This library is free software; you can redistribute it and/or modify it under
9 * the terms of the GNU Lesser General Public License as published by the Free
10 * Software Foundation; either version 2.1 of the License, or (at your option)
11 * any later version.
12 *
13 * This library is distributed in the hope that it will be useful, but WITHOUT
14 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
15 * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
16 * details.
17 */
18
19#include <stdio.h>
20#include <stdbool.h>
21#include <stdint.h>
22#include <features.h>
23
24__BEGIN_DECLS
25
69#define __non_null __attribute__((nonnull))
83#ifdef DOXYGEN
84# define __nonnull(params) __attribute__ ((__nonnull__ params))
85#endif
92#define __format(x,y) __attribute__((format (printf, x, y)))
98#define __format_arg(x) __attribute__((format_arg (x)))
103#define __packed __attribute__((packed))
108#define __maybe_unused __attribute__((unused))
113#define __deprecated __attribute__((deprecated))
118#define __no_return __attribute__((noreturn))
124#define __pure __attribute__((pure))
130#define __const __attribute__((const))
136#define __cleanup(x) __attribute__((cleanup (x)))
141#define __returns_nonnull __attribute__((returns_nonnull))
146#define __warn_unused_res __attribute__((warn_unused_result))
151#define __fallthrough __attribute__((fallthrough))
156#define __cold __attribute__((cold))
161#define __hot __attribute__((hot))
171#if __has_attribute(nonstring)
172# define __nonstring __attribute__((nonstring))
173#else
174# define __nonstring
175#endif
185#define LIBCAPSBASE_MAJOR 1
187#define LIBCAPSBASE_MINOR 1
189#define LIBCAPSBASE_MICRO 1
198void caps_libbase_version_get(unsigned *major, unsigned *minor, unsigned *micro) __nonnull();
244#define caps_print_panic(fmt, ...) caps_message_print(LIBCAPS_PANIC, PACKAGE, __func__, __LINE__, fmt, ##__VA_ARGS__)
252#define caps_print_error(fmt, ...) caps_message_print(LIBCAPS_ERROR, PACKAGE, __func__, __LINE__, fmt, ##__VA_ARGS__)
260#define caps_print_warn(fmt, ...) caps_message_print(LIBCAPS_WARN, PACKAGE, __func__, __LINE__, fmt, ##__VA_ARGS__)
268#define caps_print_info(fmt, ...) caps_message_print(LIBCAPS_INFO, PACKAGE, __func__, __LINE__, fmt, ##__VA_ARGS__)
276#define caps_print_loud(fmt, ...) caps_message_print(LIBCAPS_LOUD, PACKAGE, __func__, __LINE__, fmt, ##__VA_ARGS__)
284#define caps_print_noisy(fmt, ...) caps_message_print(LIBCAPS_NOISY, PACKAGE, __func__, __LINE__, fmt, ##__VA_ARGS__)
302#define caps_print_debug_template(fmt, ...) caps_message_print(LIBCAPS_DEBUG, PACKAGE, __func__, __LINE__, fmt, ##__VA_ARGS__)
323typedef int64_t caps_identifier;
328#define CAPS_INVALID_IDENTIFIER (INT64_C(-1))
338struct caps_rect {
339 double width;
340 double length;
341};
347#define CAPS_REC_IS_EMPTY(x) ((x.width == 0.0) && (x.length == 0.0))
361struct caps_area {
362 double left;
363 double bottom;
364 double right;
365 double top;
366};
382};
389 uint8_t pgroup;
390} __packed;
401 uint8_t luminance;
402} __packed;
413 uint8_t red;
414 uint8_t green;
415 uint8_t blue;
416} __packed;
427 uint8_t cyan;
428 uint8_t magenta;
429 uint8_t yellow;
430 uint8_t key;
431} __packed;
450};
456void caps_libbase_init(void);
477void caps_verbosity_level_set(enum caps_verbosity level, bool overwrite);
488void caps_message_stream_set(FILE *stream);
500void caps_message_print(enum caps_verbosity level, const char *scope, const char *fn, int ln, const char *format, ...) __format(5,6);
522#define caps_developers_failure_report(fmt) caps_developers_failure_report_and_terminate(PACKAGE, __func__, __LINE__, fmt)
544void caps_developers_failure_report_and_terminate(const char *scope, const char *fn, int ln, const char *message) __no_return __nonnull();
559#define caps_memory_failure_report(fn) caps_memory_failure_report_and_terminate(PACKAGE, fn, __LINE__)
573void caps_memory_failure_report_and_terminate(const char *scope, const char *fn, int ln) __no_return __nonnull();
586void caps_terminate(int rc) __no_return;
601#ifdef NDEBUG
602# define caps_assert(expr)
603#else
604# define caps_assert(expr) if (!(expr)) { \
605 caps_message_print(LIBCAPS_PANIC, PACKAGE, __func__, __LINE__, "%s: Assertion '%s' failed\n", __FILE__, __STRING(expr)); \
606 caps_terminate(1); \
607}
608#endif
778int caps_helper_number_convert(const char *string) __nonnull();
804int caps_helper_boolean_check(const char *value, int set);
847int caps_helper_file_content_copy(int fd_to, int fd_from);
879int caps_helper_verbosity_setup(const char *keyword, bool overwrite);
886__END_DECLS
void caps_libbase_init(void)
Definition: libcapsbase.c:174
void caps_message_print(enum caps_verbosity level, const char *scope, const char *fn, int ln, const char *format,...) 6)
Definition: libcapsbase.c:226
void caps_verbosity_level_set(enum caps_verbosity level, bool overwrite)
Definition: libcapsbase.c:309
void caps_message_stream_set(FILE *stream)
Definition: libcapsbase.c:207
caps_verbosity
Define the noise level of messages. All messages above a current noise level will be discarded.
Definition: libcapsbase.h:442
@ LIBCAPS_LOUD
Definition: libcapsbase.h:447
@ LIBCAPS_INFO
Definition: libcapsbase.h:446
@ LIBCAPS_ERROR
Definition: libcapsbase.h:444
@ LIBCAPS_DEBUG
Definition: libcapsbase.h:449
@ LIBCAPS_NOISY
Definition: libcapsbase.h:448
@ LIBCAPS_WARN
Definition: libcapsbase.h:445
@ LIBCAPS_PANIC
Definition: libcapsbase.h:443
#define __packed
Definition: libcapsbase.h:103
#define __warn_unused_res
Definition: libcapsbase.h:146
#define __no_return
Definition: libcapsbase.h:118
#define __returns_nonnull
Definition: libcapsbase.h:141
#define __nonnull(params)
Definition: libcapsbase.h:84
#define __format(x, y)
Definition: libcapsbase.h:92
int caps_helper_config_dir_fd(void)
Definition: libcapshelper.c:325
char * caps_helper_driver_path_create(const char *file_name)
Definition: libcapshelper.c:277
int caps_helper_driver_config_dir_fd(void)
Definition: libcapshelper.c:256
int caps_helper_driver_dir_fd(void)
Definition: libcapshelper.c:283
int caps_helper_invisible_file_create(int *fd)
Definition: libcapshelper.c:461
int caps_helper_driver_db_dir_fd(void)
Definition: libcapshelper.c:215
char * caps_helper_driver_config_path_create(const char *file_name)
Definition: libcapshelper.c:250
int caps_helper_number_convert(const char *string)
Definition: libcapshelper.c:330
int caps_helper_boolean_check(const char *value, int set)
Definition: libcapshelper.c:367
char * caps_helper_config_path_create(const char *file_name)
Definition: libcapshelper.c:319
int caps_helper_verbosity_setup(const char *keyword, bool overwrite)
Definition: libcapshelper.c:537
char * caps_helper_driver_db_path_create(const char *file_name)
Definition: libcapshelper.c:209
int caps_helper_file_content_copy(int fd_to, int fd_from)
Definition: libcapshelper.c:507
int caps_helper_device_db_dir_fd(void)
Definition: libcapshelper.c:304
char * caps_helper_device_db_path_create(const char *file_name)
Definition: libcapshelper.c:298
caps_colour_format
Dot colour format definition.
Definition: libcapsbase.h:375
int64_t caps_identifier
Definition: libcapsbase.h:323
@ CAPS_CF_CMYK
Definition: libcapsbase.h:381
@ CAPS_CF_GREY
Definition: libcapsbase.h:379
@ CAPS_CF_MONOCHROME1
Definition: libcapsbase.h:378
@ CAPS_CF_NONE
Definition: libcapsbase.h:376
@ CAPS_CF_MONOCHROME0
Definition: libcapsbase.h:377
@ CAPS_CF_RGB
Definition: libcapsbase.h:380
void caps_libbase_version_get(unsigned *major, unsigned *minor, unsigned *micro)
Definition: libcapsbase.c:200
void caps_terminate(int rc)
Definition: libcapsbase.c:59
void caps_developers_failure_report_and_terminate(const char *scope, const char *fn, int ln, const char *message)
Definition: libcapsbase.c:105
void caps_memory_failure_report_and_terminate(const char *scope, const char *fn, int ln)
Definition: libcapsbase.c:116
Defines an area by its left bottom and right top coordinates in floating point values.
Definition: libcapsbase.h:361
double bottom
Definition: libcapsbase.h:363
double top
Definition: libcapsbase.h:365
double left
Definition: libcapsbase.h:362
double right
Definition: libcapsbase.h:364
One byte per component, four components per dot: CMYKCMYK...
Definition: libcapsbase.h:426
uint8_t key
Definition: libcapsbase.h:430
uint8_t magenta
Definition: libcapsbase.h:428
uint8_t cyan
Definition: libcapsbase.h:427
uint8_t yellow
Definition: libcapsbase.h:429
One byte per component, one component per dot.
Definition: libcapsbase.h:400
uint8_t luminance
Definition: libcapsbase.h:401
1 bit per component, 8 dots per byte, MSbit is on the left (bit 7).
Definition: libcapsbase.h:388
uint8_t pgroup
Definition: libcapsbase.h:389
One byte per component, three components per dot: RGBRGB...
Definition: libcapsbase.h:412
uint8_t blue
Definition: libcapsbase.h:415
uint8_t green
Definition: libcapsbase.h:414
uint8_t red
Definition: libcapsbase.h:413
Defines a simple rectangle by its width and length in floating point values.
Definition: libcapsbase.h:338
double length
Definition: libcapsbase.h:340
double width
Definition: libcapsbase.h:339