1 /*
2  * TODO:
3  * -Bugs?
4  */
5 #pragma once
6 
7 
8 #include <stdio.h>
9 #include <stdlib.h>
10 #include <unistd.h>
11 #include <string.h>
12 #include <errno.h>
13 #include <math.h>
14 #include <time.h>
15 #include <ctype.h>
16 #include <fcntl.h>
17 #include <sys/stat.h>
18 #include <sys/wait.h>
19 #include <inttypes.h>
20 
21 #include <gtk/gtk.h>
22 #include <glib.h>
23 
24 
25 #define LANG_EN 0
26 #define LANG_DE 1
27 
28 #define CMDSIZE 150
29 #define MAXLINE	250
30 #define ENTRY_MAX 8
31 
32 /* column header for 2 disk treeviews */
33 #define COLUMNS  27
34 char columns[COLUMNS][26];
35 #define COL 11
36 char column[COL][25];
37 
38 
39 /* pci devices column header */
40 #define PCICOL 10 /* lol.. DEVCLASS */
41 char pcicol[PCICOL][20];
42 
43 /* usb devices column header */
44 #define USBCOL 10
45 char usbcol[USBCOL][20];
46 
47 /* Treeview column positions */
48 #define POS_DISK	0
49 #define POS_PART	1
50 #define POS_TYPE	2
51 #define POS_SIZE	3
52 #define POS_LABEL	4
53 #define POS_FS		5
54 #define POS_FSLABEL	6
55 #define POS_MOUNTP	7
56 #define POS_CAPACITY 8
57 #define POS_ATTR	9
58 #define POS_STATE	10
59 #define POS_START	11
60 #define POS_END		12
61 #define POS_LEN		13
62 #define POS_OFFSET	14
63 #define POS_STRIPESIZE 15
64 #define POS_SECTORSIZE 16
65 #define POS_STRIPEOFFSET 17
66 #define POS_EFIMEDIA 18
67 #define POS_RAWUUID	19
68 #define POS_RAWTYPE 20
69 #define POS_FIRST	21
70 #define POS_LAST	22
71 #define POS_ENTRIES	23
72 #define POS_MODIFIED 24
73 #define POS_MODE	25
74 #define POS_INDEX	26
75 
76 	/* do we mount or gpart? Or something else? */
77 #define MOUNT	0
78 #define GPART	1
79 #define FS		3
80 #define USR 	4
81 
82 int todo;
83 
84 /* User tab treeview column header */
85 #define UCOL 16
86 char usercol[UCOL][25];
87 
88 #define POS_UNAME		0
89 #define POS_UPASSWORD	1
90 #define POS_UGROUPID	2
91 #define POS_USERID		3
92 #define POS_UCLASS		4
93 #define POS_UNKNOWN2	5
94 #define POS_UNKNOWN3	6
95 #define POS_UDESC		7
96 #define POS_UHOME		8
97 #define POS_USHELL		9
98 
99 
100 /* Options */
101 struct {
102 
103 	char fontsize[10];	/* font size */
104 	int language;		/* language */
105 	gboolean confirm;	/* ask for confirmation */
106 
107 } opt;
108 
109 
110 	/* keep track of disks and partitions */
111 char *all_disks;
112 char *all_slices;
113 char *all_partitions;
114 char *slices_on_a_disk;
115 
116 	/* Global GUI elements  */
117 GtkWidget *window; 	/* main window */
118 GtkWidget *fixed;
119 
120 /* More toplevel widgets */
121 GtkWidget *menubox;
122 GtkWidget *bback;
123 GtkWidget *logwindow;
124 
125 /* All tabs */
126 GtkWidget *tabs;	/* GtkNotebook */
127 GtkWidget *tab0;	/* Control panel */
128 GtkWidget *tab1;	/* Disks */
129 GtkWidget *tab2;	/* Groups */
130 GtkWidget *tab3;	/* User */
131 GtkWidget *tab4;	/* Time */
132 GtkWidget *tab5;	/* About */
133 GtkWidget *tab6;	/* Tasks */
134 GtkWidget *tab7;	/* Config files */
135 GtkWidget *tab8;	/* Devices */
136 GtkWidget *tab9;	/* Wireless */
137 GtkWidget *tab10;	/* Ethernet */
138 GtkWidget *tab11;	/* Audio */
139 
140 /* Each tab has one box that serves as a reference point. */
141 /* Global in case we redraw the tab. */
142 GtkWidget *controlbox;	/* Control */
143 GtkWidget *diskbox; 	/* Disks */
144 GtkWidget *abox;		/* About */
145 GtkWidget *userbox;		/* User */
146 GtkWidget *groupbox;	/* Groups */
147 GtkWidget *timebox;		/* Time */
148 GtkWidget *taskbox;		/* Tasks */
149 GtkWidget *configbox;	/* Config files */
150 GtkWidget *devbox;		/* Devices */
151 GtkWidget *wbox;		/* Wireless */
152 GtkWidget *audiobox;	/* Audio */
153 GtkWidget *lanbox;		/* Ethernet */
154 
155 /* Disk related widgets */
156 
157 /* We generally try to avoid global pointers to Widgets
158  * that only belong to one particular tab. */
159 GtkWidget *box;
160 GtkWidget *scrolled_window;
161 GtkWidget *combo_toplevel;
162 GtkWidget *tree;		/* all disks are displayed here */
163 GtkWidget *tree1;		/* only one disk is displayed here */
164 GtkTreeStore *treestore;
165 GtkTreeStore *treestore1;
166 GtkCellRenderer *cell;
167 GtkCellRenderer *cellr;
168 
169 GtkWidget *thegrid;
170 GtkWidget *grid;
171 GtkWidget *b;
172 GtkWidget *su;
173 
174 /* all items in the grid/editor window */
175 GtkWidget *editor_sep;
176 GtkWidget *editor_label;
177 GtkWidget *combo_schemes;
178 GtkWidget *combo_types;
179 GtkWidget *combo_disks;
180 GtkWidget *combo_partitions;
181 GtkWidget *combo_filesystems;
182 GtkWidget *combo_bootoptions;
183 GtkWidget *edit_button;
184 GtkWidget *combo_geom;
185 GtkWidget *combo_bootcode;
186 GtkWidget *text_label;
187 GtkWidget *text_alignment;
188 GtkWidget *text_size;
189 GtkWidget *text_entries;
190 GtkWidget *toggle_soft;
191 GtkWidget *toggle_journal;
192 GtkWidget *toggle_fast;
193 GtkWidget *toggle_comp;
194 GtkWidget *toggle_ask;
195 GtkWidget *gfile;
196 
197 
198 /* Strings for different languages. */
199 typedef struct {
200 
201 	char overview[85];
202 
203 	/* menu bar items */
204 	char mapplication[20];
205 	char moptions[20];
206 	char mquit[20];
207 	char mrefresh[20];
208 	char mlanguage[20];
209 	char mmsg[25];
210 	char mshow[20]; //XXX: Obsolete?
211 	char mhide[20];
212 	char mfont[20];
213 	char mfontinc[25];
214 	char mfontdec[25];
215 	char medit[25];
216 	char mabort[15];
217 	char mback[10];
218 
219 	/* hints */
220 	char no_root[35];
221 	char chose_disk[35];
222 	char chose_partition[35];
223 	char chose_scheme[35];
224 	char chose_type[35];
225 	char chose_size[35];
226 	char chose_bootoptions[35];
227 	char chose_fs[35];
228 	char apply[15];
229 	char mdone[20];
230 	char merror[25];
231 	char mother[30];
232 	char mrescan[30];
233 	char mpassw[50];
234 	char mexplain[60];
235 
236 	/* Control panel */
237 	char ctitle[30];
238 	char chardware[20];
239 	char cdisks[30];
240 	char cdevices[30];
241 	char caccount[30];
242 	char cuser[30];
243 	char cgroups[30];
244 	char ctime1[40];
245 	char ctime2[30];
246 	char ctime3[40];
247 	char ctasks[30];
248 	char csystem[10];
249 	char cconfigfiles[40];
250 	char cabout[30];
251 	char cnetwork[20];
252 	char cwlan[30];
253 	char clan[35];
254 	char caudio[30];
255 
256 	/* Group options */
257 	char gname[10];
258 	char gid[10];
259 	char gmember[15];
260 	char gpassword[20];
261 
262 	char gnew[20];
263 	char gdel[20];
264 	char gadd[20];
265 	char gremove[20];
266 
267 	char ginfodel[35];
268 	char ginfocreate[35];
269 	char ginfoadduser1[25];
270 	char ginfoadduser2[25];
271 	char ginforemuser1[25];
272 	char ginforemuser2[25];
273 	char ginfoclick[50];
274 
275 	/* User tab menu options */
276 	char uadd[20];
277 	char uedit[20];
278 	char uremove[20];
279 	char uremove1[60];
280 
281 	/* Time tab */
282 	char tsettime[20];
283 	char tsetzone[30];
284 	char tyear[10];
285 	char tmonth[10];
286 	char tday[10];
287 	char thour[10];
288 	char tminute[10];
289 	char tsecond[10];
290 	char ttimezone[20];
291 	char ttitle[30];
292 	char tsync[50];
293 	char ttooltip[40];
294 
295 	/* config tab */
296 	char csave[15];
297 	char cfchose[30];
298 
299 	/* About */
300 	char about[250];
301 
302 	/* Tab names. */
303 	char tabcontrol[10];
304 	char tabdisks[10];
305 	char tabgroup[10];
306 	char tababout[10];
307 	char tabuser[10];
308 	char tabtime[10];
309 	char tabtasks[10];
310 	char tabconfig[10];
311 	char tabdevices[20];
312 	char tabwlan[20];
313 	char tablan[10];
314 	char tabaudio[10];
315 
316 } lang;
317 lang l;
318 
319 typedef struct {
320 
321 char *next_partition;
322 
323 char *name;
324 char *name_capital;
325 char *mediasize;
326 char *sectorsize;
327 char *type;
328 char *start;
329 char *end;
330 char *end_old;
331 char *state;
332 char *entries;
333 char *scheme;
334 char *first;
335 char *last;
336 char *modified;
337 char *stripesize;
338 char *stripeoffset;
339 char *mode;
340 char *efimedia;
341 char *rawuuid;
342 char *rawtype;
343 char *length;
344 char *offset;
345 char *label;
346 char *index;
347 char *filesystem;
348 char *attribute;
349 char *mountpoint;
350 char *capacity;
351 char *fslabel;
352 
353 char *consumer_mediasize;
354 char *consumer_mode;
355 char *consumer_sectorsize;
356 
357 } geom_data;
358 geom_data g;
359 
360 	/* (most) functions */
361 //#ifndef FUNCTIONS_H_INCLUDED
362 //#define FUNCTIONS_H_INCLUDED
363 
364 /* lang.c */
365 void en_lang();
366 void de_lang();
367 
368 /* EditorGridEntries.c */
369 void create_combo_geom();
370 void create_combo_schemes();
371 void create_combo_types();
372 void create_combo_disks();
373 void create_combo_partitions();
374 void create_combo_filesystems();
375 void create_combo_bootoptions();
376 void create_combo_bootcode();
377 void create_text_label();
378 void create_text_entries();
379 void create_text_size();
380 void create_text_alignment();
381 void create_toggle_buttons();
382 void grid_attach_all();
383 void add_types( char *);
384 
385 /* on_combos_changed.c */
386 void on_geom_changed();
387 void on_toplevel_changed();
388 void on_fs_changed();
389 void toplevel_entries();
390 void on_bootcode_changed();
391 void on_disks_changed();
392 void on_partitions_changed();
393 void on_scheme_changed();
394 
395 /* subroutines.c */
396 char *get_disks();
397 char *read_disk(char *);
398 int add_slices();
399 int add_geoms();
400 int add_partitions();
401 void change_fontsize(gboolean);
402 char *add_to_list(char *, char *);
403 void clean_up_pointers();
404 char *what_file_system(char *);
405 int execute_cmd(char *, int);
406 char* command(char *);
407 void msg(char *);
408 void on_response(GtkDialog *, gint, gpointer);
409 void ask( char *);
410 void ask_cb(GtkDialog *, gint, gpointer);
411 char *check_free_space(char *, char *, char *);
412 int find_p(char *);
413 void format_string(char *);
414 int vari(char *, int);
415 int root();
416 int command_exist(char *);
417 int submit(char *, int);
418 void fsscan();
419 char *get_partition_type(char *);
420 char *get_type(char *);
421 char *get_scheme(const gchar *);
422 char *random_filename();
423 
424 /* root.c */
425 char *sudo(char *, char *, int);
426 int test_pw(char *);
427 void window_pw(char *);
428 int pw_needed();
429 char *sudo_backend(char *, char *);
430 void update_view();
431 
432 /* editorWindow.c */
433 void editor();
434 void hide_widgets();
435 
436 /* menubar.c */
437 void add_menubar();
438 void redraw_menubar();
439 
440 
441 /* applyButtonClicked.c */
442 void on_edit_clicked (GtkMenuItem *, gpointer);
443 const char *get_combo_box_disk(int);
444 const char *get_combo_box_scheme();
445 char *get_combo_box_partition(int);
446 const char *get_combo_box_type(int);
447 char *gpart_destroy(char *);
448 char *gpart_create(char *);
449 char *gpart_modify(char *);
450 char *gpart_add(char *);
451 char *gpart_delete(char *);
452 char *gpart_resize(char *);
453 char *gpart_set(char *);
454 char *gpart_unset(char *);
455 char *gpart_filesystem(char *);
456 char *gpart_bootcode(char *);
457 
458 /* treeviews.c */
459 GtkWidget *create_treeview();
460 GtkWidget *create_treeview1();
461 int populate_treeview();
462 int populate_treeview1(char *);
463 void treeview_add_rows(char *, char *);
464 char *selected_item(GtkWidget *, int);
465 gboolean right_clicked(GtkWidget *, GdkEventButton *, gpointer);
466 int buf_to_struct(char *);
467 void g_zero();
468 char *get_capacity(char *);
469 char *get_label(char *, char *);
470 
471 /* mount.c */
472 char *is_mounted(char *);
473 char *is_mounted_fuse(char *);
474 void mountfs(GtkMenuItem *, gpointer);
475 void unmountfs();
476 int vfs_usermount();
477 void usermount(char *, char *);
478 int volume_cmp(char *, char *);
479 
480 /* mainWindow.c */
481 /* int main() */
482 void top_window();
483 void add_menubox();
484 void on_tabs_changed(GtkMenuItem *item, gpointer user_data);
485 
486 
487 /* groups.c */
488 void groups();
489 void execute_me(char *, int);
490 
491 void about();	/* about.c */
492 void users();	/* user.c */
493 void tasks();	/* tasks.c */
494 void config();	/* config.c */
495 void devices();	/* devices.c */
496 void lan();		/* Ethernet */
497 void wireless();	/* wireless.c */
498 void AfterRootCmd();
499 
500 void audio();	/* audio.c */
501 void cosmetics(char *);
502 
503 /* disk.c */
504 void redraw_cb (GtkMenuItem *, gpointer);
505 void scrolled();
506 void main_combo();
507 void disk();
508 
509 void control();		/* control.c */
510 void timetab();		/* time.c */
511 
512 lang en;
513 lang de;
514 //#endif
515