source: projects/visualisator/lochstreifen.h @ 3

Last change on this file since 3 was 3, checked in by sven, 11 years ago

Das Lochstreifenvisualisierungsprogramm wurde komplett umgeschrieben. Die
Datei gtkprogram.c wurde aufgeteilt in ein neues Objekt, GtkPaperTape,
welches alle Zeichenoperationen mit dem Lowlevel-Objekt LOCHSTREIFEN
abgleicht sowie zahlreiche GUI-Menues und aehnliches zur Verfuegung stellt.
Letztlich sieht die Verzeichnisstruktur jetzt so aus:

  • lochstreifen.c, lochstreifen.h: Das LOCHSTREIFEN Cairo-Zeichenobjekt
  • gtkpapertape.c, gtkpapertape.h: Das GtkPaperTape GTK-Widget
  • gtk.c: Ein GTK-Programm, welches das GtkPaperTape-Widget in einem Fenster anzeigt.
  • cli.c: Ein Kommandozeilenprogramm, welches ein Kommandozeileninterface (per Aufrufparameter) fuer das LOCHSTREIFEN-Objekt bietet
File size: 3.7 KB
Line 
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
11struct 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
64int file_get_contents(FILE *stream, byte_t **content);
65
66// Lochstreifenfunktionen, siehe Dokumentation in c-File
67LOCHSTREIFEN *lochstreifen_new();
68void lochstreifen_set_data(LOCHSTREIFEN *l, int data_length, byte_t *data, int empty_start, int empty_end);
69void lochstreifen_set_d(LOCHSTREIFEN *l, int d);
70void lochstreifen_set_d_by_width(LOCHSTREIFEN *l, int width);
71void lochstreifen_set_d_by_height(LOCHSTREIFEN *l, int height);
72int lochstreifen_get_width(LOCHSTREIFEN *l);
73int lochstreifen_get_height(LOCHSTREIFEN *l);
74int lochstreifen_set_draw_only_area(LOCHSTREIFEN *l, int x, int y, int width, int height);
75int lochstreifen_flush_draw_only_area(LOCHSTREIFEN *l);
76void 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);
79void lochstreifen_set_direction(LOCHSTREIFEN *l, int drehung, int spiegelung_hor, int spiegelung_ver);
80void lochstreifen_draw(LOCHSTREIFEN *l, cairo_t *cr);
81int lochstreifen_get_orientation(LOCHSTREIFEN *l);
82int lochstreifen_byte_by_coordinate(LOCHSTREIFEN *l, int x, int y);
Note: See TracBrowser for help on using the repository browser.
© 2008 - 2013 technikum29 • Sven Köppel • Some rights reserved
Powered by Trac
Expect where otherwise noted, content on this site is licensed under a Creative Commons 3.0 License