From 55105018aa270a6f2e06f38e4e59ffec3081f6b2 Mon Sep 17 00:00:00 2001 From: Markus Koch Date: Sun, 21 Jan 2018 14:11:41 +0100 Subject: [PATCH] Refactor indentation --- gui.c | 144 +++++----- gui.h | 4 +- main.c | 850 ++++++++++++++++++++++++++++----------------------------- 3 files changed, 498 insertions(+), 500 deletions(-) diff --git a/gui.c b/gui.c index 46149d5..b176fc2 100644 --- a/gui.c +++ b/gui.c @@ -4,100 +4,98 @@ #define false 0 int gui_init(int *argc, char ***argv) { - gtk_init (argc, argv); - return 0; + gtk_init (argc, argv); + return 0; } int showMessage(int message_type, char *text, char *defaultText, char **reply) { - GtkWidget *window; - GtkWidget *entry; - GtkWidget *buttonOkay; - GtkWidget *buttonCancel; - GtkWidget *buttonBox; - GtkWidget *mainBox; - GtkWidget *label; - gboolean ret; - char *entryText; + GtkWidget *window; + GtkWidget *entry; + GtkWidget *buttonOkay; + GtkWidget *buttonCancel; + GtkWidget *buttonBox; + GtkWidget *mainBox; + GtkWidget *label; + gboolean ret; + char *entryText; - ret = true; + ret = true; - window = gtk_window_new (GTK_WINDOW_TOPLEVEL); - gtk_window_set_title(GTK_WINDOW(window), "model-ghdl"); + window = gtk_window_new (GTK_WINDOW_TOPLEVEL); + gtk_window_set_title(GTK_WINDOW(window), "model-ghdl"); - label = gtk_label_new(text); - gtk_widget_show(label); + label = gtk_label_new(text); + gtk_widget_show(label); - entry = gtk_entry_new(); - gtk_entry_set_text(GTK_ENTRY(entry), (char*) defaultText); - g_signal_connect (entry, "activate", - G_CALLBACK(okay), entry); + entry = gtk_entry_new(); + gtk_entry_set_text(GTK_ENTRY(entry), (char*) defaultText); + g_signal_connect (entry, "activate", + G_CALLBACK(okay), entry); - buttonOkay = gtk_button_new_with_label("Okay!"); - gtk_widget_show(buttonOkay); + buttonOkay = gtk_button_new_with_label("Okay!"); + gtk_widget_show(buttonOkay); - if (MESSAGE_IS_INPUT(message_type)) { - buttonCancel = gtk_button_new_with_label("Cancel"); - g_signal_connect (buttonCancel, "clicked", - G_CALLBACK(cancel), entry); - gtk_widget_show(buttonCancel); + if (MESSAGE_IS_INPUT(message_type)) { + buttonCancel = gtk_button_new_with_label("Cancel"); + g_signal_connect (buttonCancel, "clicked", + G_CALLBACK(cancel), entry); + gtk_widget_show(buttonCancel); - gtk_widget_show(entry); - } + gtk_widget_show(entry); + } - buttonBox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 4); - if (MESSAGE_IS_INPUT(message_type)) { - gtk_box_pack_start(GTK_BOX(buttonBox), buttonCancel, true, true, 0); - } - gtk_box_pack_start(GTK_BOX(buttonBox), buttonOkay, true, true, 0); - g_signal_connect (buttonOkay, "clicked", - G_CALLBACK(okay), entry); - gtk_widget_show(buttonBox); + buttonBox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 4); + if (MESSAGE_IS_INPUT(message_type)) { + gtk_box_pack_start(GTK_BOX(buttonBox), buttonCancel, true, true, 0); + } + gtk_box_pack_start(GTK_BOX(buttonBox), buttonOkay, true, true, 0); + g_signal_connect (buttonOkay, "clicked", + G_CALLBACK(okay), entry); + gtk_widget_show(buttonBox); - mainBox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 4); - gtk_box_pack_start(GTK_BOX(mainBox), label, true, true, 10); - if (MESSAGE_IS_INPUT(message_type)) { - gtk_box_pack_start(GTK_BOX(mainBox), entry, true, true, 0); - } - gtk_box_pack_start(GTK_BOX(mainBox), buttonBox, false, false, 0); - gtk_widget_show(mainBox); + mainBox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 4); + gtk_box_pack_start(GTK_BOX(mainBox), label, true, true, 10); + if (MESSAGE_IS_INPUT(message_type)) { + gtk_box_pack_start(GTK_BOX(mainBox), entry, true, true, 0); + } + gtk_box_pack_start(GTK_BOX(mainBox), buttonBox, false, false, 0); + gtk_widget_show(mainBox); - g_signal_connect (window, "destroy", - G_CALLBACK (cancel), NULL); + g_signal_connect (window, "destroy", + G_CALLBACK (cancel), NULL); - gtk_container_add(GTK_CONTAINER(window), mainBox); - gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); - gtk_window_set_default_size(GTK_WINDOW(window), 320, 10); - gtk_window_present(window); + gtk_container_add(GTK_CONTAINER(window), mainBox); + gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); + gtk_window_set_default_size(GTK_WINDOW(window), 320, 10); + gtk_window_present(window); - gtk_main(); + gtk_main(); - if (MESSAGE_IS_INPUT(message_type)) { - entryText = (char*) gtk_entry_get_text(GTK_ENTRY(entry)); - if (entryText[0] == 0) { - ret = false; - } - else { - *reply = realloc(*reply, sizeof(char)*strlen(entryText)); - if (*reply != NULL) - strcpy(*reply, entryText); - ret = true; - } - } + if (MESSAGE_IS_INPUT(message_type)) { + entryText = (char*) gtk_entry_get_text(GTK_ENTRY(entry)); + if (entryText[0] == 0) { + ret = false; + } + else { + *reply = realloc(*reply, sizeof(char)*strlen(entryText)); + if (*reply != NULL) + strcpy(*reply, entryText); + ret = true; + } + } - gtk_widget_destroy(window); - return ret; + gtk_widget_destroy(window); + return ret; } -static void okay( GtkWidget *widget, - gpointer data ) +static void okay(GtkWidget *widget, gpointer data) { - //g_print ("TEXT = %s\n", gtk_entry_get_text(GTK_ENTRY(data))); - gtk_main_quit(); + //g_print ("TEXT = %s\n", gtk_entry_get_text(GTK_ENTRY(data))); + gtk_main_quit(); } -static void cancel( GtkWidget *widget, - gpointer data ) +static void cancel(GtkWidget *widget, gpointer data) { - gtk_entry_set_text(GTK_ENTRY(data), ""); - gtk_main_quit(); + gtk_entry_set_text(GTK_ENTRY(data), ""); + gtk_main_quit(); } diff --git a/gui.h b/gui.h index 17bf62d..be3f29f 100644 --- a/gui.h +++ b/gui.h @@ -13,7 +13,7 @@ int gui_init(int *argc, char ***argv); int showMessage(int message_type, char *text, char *defaultText, char **reply); // Slots -static void okay( GtkWidget *widget, gpointer data ); -static void cancel ( GtkWidget *widget, gpointer data ); +static void okay(GtkWidget *widget, gpointer data); +static void cancel(GtkWidget *widget, gpointer data); #endif // GUI_H diff --git a/main.c b/main.c index 81a81e4..0bf07ee 100644 --- a/main.c +++ b/main.c @@ -37,12 +37,12 @@ void debug( const char* format, ... ); void debug( const char* format, ... ) { #ifdef DEBUG_ENABLED - va_list args; - // fprintf( stderr, "[D] " ); - va_start( args, format ); - vfprintf( stderr, format, args ); - va_end( args ); - // fprintf( stderr, "\n" ); + va_list args; + // fprintf( stderr, "[D] " ); + va_start( args, format ); + vfprintf( stderr, format, args ); + va_end( args ); + // fprintf( stderr, "\n" ); #endif } @@ -50,514 +50,514 @@ void debug( const char* format, ... ) { // http://stackoverflow.com/questions/22802902/how-to-get-pid-of-process-executed-with-system-command-in-c pid_t system2(const char * command, int * infp, int * outfp) { - int p_stdin[2]; - int p_stdout[2]; - pid_t pid; + int p_stdin[2]; + int p_stdout[2]; + pid_t pid; - if (pipe(p_stdin) == -1) - return -1; + if (pipe(p_stdin) == -1) + return -1; - if (pipe(p_stdout) == -1) { - close(p_stdin[0]); - close(p_stdin[1]); - return -1; - } + if (pipe(p_stdout) == -1) { + close(p_stdin[0]); + close(p_stdin[1]); + return -1; + } - pid = fork(); + pid = fork(); - if (pid < 0) { - close(p_stdin[0]); - close(p_stdin[1]); - close(p_stdout[0]); - close(p_stdout[1]); - return pid; - } else if (pid == 0) { - close(p_stdin[1]); - dup2(p_stdin[0], 0); - close(p_stdout[0]); - dup2(p_stdout[1], 1); - dup2(open("/dev/null", O_RDONLY), 2); - /// Close all other descriptors for the safety sake. - for (int i = 3; i < 4096; ++i) - close(i); + if (pid < 0) { + close(p_stdin[0]); + close(p_stdin[1]); + close(p_stdout[0]); + close(p_stdout[1]); + return pid; + } else if (pid == 0) { + close(p_stdin[1]); + dup2(p_stdin[0], 0); + close(p_stdout[0]); + dup2(p_stdout[1], 1); + dup2(open("/dev/null", O_RDONLY), 2); + /// Close all other descriptors for the safety sake. + for (int i = 3; i < 4096; ++i) + close(i); - setsid(); - execl("/bin/sh", "sh", "-c", command, NULL); - _exit(1); - } + setsid(); + execl("/bin/sh", "sh", "-c", command, NULL); + _exit(1); + } } int run_ghdl(char *command, ...) { - FILE *proc; - char buf[1 K]; - char cmd[1 K]; + FILE *proc; + char buf[1 K]; + char cmd[1 K]; - char *arr[5]; - char *start; - char *ptr; - int arrc; - int i; + char *arr[5]; + char *start; + char *ptr; + int arrc; + int i; - va_list argptr; - va_start(argptr, command); - vsprintf(cmd, command, argptr); - va_end(argptr); + va_list argptr; + va_start(argptr, command); + vsprintf(cmd, command, argptr); + va_end(argptr); - debug("RUN_GHDL: %s\n", cmd); - proc = popen(cmd, "r"); + debug("RUN_GHDL: %s\n", cmd); + proc = popen(cmd, "r"); - if (proc == NULL) { - printf("Error: Could not invoke GHDL/GtkWave.\n"); - return 1; - } + if (proc == NULL) { + printf("Error: Could not invoke GHDL/GtkWave.\n"); + return 1; + } - // ../blink/src/top.vhd:32:19: no declaration for "counter_i2" - // ../blink/src/abc.vhd:12:14:warning: package "mypack" does not require a body - // v - // ** Error: /tmp/filename.vhd(32): (vcom-1136) Unknown identifier "counter_i2". + // ../blink/src/top.vhd:32:19: no declaration for "counter_i2" + // ../blink/src/abc.vhd:12:14:warning: package "mypack" does not require a body + // v + // ** Error: /tmp/filename.vhd(32): (vcom-1136) Unknown identifier "counter_i2". - while(42){ - ptr = buf - 1; + while(42){ + ptr = buf - 1; - do { - ptr++; - *ptr = fgetc(proc); - } while (*ptr != '\0' && *ptr != '\n' && *ptr != -1 && ptr < buf + sizeof(buf)); - if (*ptr == -1) - break; - *ptr = '\0'; + do { + ptr++; + *ptr = fgetc(proc); + } while (*ptr != '\0' && *ptr != '\n' && *ptr != -1 && ptr < buf + sizeof(buf)); + if (*ptr == -1) + break; + *ptr = '\0'; - ptr = buf; - start = buf; - arrc = 0; + ptr = buf; + start = buf; + arrc = 0; - //printf("** BUF: %s\n", buf); - do { // Split into params - if (*ptr == ' ') { - arr[arrc++] = start; - break; - } - if (arrc < 5 && (*ptr == ':' || *ptr == '\0')) { - arr[arrc++] = start; - if (*ptr == '\0') - break; - else - *ptr++ = 0; - start = ptr; - } - } while (*ptr++ != '\0'); + //printf("** BUF: %s\n", buf); + do { // Split into params + if (*ptr == ' ') { + arr[arrc++] = start; + break; + } + if (arrc < 5 && (*ptr == ':' || *ptr == '\0')) { + arr[arrc++] = start; + if (*ptr == '\0') + break; + else + *ptr++ = 0; + start = ptr; + } + } while (*ptr++ != '\0'); - if (arrc == 4) { - printf("** Error: %s(%s): (ghdl) %s\n", arr[0], arr[1], arr[3]); - } - else if (arrc == 5) { - printf("** Warning: %s(%s): (ghdl) %s\n", arr[0], arr[1], arr[4]); - } - else { - printf("** ghdl: "); - for (i = 0; i < arrc; i++) { - printf("%s", arr[i]); - } - printf("\n"); - } - fflush(stdout); - } + if (arrc == 4) { + printf("** Error: %s(%s): (ghdl) %s\n", arr[0], arr[1], arr[3]); + } + else if (arrc == 5) { + printf("** Warning: %s(%s): (ghdl) %s\n", arr[0], arr[1], arr[4]); + } + else { + printf("** ghdl: "); + for (i = 0; i < arrc; i++) { + printf("%s", arr[i]); + } + printf("\n"); + } + fflush(stdout); + } - return pclose(proc); + return pclose(proc); } int run_simulation(char *command, ...) { - FILE *proc; - char buf[1 K]; - char cmd[1 K]; + FILE *proc; + char buf[1 K]; + char cmd[1 K]; - va_list argptr; - va_start(argptr, command); - vsprintf(cmd, command, argptr); - va_end(argptr); + va_list argptr; + va_start(argptr, command); + vsprintf(cmd, command, argptr); + va_end(argptr); - debug("RUN_SIM: %s\n", cmd); - proc = popen(cmd, "r"); + debug("RUN_SIM: %s\n", cmd); + proc = popen(cmd, "r"); - if (proc == NULL) { - printf("[E] Could not start the simulation.\n"); - return 1; - } + if (proc == NULL) { + printf("[E] Could not start the simulation.\n"); + return 1; + } - while(fgets(buf, sizeof(buf), proc)!=NULL){ - printf("** sim: %s", buf); - } - printf("\n"); + while(fgets(buf, sizeof(buf), proc)!=NULL){ + printf("** sim: %s", buf); + } + printf("\n"); - return pclose(proc); + return pclose(proc); } int run_gtkwave(char *toplevel, char *command, ...) { - FILE *fp; - pid_t pid; - char cmd[1 K]; - char lockpath[1 K]; - va_list argptr; + FILE *fp; + pid_t pid; + char cmd[1 K]; + char lockpath[1 K]; + va_list argptr; - sprintf(lockpath, "/tmp/model-ghdl-gtkw-%s.lock", toplevel); + sprintf(lockpath, "/tmp/model-ghdl-gtkw-%s.lock", toplevel); - fp = fopen(lockpath,"r"); - if (fp) { - fgets(cmd, sizeof(cmd), fp); // lets (ab)use the cmd variable here - pid = atoi(cmd); - fclose(fp); + fp = fopen(lockpath,"r"); + if (fp) { + fgets(cmd, sizeof(cmd), fp); // lets (ab)use the cmd variable here + pid = atoi(cmd); + fclose(fp); - if (kill(pid, 0)) { // Check if the process still lives - pid = -1; - } - /*else { - printf("GtkWave is already running.\n"); - }*/ - } - else { - pid = -1; - } + if (kill(pid, 0)) { // Check if the process still lives + pid = -1; + } + /*else { + printf("GtkWave is already running.\n"); + }*/ + } + else { + pid = -1; + } - if (pid < 0) { - va_start(argptr, command); - vsprintf(cmd, command, argptr); - va_end(argptr); + if (pid < 0) { + va_start(argptr, command); + vsprintf(cmd, command, argptr); + va_end(argptr); - debug("RUN_GTKWAVE: %s\n", cmd); + debug("RUN_GTKWAVE: %s\n", cmd); - pid = system2(cmd, NULL, NULL); - //debug("--> PID=%d\n", pid); + pid = system2(cmd, NULL, NULL); + //debug("--> PID=%d\n", pid); - // Prevent gtkw from starting again each time - fp = fopen(lockpath,"w"); - if (fp) { - fprintf(fp, "%d", pid); - fclose(fp); - } - else { - printf("[W] Could not create temp file %s! Ignoring...", lockpath); - } - } + // Prevent gtkw from starting again each time + fp = fopen(lockpath,"w"); + if (fp) { + fprintf(fp, "%d", pid); + fclose(fp); + } + else { + printf("[W] Could not create temp file %s! Ignoring...", lockpath); + } + } - return 0; + return 0; } int vsim(int argc, char **argv) { - int ret; - char *text = NULL; - char *work = NULL; - char *toplevel = NULL; - char *gtkwPrefix = NULL; + int ret; + char *text = NULL; + char *work = NULL; + char *toplevel = NULL; + char *gtkwPrefix = NULL; - int i; - char *ptr = NULL; - char *lastPtr; - char workdir[1 K]; - char sourcedir[1 K]; - char *params = NULL; - char *simtime = NULL; - char *simExt = NULL; - char *outFileType = NULL; - char vhdlver[16] = ""; - int precompiled = 1; - FILE *fp; + int i; + char *ptr = NULL; + char *lastPtr; + char workdir[1 K]; + char sourcedir[1 K]; + char *params = NULL; + char *simtime = NULL; + char *simExt = NULL; + char *outFileType = NULL; + char vhdlver[16] = ""; + int precompiled = 1; + FILE *fp; - append_string(¶ms,""); + append_string(¶ms,""); - gui_init(&argc, &argv); + gui_init(&argc, &argv); - if (!getcwd(sourcedir, sizeof(sourcedir))) { // Default compile dir is cwd - sourcedir[0] = 0; - printf("[W] Could not get cwd!\n"); - } + if (!getcwd(sourcedir, sizeof(sourcedir))) { // Default compile dir is cwd + sourcedir[0] = 0; + printf("[W] Could not get cwd!\n"); + } - fp = fopen("/tmp/model-ghdl-vsim","r"); - if (fp) { - fgets(workdir, sizeof(workdir), fp); // lets (ab)use the workdir variable here - append_string(&simtime, workdir); - fclose(fp); - } - else { - append_string(&simtime, "100ns"); - } + fp = fopen("/tmp/model-ghdl-vsim","r"); + if (fp) { + fgets(workdir, sizeof(workdir), fp); // lets (ab)use the workdir variable here + append_string(&simtime, workdir); + fclose(fp); + } + else { + append_string(&simtime, "100ns"); + } - fp = fopen("/tmp/model-ghdl-vcom","r"); - if (fp) { - fgets(workdir, sizeof(workdir), fp); // (ab)use workdir variable as temp - if (!strcmp(workdir,"nopre\n")) - precompiled = 0; - fgets(workdir, sizeof(workdir), fp); - workdir[strlen(workdir)-1] = 0; - fgets(vhdlver, sizeof(vhdlver), fp); - fclose(fp); - } - else { - printf("[E] Could not read temp file /tmp/model-ghdl-vcom! Aborting..."); - } + fp = fopen("/tmp/model-ghdl-vcom","r"); + if (fp) { + fgets(workdir, sizeof(workdir), fp); // (ab)use workdir variable as temp + if (!strcmp(workdir,"nopre\n")) + precompiled = 0; + fgets(workdir, sizeof(workdir), fp); + workdir[strlen(workdir)-1] = 0; + fgets(vhdlver, sizeof(vhdlver), fp); + fclose(fp); + } + else { + printf("[E] Could not read temp file /tmp/model-ghdl-vcom! Aborting..."); + } - printf ("[I] Emulating vsim.\n"); - // -gui work.toplevel(RTL) - for (i=1; i < argc; ++i) { - if (ptr == NULL && GETOPT("-gui")) { // only allow once - append_string(&ptr, argv[i]); - lastPtr = ptr; - for (; *ptr != 0; ptr++) { - if (*ptr >= 'A' && *ptr <= 'Z') - *ptr = *ptr - ('A'-'a'); // convert to lower case + printf ("[I] Emulating vsim.\n"); + // -gui work.toplevel(RTL) + for (i=1; i < argc; ++i) { + if (ptr == NULL && GETOPT("-gui")) { // only allow once + append_string(&ptr, argv[i]); + lastPtr = ptr; + for (; *ptr != 0; ptr++) { + if (*ptr >= 'A' && *ptr <= 'Z') + *ptr = *ptr - ('A'-'a'); // convert to lower case - if (*ptr == '.') { - *ptr++ = 0; - work = lastPtr; - lastPtr = ptr; - } - else if (*ptr == '(') { - *ptr++ = 0; - toplevel = lastPtr; - lastPtr = ptr; - } - } - // free(ptr); DO NOT FREE, we still need it. - // ptr = NULL; - } - else if (GETOPT("-type")) { - append_string(&simExt, argv[i]); - } - else if (GETOPT("-ghdl")) { - append_string(¶ms, " "); - append_string(¶ms, argv[i]); - } - else if (GETOPT("-gtkwprefix")) { - gtkwPrefix = argv[i]; - } - else { + if (*ptr == '.') { + *ptr++ = 0; + work = lastPtr; + lastPtr = ptr; + } + else if (*ptr == '(') { + *ptr++ = 0; + toplevel = lastPtr; + lastPtr = ptr; + } + } + // free(ptr); DO NOT FREE, we still need it. + // ptr = NULL; + } + else if (GETOPT("-type")) { + append_string(&simExt, argv[i]); + } + else if (GETOPT("-ghdl")) { + append_string(¶ms, " "); + append_string(¶ms, argv[i]); + } + else if (GETOPT("-gtkwprefix")) { + gtkwPrefix = argv[i]; + } + else { - } - } + } + } - if (simExt == NULL) - append_string(&simExt, "ghw"); + if (simExt == NULL) + append_string(&simExt, "ghw"); - if (!strcmp(simExt,"ghw")) { - append_string(&outFileType, "wave"); - } - else if (!strcmp(simExt,"vcd")) { - append_string(&outFileType, "vcd"); - } - else if (!strcmp(simExt,"fst")) { - append_string(&outFileType, "fst"); - } - else { - fprintf(stderr, "[E] Unknown output file type!"); - showMessage(MESSAGE_ERROR, "Error! Unknown output file type.", NULL, NULL); - return 127; - } + if (!strcmp(simExt,"ghw")) { + append_string(&outFileType, "wave"); + } + else if (!strcmp(simExt,"vcd")) { + append_string(&outFileType, "vcd"); + } + else if (!strcmp(simExt,"fst")) { + append_string(&outFileType, "fst"); + } + else { + fprintf(stderr, "[E] Unknown output file type!"); + showMessage(MESSAGE_ERROR, "Error! Unknown output file type.", NULL, NULL); + return 127; + } - chdir(workdir); + chdir(workdir); - if (gtkwPrefix == NULL) { - append_string(>kwPrefix, ""); - } + if (gtkwPrefix == NULL) { + append_string(>kwPrefix, ""); + } - printf("[I] Compiling...\n"); - if (run_ghdl("ghdl -%c %s --work=%s --workdir=\"%s\" %s %s", (precompiled ? 'e' : 'm'), vhdlver, work, workdir, params, toplevel)) { - fprintf(stderr, "[E] Compilation failed!"); - showMessage(MESSAGE_ERROR, "Error! Compilation failed.", NULL, NULL); - } - else { - if (ret = showMessage(MESSAGE_INPUT, "Enter the simulation time: ", simtime, &text)) { - free(simtime); - simtime = NULL; - append_string(&simtime, text); - fp = fopen("/tmp/model-ghdl-vsim","w"); - if (fp) { - fprintf(fp, "%s", simtime); - fclose(fp); - } + printf("[I] Compiling...\n"); + if (run_ghdl("ghdl -%c %s --work=%s --workdir=\"%s\" %s %s", (precompiled ? 'e' : 'm'), vhdlver, work, workdir, params, toplevel)) { + fprintf(stderr, "[E] Compilation failed!"); + showMessage(MESSAGE_ERROR, "Error! Compilation failed.", NULL, NULL); + } + else { + if (ret = showMessage(MESSAGE_INPUT, "Enter the simulation time: ", simtime, &text)) { + free(simtime); + simtime = NULL; + append_string(&simtime, text); + fp = fopen("/tmp/model-ghdl-vsim","w"); + if (fp) { + fprintf(fp, "%s", simtime); + fclose(fp); + } - printf("[I] Simulating...\n"); - if (run_simulation("%s/%s --stop-time=%s --%s=%s.%s", workdir, toplevel, simtime, outFileType, toplevel, simExt)) { - fprintf(stderr, "[E] Simulation failed!"); - showMessage(MESSAGE_ERROR, "Error! Simulation failed.", NULL, NULL); - } - else { - if (run_gtkwave(toplevel, "gtkwave %s/%s.%s --save=\"%s/%s%s.gtkw\"", workdir, toplevel, simExt, sourcedir, gtkwPrefix, toplevel)) { - fprintf(stderr, "[E] Could not open GtkWave!"); - showMessage(MESSAGE_ERROR, "Error! Could not open GtkWave!", NULL, NULL); - } - printf("[I] DONE.\n"); - } - } - return 0; - } + printf("[I] Simulating...\n"); + if (run_simulation("%s/%s --stop-time=%s --%s=%s.%s", workdir, toplevel, simtime, outFileType, toplevel, simExt)) { + fprintf(stderr, "[E] Simulation failed!"); + showMessage(MESSAGE_ERROR, "Error! Simulation failed.", NULL, NULL); + } + else { + if (run_gtkwave(toplevel, "gtkwave %s/%s.%s --save=\"%s/%s%s.gtkw\"", workdir, toplevel, simExt, sourcedir, gtkwPrefix, toplevel)) { + fprintf(stderr, "[E] Could not open GtkWave!"); + showMessage(MESSAGE_ERROR, "Error! Could not open GtkWave!", NULL, NULL); + } + printf("[I] DONE.\n"); + } + } + return 0; + } - free(ptr); // Now we can free it + free(ptr); // Now we can free it - return 255; + return 255; } int vcom(int argc, char **argv) { - int i; - int slen = 0; - char workdir[1 K]; - char *params = NULL; - char *work = NULL; - char *files = NULL; - char vhdlver[16] = ""; - FILE *fp = NULL; - int precompile = 1; + int i; + int slen = 0; + char workdir[1 K]; + char *params = NULL; + char *work = NULL; + char *files = NULL; + char vhdlver[16] = ""; + FILE *fp = NULL; + int precompile = 1; - printf ("[I] Emulating vcom.\n"); + printf ("[I] Emulating vcom.\n"); - if (!getcwd(workdir, sizeof(workdir))) { // Default compile dir is cwd - fprintf(stderr, "[E] Could not get cwd!\n"); - return 1; - } + if (!getcwd(workdir, sizeof(workdir))) { // Default compile dir is cwd + fprintf(stderr, "[E] Could not get cwd!\n"); + return 1; + } - for (i=1; i < argc; ++i) { - if (GETOPT("-work")) { - work = argv[i]; - } - else if (GETOPT("-workdir")) { - strcpy(workdir, argv[i]); - } - else if (ISOPT("-87")) { - strcpy(vhdlver, "--std=87"); - } - else if (ISOPT("-93")) { - strcpy(vhdlver, "--std=93"); - } - else if (ISOPT("-93c")) { - strcpy(vhdlver, "--std=93c"); - } - else if (ISOPT("-2000")) { - strcpy(vhdlver, "--std=00"); - } - else if (ISOPT("-2002")) { - strcpy(vhdlver, "--std=02"); - } - else if (ISOPT("-2008")) { - strcpy(vhdlver, "--std=08"); - } - else if (ISOPT("-no-precompile")) { - precompile = 0; - } - else if (GETOPT("-ghdl")) { - append_string(¶ms, " "); - append_string(¶ms, argv[i]); - } - else if (argv[i][0] != '-'){ // VHDL file - slen += strlen(argv[i]) + 2; - files = realloc(files, slen * sizeof(char)); - strcat(files, " "); - strcat(files, argv[i]); - } - } + for (i=1; i < argc; ++i) { + if (GETOPT("-work")) { + work = argv[i]; + } + else if (GETOPT("-workdir")) { + strcpy(workdir, argv[i]); + } + else if (ISOPT("-87")) { + strcpy(vhdlver, "--std=87"); + } + else if (ISOPT("-93")) { + strcpy(vhdlver, "--std=93"); + } + else if (ISOPT("-93c")) { + strcpy(vhdlver, "--std=93c"); + } + else if (ISOPT("-2000")) { + strcpy(vhdlver, "--std=00"); + } + else if (ISOPT("-2002")) { + strcpy(vhdlver, "--std=02"); + } + else if (ISOPT("-2008")) { + strcpy(vhdlver, "--std=08"); + } + else if (ISOPT("-no-precompile")) { + precompile = 0; + } + else if (GETOPT("-ghdl")) { + append_string(¶ms, " "); + append_string(¶ms, argv[i]); + } + else if (argv[i][0] != '-'){ // VHDL file + slen += strlen(argv[i]) + 2; + files = realloc(files, slen * sizeof(char)); + strcat(files, " "); + strcat(files, argv[i]); + } + } - if (!params) - append_string(¶ms, ""); - if (!work) - append_string(&work, "work"); + if (!params) + append_string(¶ms, ""); + if (!work) + append_string(&work, "work"); - if (!files) { - fprintf(stderr, "[E] No input files specified.\n"); - return 2; - } + if (!files) { + fprintf(stderr, "[E] No input files specified.\n"); + return 2; + } - // Info for vsim later on - fp = fopen("/tmp/model-ghdl-vcom","w"); - if (fp) { - fprintf(fp, "%s\n%s\n%s", (precompile ? "pre" : "nopre"), workdir, vhdlver); - fclose(fp); - } - else { - printf("[W] Could not create temp file /tmp/model-ghdl-vcom! Ignoring..."); - } + // Info for vsim later on + fp = fopen("/tmp/model-ghdl-vcom","w"); + if (fp) { + fprintf(fp, "%s\n%s\n%s", (precompile ? "pre" : "nopre"), workdir, vhdlver); + fclose(fp); + } + else { + printf("[W] Could not create temp file /tmp/model-ghdl-vcom! Ignoring..."); + } - run_ghdl("ghdl -i --work=%s --workdir=%s %s %s %s 2>&1", - work, workdir, vhdlver, params, files); - run_ghdl("ghdl -%c --work=%s --workdir=%s %s %s %s 2>&1", - (precompile ? 'a' : 's'), work, workdir, vhdlver, params, files); + run_ghdl("ghdl -i --work=%s --workdir=%s %s %s %s 2>&1", + work, workdir, vhdlver, params, files); + run_ghdl("ghdl -%c --work=%s --workdir=%s %s %s %s 2>&1", + (precompile ? 'a' : 's'), work, workdir, vhdlver, params, files); - free(files); + free(files); - printf("[I] DONE.\n"); - return 0; + printf("[I] DONE.\n"); + return 0; } char* append_string(char **dest, const char *src) { - if (*dest == NULL) { - *dest = malloc(strlen(src) * sizeof(char)); - if (*dest == NULL) - return NULL; - *dest[0] = 0; - } - else { - *dest = realloc(*dest, (strlen(*dest) + strlen(src) + 1) * sizeof(char)); - } + if (*dest == NULL) { + *dest = malloc(strlen(src) * sizeof(char)); + if (*dest == NULL) + return NULL; + *dest[0] = 0; + } + else { + *dest = realloc(*dest, (strlen(*dest) + strlen(src) + 1) * sizeof(char)); + } - strcat(*dest, src); - return *dest; + strcat(*dest, src); + return *dest; } int main(int argc, char **argv) { - printf ("model-ghdl revision %s, compiled on %s.\n", PROGRAM_REVISION, __DATE__); + printf ("model-ghdl revision %s, compiled on %s.\n", PROGRAM_REVISION, __DATE__); - switch (get_application(argv[0])) { - case PROG_VCOM: - return vcom(argc, argv); - case PROG_VSIM: - return vsim(argc, argv); - case PROG_VMAP: - case PROG_VLIB: - case PROG_VDEL: - return 0; - default: - return 255; - } + switch (get_application(argv[0])) { + case PROG_VCOM: + return vcom(argc, argv); + case PROG_VSIM: + return vsim(argc, argv); + case PROG_VMAP: + case PROG_VLIB: + case PROG_VDEL: + return 0; + default: + return 255; + } } // Detects which function to call depending on the program name in argv[0] int get_application(const char *call) { - char *pos; - pos = (char*) getAfter(call, "/"); - if (strcmp(pos, "vcom") == 0) { - return PROG_VCOM; - } - else if (strcmp(pos, "vsim") == 0) { - return PROG_VSIM; - } - else if (strcmp(pos, "vlib") == 0) { - return PROG_VLIB; - } - else if (strcmp(pos, "vmap") == 0) { - return PROG_VMAP; - } - else if (strcmp(pos, "vdel") == 0) { - return PROG_VDEL; - } - else { - fprintf(stderr, "[E] Program not recognized: %s\n", pos); - return PROG_UNKNOWN; - } + char *pos; + pos = (char*) getAfter(call, "/"); + if (strcmp(pos, "vcom") == 0) { + return PROG_VCOM; + } + else if (strcmp(pos, "vsim") == 0) { + return PROG_VSIM; + } + else if (strcmp(pos, "vlib") == 0) { + return PROG_VLIB; + } + else if (strcmp(pos, "vmap") == 0) { + return PROG_VMAP; + } + else if (strcmp(pos, "vdel") == 0) { + return PROG_VDEL; + } + else { + fprintf(stderr, "[E] Program not recognized: %s\n", pos); + return PROG_UNKNOWN; + } } // Returns the string after the last occurence of __needle const char *getAfter (const char *__haystack, const char *__needle) { - char *pos, *realPos; - char *haystack; - haystack = (char*) __haystack; - pos = (char*) __haystack; - while (pos != NULL) { - realPos = pos + 1; - pos = strstr(haystack, __needle); - if (haystack == __haystack && pos == NULL) // If no __needle is present at all... - realPos = (char*) __haystack; // Return the entire string - haystack = pos + 1; - } - return realPos; + char *pos, *realPos; + char *haystack; + haystack = (char*) __haystack; + pos = (char*) __haystack; + while (pos != NULL) { + realPos = pos + 1; + pos = strstr(haystack, __needle); + if (haystack == __haystack && pos == NULL) // If no __needle is present at all... + realPos = (char*) __haystack; // Return the entire string + haystack = pos + 1; + } + return realPos; }