Mercurial > repos > rhope
view visuality_cmd.c @ 121:1af91ceaaf49
Fixed memory leak when an output is only attached to a single null input
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Thu, 28 Oct 2010 21:04:12 -0400 |
parents | 76568becd6d6 |
children |
line wrap: on
line source
#include <stdio.h> #include <string.h> #include <stdlib.h> #include "structs.h" #include "visuality.h" #include "interp.h" #include <time.h> #include "parser.h" #include "saveload.h" #ifdef WIN32 #ifdef GUI_LIB #define WIN32_GUI #endif #endif extern BOOL execute_active; extern int num_workers; extern int num_wires; #ifdef WIN32_GUI #include "ms_window.h" HINSTANCE glob_instance; int glob_cmd_show; char prog_name[] = "visuality_cmd"; int WINAPI WinMain (HINSTANCE instance_handle, HINSTANCE prev_instance, LPSTR cmd_str, int cmd_show) { int argc = 1; char * argv[10]; #else int main(int argc, char ** argv) { #endif //WIN32_GUI int i; char newfile[512]; time_t start_time; char * offset; int min_args = 2; int num_threads = -1; BOOL save_flag = FALSE; program * prog; #ifdef WIN32_GUI argv[0] = prog_name; argv[1] = cmd_str; for(i = 1; cmd_str[i-1] != '\0' && argc < 10; ++i) { if(cmd_str[i] == ' ' || cmd_str[i] == '\0') { cmd_str[i] = '\0'; ++argc; if(argc < 10) argv[argc] = cmd_str + i+1; } } glob_instance = instance_handle; glob_cmd_show = cmd_show; #endif if(argc >= 2) if(strcmp(argv[1],"-t") == 0) min_args += 2; else if(strcmp(argv[1], "-v") == 0) { #ifdef TEXT_FILE_DEBUG debugfile = fopen("interp_debug.txt", "w"); #endif start_time = time(NULL); test_virtual(); printf("Execution took %d seconds.\n", (time(NULL)-start_time)); return 0; } if(argc >= min_args && !strcmp(argv[min_args-1],"-c")) { min_args+=2; save_flag = TRUE; } #ifdef TEXT_FILE_DEBUG debugfile = fopen("interp_debug.txt", "w"); #endif if(argc < min_args) { min_args = argc; prog = load_program("parser.vistxt"); } else { if(min_args > 2) num_threads = atoi(argv[2]); //printf("Loading %s\n", argv[min_args-1]); DEBUGPUTS("load_program\n"); if(!strcmp(strrchr(argv[min_args-1],'.')+1, "rhope")) { --min_args; prog = load_program("parser.vistxt"); } else prog = load_program(argv[min_args-1]); } start_time = time(NULL); if(save_flag) { save_program(prog, argv[min_args-2]); } /*#ifdef WIN32 interp_start(num_threads,FALSE, argc-(min_args-1), argv + (min_args-1), prog); message_loop(); #else*/ interp_start(num_threads,TRUE, argc-(min_args-1), argv + (min_args-1), prog); //#endif printf("Execution took %d seconds.\n", (time(NULL)-start_time)); return 0; }