1 | /* |
---|
2 | ** Allgemeine Headerfile fuer das |
---|
3 | ** Lochstreifen-Visualisieren-Projekt |
---|
4 | */ |
---|
5 | #include <cairo.h> // cairo_t unten |
---|
6 | |
---|
7 | #define byte_t unsigned char |
---|
8 | #define LOCHSTREIFEN struct lochstreifen |
---|
9 | |
---|
10 | // Die Lochstreifenstruktur, die alle relevanten Daten enthaelt |
---|
11 | struct lochstreifen { |
---|
12 | /* Daten, die der Lochstreifen enthaelt: */ |
---|
13 | int data_length; // Länge des Datenarrays, rechnend ab 1 (wie argc) |
---|
14 | byte_t *data; // Datenarray |
---|
15 | |
---|
16 | int empty_start; // wie viele 0bytes vorne |
---|
17 | int empty_end; // wie viele 0bytes hinten |
---|
18 | |
---|
19 | /* Konstanten zum Aussehen des Lochstreifens |
---|
20 | Referenzeinheit ist d, daraus wird alles berechnet, |
---|
21 | siehe lochstreifen_set_d |
---|
22 | */ |
---|
23 | int d; // Durchmesser eines Loches |
---|
24 | int bspace; // Abstand der Bytes voneinander (Reihen) |
---|
25 | int hspace; // Abstand der Loecher in der Bytereihe |
---|
26 | int padding; // Abstand Löcher <=> Lochstreifenrand |
---|
27 | int df; // Durchmesser Lochfuehrungsloch |
---|
28 | int fspace; // Breite der Lochfuehrungs"nut" |
---|
29 | int margin; // Abstand um Lochstreifen herum (an allen Seiten) |
---|
30 | int abriss; // Länge der Abrisse an Start/Ende (halbe Höhe vom Lochstreifen) |
---|
31 | |
---|
32 | /* Farben, in denen der Lochstreifen gehalten ist */ |
---|
33 | cairo_pattern_t *hintergrund, *streifenbg, *punched, *notpunched, *fuehrung; |
---|
34 | // Farben um Lochstreifen, Lochstreifen, Loecher, Nicht-Loecher, Fuehrung |
---|
35 | // siehe zum Setzen: lochstreifen_set_color oder per Cairo-Funktion fuer |
---|
36 | // komplexere Loesungen. Bei NULL wird die Komponente nicht gezeichnet! |
---|
37 | |
---|
38 | /* Drehungen und co, nicht direkt veraendern, sonst stimmt die vorberechnete |
---|
39 | Hoehe/Breite nicht mehr mit den realen Werten ueberein. */ |
---|
40 | //cairo_matrix_t transformation; |
---|
41 | // Das folgende koennte man natuerlich effizienter Speichern, aber egal. |
---|
42 | int drehung; // 0-3, jeweils 45°-Schritte im Uhrzeigersinn |
---|
43 | int spiegelung_hor; // horizontale Spiegelung != 0 == ja |
---|
44 | int spiegelung_ver; // vertikale Spiegelung != 0 == ja |
---|
45 | |
---|
46 | /* Nur bestimmte rechteckige Bereiche zeichnen -- dies wird massgeblich vom |
---|
47 | GTK-Interface benutzt */ |
---|
48 | int only_start_x; // Die angegebenen Punkte |
---|
49 | int only_start_y; // spannen ein Rechteck auf. In grober |
---|
50 | int only_width; // Naeherung wird nur in diesem Bereich |
---|
51 | int only_height; // gezeichnet. |
---|
52 | |
---|
53 | |
---|
54 | /* Feature: Ein bestimmtes Byte hervorheben */ |
---|
55 | int highlight_byte; // Nummer des Bytes (von 0) |
---|
56 | cairo_pattern_t *highlight_color; // Farben => wenn NULL, kein Highlight |
---|
57 | |
---|
58 | /* Debugausgaben machen => wenn debug != 0 ist! */ |
---|
59 | byte_t debug; |
---|
60 | }; |
---|
61 | |
---|
62 | /* lochstreifen.c */ |
---|
63 | // allgemeine Zusatzfunktion, kein Bezug |
---|
64 | int file_get_contents(FILE *stream, byte_t **content); |
---|
65 | |
---|
66 | // Lochstreifenfunktionen, siehe Dokumentation in c-File |
---|
67 | LOCHSTREIFEN *lochstreifen_new(); |
---|
68 | void lochstreifen_set_data(LOCHSTREIFEN *l, int data_length, byte_t *data, int empty_start, int empty_end); |
---|
69 | void lochstreifen_set_d(LOCHSTREIFEN *l, int d); |
---|
70 | void lochstreifen_set_d_by_width(LOCHSTREIFEN *l, int width); |
---|
71 | void lochstreifen_set_d_by_height(LOCHSTREIFEN *l, int height); |
---|
72 | int lochstreifen_get_width(LOCHSTREIFEN *l); |
---|
73 | int lochstreifen_get_height(LOCHSTREIFEN *l); |
---|
74 | int lochstreifen_set_draw_only_area(LOCHSTREIFEN *l, int x, int y, int width, int height); |
---|
75 | int lochstreifen_flush_draw_only_area(LOCHSTREIFEN *l); |
---|
76 | void lochstreifen_set_color(cairo_pattern_t *color, byte_t red, byte_t green, byte_t blue, byte_t alpha); |
---|
77 | //void lochstreifen_rotate(LOCHSTREIFEN *l); |
---|
78 | //void lochstreifen_spiegel(LOCHSTREIFEN *l, byte_t horizontal); |
---|
79 | void lochstreifen_set_direction(LOCHSTREIFEN *l, int drehung, int spiegelung_hor, int spiegelung_ver); |
---|
80 | void lochstreifen_draw(LOCHSTREIFEN *l, cairo_t *cr); |
---|
81 | int lochstreifen_get_orientation(LOCHSTREIFEN *l); |
---|
82 | int lochstreifen_byte_by_coordinate(LOCHSTREIFEN *l, int x, int y); |
---|