| 1 | #ifndef __LOCHSTREIFEN_H__ |
|---|
| 2 | #define __LOCHSTREIFEN_H__ |
|---|
| 3 | |
|---|
| 4 | |
|---|
| 5 | #ifdef __cplusplus |
|---|
| 6 | extern "C" { |
|---|
| 7 | #endif |
|---|
| 8 | |
|---|
| 9 | #include <cairo-svg.h> |
|---|
| 10 | |
|---|
| 11 | typedef unsigned char byte_t; |
|---|
| 12 | typedef struct lochstreifen LOCHSTREIFEN; |
|---|
| 13 | |
|---|
| 14 | |
|---|
| 15 | |
|---|
| 16 | |
|---|
| 17 | |
|---|
| 18 | |
|---|
| 19 | |
|---|
| 20 | typedef enum lochstreifen_track { |
|---|
| 21 | LOCHSTREIFEN_TRACK_0 = 0, |
|---|
| 22 | LOCHSTREIFEN_TRACK_1 = 1, |
|---|
| 23 | LOCHSTREIFEN_TRACK_2 = 2, |
|---|
| 24 | LOCHSTREIFEN_TRACK_FEED = -13, |
|---|
| 25 | LOCHSTREIFEN_TRACK_3 = 3, |
|---|
| 26 | LOCHSTREIFEN_TRACK_4 = 4, |
|---|
| 27 | LOCHSTREIFEN_TRACK_5 = 5, |
|---|
| 28 | LOCHSTREIFEN_TRACK_6 = 6, |
|---|
| 29 | LOCHSTREIFEN_TRACK_7 = 7, |
|---|
| 30 | LOCHSTREIFEN_NO_TRACK = -42 |
|---|
| 31 | } track_t; |
|---|
| 32 | |
|---|
| 33 | |
|---|
| 34 | |
|---|
| 35 | |
|---|
| 36 | |
|---|
| 37 | |
|---|
| 38 | |
|---|
| 39 | |
|---|
| 40 | typedef int row_t; |
|---|
| 41 | |
|---|
| 42 | |
|---|
| 43 | |
|---|
| 44 | |
|---|
| 45 | |
|---|
| 46 | |
|---|
| 47 | |
|---|
| 48 | #define LOCHSTREIFEN_NO_ROW -1 |
|---|
| 49 | |
|---|
| 50 | |
|---|
| 51 | |
|---|
| 52 | |
|---|
| 53 | |
|---|
| 54 | |
|---|
| 55 | #define LOCHSTREIFEN_SUCCESS (-42*42) |
|---|
| 56 | |
|---|
| 57 | |
|---|
| 58 | |
|---|
| 59 | |
|---|
| 60 | |
|---|
| 61 | |
|---|
| 62 | |
|---|
| 63 | |
|---|
| 64 | struct lochstreifen { |
|---|
| 65 | |
|---|
| 66 | |
|---|
| 67 | int data_length; |
|---|
| 68 | |
|---|
| 69 | byte_t *data; |
|---|
| 70 | |
|---|
| 71 | |
|---|
| 72 | cairo_pattern_t *outer_background_color; |
|---|
| 73 | cairo_pattern_t *papertape_background_color; |
|---|
| 74 | cairo_pattern_t *one_code_hole_color; |
|---|
| 75 | cairo_pattern_t *zero_code_hole_color; |
|---|
| 76 | cairo_pattern_t *feed_hole_color; |
|---|
| 77 | |
|---|
| 78 | |
|---|
| 79 | row_t highlight_region_start; |
|---|
| 80 | row_t highlight_region_end; |
|---|
| 81 | cairo_pattern_t *highlight_region_color; |
|---|
| 82 | |
|---|
| 83 | |
|---|
| 84 | row_t highlight_row_number; |
|---|
| 85 | cairo_pattern_t *highlight_row_color; |
|---|
| 86 | |
|---|
| 87 | |
|---|
| 88 | row_t highlight_bit_row; |
|---|
| 89 | track_t highlight_bit_track; |
|---|
| 90 | cairo_pattern_t *highlight_bit_color; |
|---|
| 91 | |
|---|
| 92 | |
|---|
| 93 | cairo_rectangle_t *clip; |
|---|
| 94 | |
|---|
| 95 | |
|---|
| 96 | |
|---|
| 97 | cairo_matrix_t matrix; |
|---|
| 98 | |
|---|
| 99 | |
|---|
| 100 | void (*row_callback) (const row_t* current_row, cairo_t* context, void* user_data); |
|---|
| 101 | void* row_callback_user_data; |
|---|
| 102 | |
|---|
| 103 | |
|---|
| 104 | |
|---|
| 105 | |
|---|
| 106 | |
|---|
| 107 | |
|---|
| 108 | |
|---|
| 109 | byte_t debug; |
|---|
| 110 | |
|---|
| 111 | |
|---|
| 112 | |
|---|
| 113 | cairo_matrix_t matrix_inverse; |
|---|
| 114 | }; |
|---|
| 115 | |
|---|
| 116 | |
|---|
| 117 | #define LOCHSTREIFEN_DEFAULT_OUTER_BACKGROUND_COLOR NULL |
|---|
| 118 | #define LOCHSTREIFEN_DEFAULT_PAPERTAPE_BACKGROUND_COLOR cairo_pattern_create_rgb(0.7, 0.7, 0.7) |
|---|
| 119 | #define LOCHSTREIFEN_DEFAULT_ONE_CODE_HOLE_COLOR cairo_pattern_create_rgb(0, 0, 0) |
|---|
| 120 | #define LOCHSTREIFEN_DEFAULT_ZERO_CODE_HOLE_COLOR NULL |
|---|
| 121 | #define LOCHSTREIFEN_DEFAULT_FEED_HOLE_COLOR cairo_pattern_create_rgb(0.5, 0.7, 1) |
|---|
| 122 | #define LOCHSTREIFEN_DEFAULT_HIGHLIGHT_REGION_COLOR cairo_pattern_create_rgb(0.95, 1, 0) |
|---|
| 123 | #define LOCHSTREIFEN_DEFAULT_HIGHLIGHT_ROW_COLOR cairo_pattern_create_rgb(1, 0, 0) |
|---|
| 124 | #define LOCHSTREIFEN_DEFAULT_HIGHLIGHT_BIT_COLOR cairo_pattern_create_rgb(1,1,1) |
|---|
| 125 | #define LOCHSTREIFEN_DEFAULT_CTM { 1, 0, 0, 1, 0, 0 } |
|---|
| 126 | |
|---|
| 127 | |
|---|
| 128 | |
|---|
| 129 | |
|---|
| 130 | |
|---|
| 131 | #define LOCHSTREIFEN_WIDTH 1.0 |
|---|
| 132 | |
|---|
| 133 | |
|---|
| 134 | #define LOCHSTREIFEN_TEAR_OFF_LENGTH ( 0.5 * LOCHSTREIFEN_WIDTH ) |
|---|
| 135 | |
|---|
| 136 | |
|---|
| 137 | |
|---|
| 138 | #define LOCHSTREIFEN_TRACK_DISTANCE 0.1 |
|---|
| 139 | |
|---|
| 140 | |
|---|
| 141 | |
|---|
| 142 | #define LOCHSTREIFEN_ROW_DISTANCE 0.1 |
|---|
| 143 | |
|---|
| 144 | |
|---|
| 145 | #define LOCHSTREIFEN_RADIUS_FEED_HOLE ( (1.170 / 25.40) / 2) |
|---|
| 146 | |
|---|
| 147 | |
|---|
| 148 | #define LOCHSTREIFEN_RADIUS_CODE_HOLE ( (1.830 / 25.40) / 2) |
|---|
| 149 | |
|---|
| 150 | |
|---|
| 151 | #define LOCHSTREIFEN_LENGTH ( 2 * LOCHSTREIFEN_TEAR_OFF_LENGTH + \ |
|---|
| 152 | LOCHSTREIFEN_ROW_DISTANCE * (l->data_length + 1) ) |
|---|
| 153 | |
|---|
| 154 | typedef enum lochstreifen_direction { |
|---|
| 155 | |
|---|
| 156 | LOCHSTREIFEN_MOVEMENT_TO_LEFT = 0, |
|---|
| 157 | LOCHSTREIFEN_MOVEMENT_TO_TOP = 1, |
|---|
| 158 | LOCHSTREIFEN_MOVEMENT_TO_RIGHT = 2, |
|---|
| 159 | LOCHSTREIFEN_MOVEMENT_TO_BOTTOM = 3, |
|---|
| 160 | LOCHSTREIFEN_MOVEMENT_NONE = -1, |
|---|
| 161 | LOCHSTREIFEN_ROTATION_CLOCKWISE = 4, |
|---|
| 162 | LOCHSTREIFEN_ROTATION_ANTICLOCKWISE = 5 |
|---|
| 163 | } lochstreifen_direction_t; |
|---|
| 164 | |
|---|
| 165 | |
|---|
| 166 | |
|---|
| 167 | |
|---|
| 168 | |
|---|
| 169 | |
|---|
| 170 | LOCHSTREIFEN *lochstreifen_new(); |
|---|
| 171 | LOCHSTREIFEN* lochstreifen_copy(const LOCHSTREIFEN* t); |
|---|
| 172 | void lochstreifen_free(LOCHSTREIFEN* l); |
|---|
| 173 | void lochstreifen_print_debug(LOCHSTREIFEN* l); |
|---|
| 174 | void lochstreifen_set_data(LOCHSTREIFEN *l, int data_length, byte_t *data); |
|---|
| 175 | void lochstreifen_add_null_bytes(LOCHSTREIFEN *l, int start, int end); |
|---|
| 176 | double lochstreifen_get_length(LOCHSTREIFEN *l); |
|---|
| 177 | void lochstreifen_set_highlight_region(LOCHSTREIFEN *l, int start, int end); |
|---|
| 178 | int lochstreifen_get_highlight_region(LOCHSTREIFEN *l, int *start, int *end); |
|---|
| 179 | void lochstreifen_remove_highlight_region(LOCHSTREIFEN *l); |
|---|
| 180 | void lochstreifen_set_highlight_row(LOCHSTREIFEN *l, int number_of_row); |
|---|
| 181 | int lochstreifen_get_highlight_row(LOCHSTREIFEN *l); |
|---|
| 182 | void lochstreifen_remove_highlight_row(LOCHSTREIFEN *l); |
|---|
| 183 | void lochstreifen_set_highlight_bit(LOCHSTREIFEN *l, int number_of_row, int number_of_bit); |
|---|
| 184 | int lochstreifen_get_highlight_bit(LOCHSTREIFEN *l, int *number_of_row, int *number_of_bit); |
|---|
| 185 | void lochstreifen_remove_highlight_bit(LOCHSTREIFEN *l); |
|---|
| 186 | void lochstreifen_set_clip(LOCHSTREIFEN *l, double x, double y, double width, double height); |
|---|
| 187 | void lochstreifen_remove_clip(LOCHSTREIFEN *l); |
|---|
| 188 | void lochstreifen_check_matrix(LOCHSTREIFEN* l); |
|---|
| 189 | void lochstreifen_set_scaling_by_length(LOCHSTREIFEN *l, int length); |
|---|
| 190 | void lochstreifen_set_scaling_by_width(LOCHSTREIFEN *l, int width); |
|---|
| 191 | void lochstreifen_set_scaling_by_code_hole(LOCHSTREIFEN *l, int diameter); |
|---|
| 192 | void lochstreifen_get_target_dimensions(LOCHSTREIFEN *l, int *width, int *height); |
|---|
| 193 | int lochstreifen_get_target_width(LOCHSTREIFEN *l); |
|---|
| 194 | int lochstreifen_get_target_height(LOCHSTREIFEN *l); |
|---|
| 195 | void lochstreifen_get_target_bit_from_point(LOCHSTREIFEN* l, row_t* row, track_t* track, double x, double y); |
|---|
| 196 | row_t lochstreifen_get_target_row_from_point(LOCHSTREIFEN* l, double x, double y); |
|---|
| 197 | track_t lochstreifen_get_target_track_from_point(LOCHSTREIFEN* l, double x, double y); |
|---|
| 198 | int lochstreifen_get_target_rect_from_row(LOCHSTREIFEN* l, row_t row, cairo_rectangle_t* rect); |
|---|
| 199 | int lochstreifen_get_target_rect_from_bit(LOCHSTREIFEN* l, row_t row, track_t track, cairo_rectangle_t* rect); |
|---|
| 200 | void lochstreifen_set_rotation(LOCHSTREIFEN *l, enum lochstreifen_direction direction); |
|---|
| 201 | void lochstreifen_draw(LOCHSTREIFEN *l, cairo_t *cr); |
|---|
| 202 | |
|---|
| 203 | #ifdef __cplusplus |
|---|
| 204 | } |
|---|
| 205 | #endif |
|---|
| 206 | |
|---|
| 207 | |
|---|
| 208 | #endif |
|---|