From 065b156f1a3d80a1a859a4bae79237cb74eb0dfc Mon Sep 17 00:00:00 2001 From: eukos Date: Fri, 8 Jan 2016 12:13:41 +0100 Subject: [PATCH] Launcher will now look for an info file containing the title of the games. --- launcher/main.c | 78 +++++++++++++++++++++++++++++++++++-------------- 1 file changed, 56 insertions(+), 22 deletions(-) diff --git a/launcher/main.c b/launcher/main.c index f6c2ca5..55d7d3e 100644 --- a/launcher/main.c +++ b/launcher/main.c @@ -6,13 +6,16 @@ #include #include // pwd for home dir +typedef unsigned char byte; static char cmd_args[32]; static int engine_memory; static int engine_vid_width; static int engine_vid_height; +static byte engine_vid_border; static char engine_cfg_path[80]; +static int iGameCnt; void launcher_settings_save() { @@ -22,6 +25,7 @@ void launcher_settings_save() fprintf(fFile, "%d\n", engine_memory); fprintf(fFile, "%d\n", engine_vid_width); fprintf(fFile, "%d\n", engine_vid_height); + fprintf(fFile, "%d\n", engine_vid_border); fclose(fFile); printf("[LAUNCHER] Saved settings...\n"); } @@ -33,41 +37,52 @@ void launcher_settings_load() struct passwd *pw = getpwuid(uid); sprintf(engine_cfg_path, "%s/.ngunixrc", pw->pw_dir); - if(access(engine_cfg_path, R_OK) != -1 ) { + if(access(engine_cfg_path, R_OK) != -1 ) + { fFile = fopen(engine_cfg_path, "r"); - fscanf(fFile,"%d %d %d", &engine_memory, &engine_vid_width, &engine_vid_height); + fscanf(fFile,"%d %d %d", &engine_memory, &engine_vid_width, &engine_vid_height, &engine_vid_border); fclose(fFile); printf("[LAUNCHER] Loaded settings... %dx%d @ %dMB memory\n", engine_vid_width, engine_vid_height, engine_memory); - } else { + } + else + { engine_memory = 60; engine_vid_width = 640; engine_vid_height = 480; + engine_vid_border = 1; launcher_settings_save(); } } enum { - LIST_ITEM = 0, + LIST_ITEM, + LIST_DIR, N_COLUMNS }; void launcher_init_list(GtkWidget *list) { - GtkCellRenderer *renderer; - GtkTreeViewColumn *column; + GtkCellRenderer *renderer1; + GtkCellRenderer *renderer2; + GtkTreeViewColumn *column1, *column2; GtkListStore *store; - renderer = gtk_cell_renderer_text_new (); - column = gtk_tree_view_column_new_with_attributes("Custom Game", renderer, "text", LIST_ITEM, NULL); - gtk_tree_view_append_column(GTK_TREE_VIEW(list), column); - store = gtk_list_store_new(N_COLUMNS, G_TYPE_STRING); + renderer1 = gtk_cell_renderer_text_new (); + column1 = gtk_tree_view_column_new_with_attributes("Game", renderer1, "text", LIST_ITEM, NULL); + + renderer2 = gtk_cell_renderer_text_new (); + column2 = gtk_tree_view_column_new_with_attributes("Directory", renderer1, "text", LIST_DIR, NULL); + + gtk_tree_view_append_column(GTK_TREE_VIEW(list), column1); + gtk_tree_view_append_column(GTK_TREE_VIEW(list), column2); + store = gtk_list_store_new(N_COLUMNS, G_TYPE_STRING, G_TYPE_STRING); gtk_tree_view_set_model(GTK_TREE_VIEW(list), GTK_TREE_MODEL(store)); g_object_unref(store); } -void launcher_add_to_list(GtkWidget *list, const gchar *str) +void launcher_add_to_list(GtkWidget *list, const gchar *gcTitle, const gchar *gcDir) { GtkListStore *store; GtkTreeIter iter; @@ -75,7 +90,8 @@ void launcher_add_to_list(GtkWidget *list, const gchar *str) store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(list))); gtk_list_store_append(store, &iter); - gtk_list_store_set(store, &iter, LIST_ITEM, str, -1); + gtk_list_store_set(store, &iter, LIST_ITEM, gcTitle, -1); + gtk_list_store_set(store, &iter, LIST_DIR, gcDir, -1); } void launcher_list_changed(GtkWidget *widget, gpointer label) { @@ -86,8 +102,7 @@ void launcher_list_changed(GtkWidget *widget, gpointer label) { if (gtk_tree_selection_get_selected(GTK_TREE_SELECTION(widget), &model, &iter)) { - gtk_tree_model_get(model, &iter, LIST_ITEM, &value, -1); - //gtk_label_set_text(GTK_LABEL(label), value); + gtk_tree_model_get(model, &iter, LIST_DIR, &value, -1); sprintf(cmd_args, "%s", value); g_free(value); } @@ -95,9 +110,12 @@ void launcher_list_changed(GtkWidget *widget, gpointer label) { void launcher_cachefolders(const char *name, GtkWidget *list) { - DIR *d; + DIR *d; + FILE *f; struct dirent *dir; char fname[32]; + char cFile[80]; + d = opendir(name); if (d) { @@ -105,9 +123,19 @@ void launcher_cachefolders(const char *name, GtkWidget *list) { if (dir->d_type == DT_DIR && !(strcmp(dir->d_name, ".") == 0 || strcmp(dir->d_name, "..") == 0)) { - printf("[LAUNCHER] Found directory: %s\n", dir->d_name); - sprintf(fname, "%s", dir->d_name); - launcher_add_to_list(list, fname); + sprintf(cFile, "%s/%s/info", name, dir->d_name); + + if(access(cFile, R_OK) != -1 ) + { + f = fopen(cFile, "r"); + char cTemp[32]; + fscanf(f, "%35[^\n]", cTemp); + fclose(f); + printf(" Found %s (%s)\n", cTemp, dir->d_name); + sprintf(fname, "%s", dir->d_name); + launcher_add_to_list(list, cTemp, fname); + iGameCnt++; + } } } closedir(d); @@ -117,8 +145,12 @@ void launcher_cachefolders(const char *name, GtkWidget *list) void launcher_start() { char cmd[128]; - sprintf(cmd, "./ngunix.x11 -data id1 -game %s -winsize %d %d -mem %d\n", - cmd_args, engine_vid_width, engine_vid_height, engine_memory); + + if(strlen(cmd_args) > 0) + sprintf(cmd, "./ngunix.x11 -data id1 -game %s -winsize %d %d -mem %d\n", cmd_args, engine_vid_width, engine_vid_height, engine_memory); + else + sprintf(cmd, "./ngunix.x11 -data id1 -winsize %d %d -mem %d\n", engine_vid_width, engine_vid_height, engine_memory); + printf(cmd); system(cmd); } @@ -181,8 +213,7 @@ int main(int argc, char *argv[]) listgames = gtk_tree_view_new(); gtk_scrolled_window_add_with_viewport ( GTK_SCROLLED_WINDOW (listwindow), listgames); - gtk_widget_set_size_request(listwindow, 144, 160); - //gtk_widget_set_size_request(listgames, 143, 159); + gtk_widget_set_size_request(listwindow, 440, 160); launcher_init_list(listgames); selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(listgames)); @@ -194,7 +225,10 @@ int main(int argc, char *argv[]) gtk_signal_connect (GTK_OBJECT (btnplay), "clicked", GTK_SIGNAL_FUNC (launcher_start),NULL); gtk_signal_connect (GTK_OBJECT (btnquit), "clicked", GTK_SIGNAL_FUNC (gtk_main_quit),NULL); + iGameCnt = 1; + printf("[LAUNCHER] Scanning directories....\n"); launcher_cachefolders(".", listgames); + printf(".......... %d folder(s) found\n", iGameCnt); gtk_main();