/* [<][>][^][v][top][bottom][index][help] */
1 // Hlavicky
2 #include <ctype.h>
3 #include <stdio.h>
4 #include <stdlib.h>
5 #include <unistd.h>
6 #include <gtk/gtk.h>
7 #include <string.h>
8 #include <fcntl.h>
9 #include <time.h>
10
11 // Definice
12 #define GRAFIKA 0 /**< Volba pro akci - bude spusten GUI */
13 #define KOMPRESE 1 /**< Volba pro akci - bude spustena komprese */
14 #define DEKOMPRESE 2 /**< Volba pro akci - bude spustena dekomprese */
15 #define GUI_FILE "main.glade" /**< Nazev souboru GUI hlavniho okna */
16 #define ABOUT_FILE "about.glade" /**< Nazev souboru GUI About dialogu */
17 #define VELIKOST_POLE 512 /**< Velikost pole uzlu a stromu */
18 #define TIMEOUT 200 /**< Interval mereni rychlosti v ms */
19 #define VELIKOST_BUFF 300 /**< Velikost bufferu pri kodovani dat */
20 #define VERZE "v0.3 Raptor 2010" /**< Verze softwaru a nick */
21
22 // Struktury
23 /**
24 * \brief Struktura ulzu binarniho stromu
25 *
26 * Na zaklade struktury a vztahu uzlu v poli se provadi komprese a dekomptese
27 */
28 typedef struct _UZEL {
29 guchar znak; /**< Znak kodovaneho bytu */
30 gint cetnost; /**< Cetnost vyskytu uzlu */
31 gint vetev1; /**< Hierarchicky podrizeny uzel s bitem 1 */
32 gint vetev2; /**< Hierarchicky podrizeny uzel s bitem 0 */
33 gint spoj; /**< Hierarchicky nadrizeny uzel */
34 gchar kod[256]; /**< Textova reprezentace cesty od korene */
35 } UZEL;
36
37 /**
38 * \brief Struktura obsahujici pointery na graficke prvky
39 *
40 * Pri obsluze GTK callbacku je potreba casto menit vlastnosti jinych prvku,
41 * promennych a widgetu, nez toho, ktery callback vyvolal. Tato struktura
42 * obsahuje pointery na vsechny promenne a widgety, se kterymi je treba
43 * takto pracovat.
44 */
45 typedef struct _ChData {
46 GtkWidget *main_window; /**< Hlavni okno */
47 GtkWidget *label_info; /**< Informacni label */
48 GtkWidget *entry_vystup; /**< Pole vyberu vystupniho souboru */
49 GtkWidget *statusbar; /**< Statusbar */
50 GtkWidget *f_ch_b; /**< Tlacitko vyberu souboru vstupu */
51 gchar *f_in; /**< Retezec nazvu vstupniho souboru */
52 gchar *f_out; /**< Retezec nazvu vystupniho souboru */
53 } ChData;
54
55 // Globalni promenne
56 gint vypisy; /**< Uroven debug vypisu */
57 UZEL pole[VELIKOST_POLE]; /**< Pole uzlu stromu */
58 glong celk_cetnost; /**< Celkova cetnost vsech znaku souboru */
59 glong velikost_vstup; /**< Velikost vstupniho souboru */
60 glong velikost_vystup; /**< Velikost vystupniho souboru */
61 glong hlavicka; /**< Velikost hlavicky */
62 glong pocet_znaku; /**< Pocet znaku v souboru */
63 glong pro_merak; /**< Pro vypocet rychlosti - aktualni hodnota */
64 glong pro_merak_posledni; /**< Pro vypocet rychlosti - minula hodnota */
65 glong pro_merak_celkem; /**< Pro vypocet prubehu - celkova hodnota */
66 gint grafika; /**< Pri nenulove hodnote deaktivuje praci s grafikou */
67 GThread *thread; /**< Pointer na vlakno (pouzito pri (de)kompresi v GUI */