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