working vec for one file
This commit is contained in:
		
							parent
							
								
									268b92edcd
								
							
						
					
					
						commit
						8d9e2416f2
					
				
							
								
								
									
										52
									
								
								cparse.c
									
									
									
									
									
								
							
							
						
						
									
										52
									
								
								cparse.c
									
									
									
									
									
								
							@ -14,7 +14,7 @@ int find_funcs(const char *path)
 | 
				
			|||||||
	char line[1024];
 | 
						char line[1024];
 | 
				
			||||||
	char boum[1024];
 | 
						char boum[1024];
 | 
				
			||||||
	regmatch_t rm[2];
 | 
						regmatch_t rm[2];
 | 
				
			||||||
	const char *re_func_decl = "^(\\w+(\\s+)?){2,}\\([^!@#$+%^]+?\\)\\s+";
 | 
						const char *re_func_decl = "^(\\w+(\\s+)?\\**){2,}\\([^!@#$+%^]+?\\)\\s+";
 | 
				
			||||||
	const char *re_func_call = "([a-zA-Z_0-9]+)\\(.*\\)";
 | 
						const char *re_func_call = "([a-zA-Z_0-9]+)\\(.*\\)";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	fp = fopen(path, "r");
 | 
						fp = fopen(path, "r");
 | 
				
			||||||
@ -32,11 +32,10 @@ int find_funcs(const char *path)
 | 
				
			|||||||
		fprintf(stderr, "Failed to compile regex '%s'\n", re_func_call);
 | 
							fprintf(stderr, "Failed to compile regex '%s'\n", re_func_call);
 | 
				
			||||||
		return EXIT_FAILURE;
 | 
							return EXIT_FAILURE;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	int i = 0;
 | 
					 | 
				
			||||||
	bool in = false;
 | 
						bool in = false;
 | 
				
			||||||
	graph_vec g = new_graph(10);
 | 
						graph_vec g = new_graph(10);
 | 
				
			||||||
	int index;
 | 
						int index;
 | 
				
			||||||
	int i1, i2 = -1;
 | 
						int cur_node;
 | 
				
			||||||
	while ((fgets(line, 1024, fp)) != NULL) {
 | 
						while ((fgets(line, 1024, fp)) != NULL) {
 | 
				
			||||||
		if (in && line[0] == '}') {
 | 
							if (in && line[0] == '}') {
 | 
				
			||||||
			in = false;
 | 
								in = false;
 | 
				
			||||||
@ -47,38 +46,39 @@ int find_funcs(const char *path)
 | 
				
			|||||||
				sprintf(boum, "%.*s", (int)(rm[1].rm_eo - rm[1].rm_so), line + rm[1].rm_so);
 | 
									sprintf(boum, "%.*s", (int)(rm[1].rm_eo - rm[1].rm_so), line + rm[1].rm_so);
 | 
				
			||||||
				// printf("%.*s\n", (int)(rm[1].rm_eo - rm[1].rm_so), line + rm[1].rm_so);
 | 
									// printf("%.*s\n", (int)(rm[1].rm_eo - rm[1].rm_so), line + rm[1].rm_so);
 | 
				
			||||||
				if ((index = is_in(g, boum))) {
 | 
									if ((index = is_in(g, boum))) {
 | 
				
			||||||
					if (g.node[i2]->nbs == g.node[i2]->cap)
 | 
										if (g.node[cur_node]->nbs == g.node[cur_node]->cap)
 | 
				
			||||||
						g.node[i2]->succ = reallocarray(g.node[i2]->succ, (g.node[i2]->cap += 5), sizeof(nodept));
 | 
											g.node[cur_node]->succ = reallocarray(g.node[cur_node]->succ, (g.node[cur_node]->cap += 5), sizeof(nodept));
 | 
				
			||||||
					g.node[i2]->succ[i1] = g.node[index];
 | 
										g.node[cur_node]->succ[g.node[cur_node]->nbs] = g.node[index];
 | 
				
			||||||
					g.node[i2]->nbs++;
 | 
										g.node[cur_node]->nbs++;
 | 
				
			||||||
					i1++;
 | 
					 | 
				
			||||||
				} else {
 | 
									} else {
 | 
				
			||||||
					insert_node(&g, i, boum, false);
 | 
										insert_node(&g, boum);
 | 
				
			||||||
					if (g.node[i2]->nbs == g.node[i2]->cap)
 | 
										if (g.node[cur_node]->nbs == g.node[cur_node]->cap)
 | 
				
			||||||
						g.node[i2]->succ = reallocarray(g.node[i2]->succ, (g.node[i2]->cap += 5), sizeof(nodept));
 | 
											g.node[cur_node]->succ = reallocarray(g.node[cur_node]->succ, (g.node[cur_node]->cap += 5), sizeof(nodept));
 | 
				
			||||||
					g.node[i2]->succ[i1] = g.node[i];
 | 
										g.node[cur_node]->succ[g.node[cur_node]->nbs] = g.node[g.n];
 | 
				
			||||||
					g.node[i2]->nbs++;
 | 
										g.node[cur_node]->nbs++;
 | 
				
			||||||
					i1++;
 | 
					 | 
				
			||||||
					i++;
 | 
					 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		} else if (regexec(&fdre, line, 2, rm, 0) == 0) {
 | 
							} else if (regexec(&fdre, line, 2, rm, 0) == 0) { // function definition
 | 
				
			||||||
			sprintf(boum, "%.*s", (int)(rm[1].rm_eo - rm[1].rm_so), line + rm[1].rm_so);
 | 
								sprintf(boum, "%.*s", (int)(rm[1].rm_eo - rm[1].rm_so), line + rm[1].rm_so);
 | 
				
			||||||
			// printf("%.*s\n", (int)(rm[1].rm_eo - rm[1].rm_so), line + rm[1].rm_so);
 | 
								if ((index = is_in(g, boum))) {
 | 
				
			||||||
			insert_node(&g, i, boum, true);
 | 
									cur_node = index;
 | 
				
			||||||
			i++;
 | 
								} else {
 | 
				
			||||||
			i2++;
 | 
									insert_node(&g, boum);
 | 
				
			||||||
 | 
									cur_node = g.n;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								// if (strcmp(boum, "ml_new_data") == 0)
 | 
				
			||||||
 | 
								// 	printf("%d\n", cur_node);
 | 
				
			||||||
			in = true;
 | 
								in = true;
 | 
				
			||||||
			i1 = 0;
 | 
					 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	// for (int j = 0; j < i; j++) {
 | 
						// for (int j = 0; j < g.n; j++) {
 | 
				
			||||||
	// 	printf("NODE %d: %s\n", j, g.node[j]->func);
 | 
						// 	printf("NODE %d: %s\n", j, g.node[j]->func);
 | 
				
			||||||
	// 	for (int n = 0; n < g.node[j]->nbs; n++) {
 | 
					 | 
				
			||||||
	// 		printf("SUCC %d: %s\n", j, g.node[j]->succ[n]->func);
 | 
					 | 
				
			||||||
	// }
 | 
						// }
 | 
				
			||||||
	// }
 | 
						// print_node(g.node[0]);
 | 
				
			||||||
	print_node(g.node[0]);
 | 
						dot_graph(g.node[0]);
 | 
				
			||||||
 | 
						// int test = is_in(g, "ml_new_data");
 | 
				
			||||||
 | 
						// printf("%s\n", g.node[14]->func);
 | 
				
			||||||
 | 
						// printf("%d\n", g.node[14]->nbs);
 | 
				
			||||||
	regfree(&fdre);
 | 
						regfree(&fdre);
 | 
				
			||||||
	regfree(&fcre);
 | 
						regfree(&fcre);
 | 
				
			||||||
	fclose(fp);
 | 
						fclose(fp);
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										188
									
								
								graph.dot
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										188
									
								
								graph.dot
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,188 @@
 | 
				
			|||||||
 | 
					digraph main {
 | 
				
			||||||
 | 
						ml_open -> mf_open;
 | 
				
			||||||
 | 
						ml_open -> mf_new;
 | 
				
			||||||
 | 
						ml_open -> iemsg;
 | 
				
			||||||
 | 
						ml_open -> xstrlcpy;
 | 
				
			||||||
 | 
						ml_open -> long_to_char;
 | 
				
			||||||
 | 
						ml_open -> get_fileformat;
 | 
				
			||||||
 | 
						ml_open -> set_b0_fname;
 | 
				
			||||||
 | 
						ml_open -> os_get_user_name;
 | 
				
			||||||
 | 
						ml_open -> os_get_hostname;
 | 
				
			||||||
 | 
						ml_open -> long_to_char;
 | 
				
			||||||
 | 
						ml_open -> findswapname;
 | 
				
			||||||
 | 
						ml_open -> mf_put;
 | 
				
			||||||
 | 
						ml_open -> B_SPELL;
 | 
				
			||||||
 | 
						ml_open -> mf_sync;
 | 
				
			||||||
 | 
						ml_open -> ml_new_ptr;
 | 
				
			||||||
 | 
						ml_open -> iemsg;
 | 
				
			||||||
 | 
						ml_open -> mf_put;
 | 
				
			||||||
 | 
						ml_open -> ml_new_data;
 | 
				
			||||||
 | 
						ml_open -> iemsg;
 | 
				
			||||||
 | 
						ml_open -> mf_put;
 | 
				
			||||||
 | 
						ml_open -> mf_close;
 | 
				
			||||||
 | 
						set_b0_fname -> home_replace;
 | 
				
			||||||
 | 
						set_b0_fname -> os_get_user_name;
 | 
				
			||||||
 | 
						set_b0_fname -> STRLEN;
 | 
				
			||||||
 | 
						set_b0_fname -> STRLEN;
 | 
				
			||||||
 | 
						set_b0_fname -> STRLCPY;
 | 
				
			||||||
 | 
						set_b0_fname -> memmove;
 | 
				
			||||||
 | 
						set_b0_fname -> memmove;
 | 
				
			||||||
 | 
						set_b0_fname -> os_fileinfo;
 | 
				
			||||||
 | 
						set_b0_fname -> long_to_char;
 | 
				
			||||||
 | 
						set_b0_fname -> long_to_char;
 | 
				
			||||||
 | 
						set_b0_fname -> buf_store_file_info;
 | 
				
			||||||
 | 
						set_b0_fname -> long_to_char;
 | 
				
			||||||
 | 
						set_b0_fname -> long_to_char;
 | 
				
			||||||
 | 
						set_b0_fname -> add_b0_fenc;
 | 
				
			||||||
 | 
						add_b0_fenc -> STRLEN;
 | 
				
			||||||
 | 
						add_b0_fenc -> STRLEN;
 | 
				
			||||||
 | 
						add_b0_fenc -> memmove;
 | 
				
			||||||
 | 
						findswapname -> FUNC_ATTR_NONNULL_ARG;
 | 
				
			||||||
 | 
						findswapname -> strlen;
 | 
				
			||||||
 | 
						findswapname -> xmalloc;
 | 
				
			||||||
 | 
						findswapname -> copy_option_part;
 | 
				
			||||||
 | 
						findswapname -> makeswapname;
 | 
				
			||||||
 | 
						findswapname -> strlen;
 | 
				
			||||||
 | 
						findswapname -> XFREE_CLEAR;
 | 
				
			||||||
 | 
						findswapname -> os_fileinfo_link;
 | 
				
			||||||
 | 
						findswapname -> fnamecmp;
 | 
				
			||||||
 | 
						findswapname -> os_open;
 | 
				
			||||||
 | 
						findswapname -> read_eintr;
 | 
				
			||||||
 | 
						findswapname -> fnamecmp;
 | 
				
			||||||
 | 
						findswapname -> path_tail;
 | 
				
			||||||
 | 
						findswapname -> same_directory;
 | 
				
			||||||
 | 
						findswapname -> expand_env;
 | 
				
			||||||
 | 
						findswapname -> char_to_long;
 | 
				
			||||||
 | 
						findswapname -> expand_env;
 | 
				
			||||||
 | 
						findswapname -> char_to_long;
 | 
				
			||||||
 | 
						findswapname -> close;
 | 
				
			||||||
 | 
						findswapname -> vim_strchr;
 | 
				
			||||||
 | 
						findswapname -> os_path_exists;
 | 
				
			||||||
 | 
						findswapname -> verb_msg;
 | 
				
			||||||
 | 
						findswapname -> has_autocmd;
 | 
				
			||||||
 | 
						findswapname -> do_swapexists;
 | 
				
			||||||
 | 
						findswapname -> attention_message;
 | 
				
			||||||
 | 
						findswapname -> flush_buffers;
 | 
				
			||||||
 | 
						findswapname -> _;
 | 
				
			||||||
 | 
						findswapname -> _;
 | 
				
			||||||
 | 
						findswapname -> strlen;
 | 
				
			||||||
 | 
						findswapname -> strlen;
 | 
				
			||||||
 | 
						findswapname -> strlen;
 | 
				
			||||||
 | 
						findswapname -> xmalloc;
 | 
				
			||||||
 | 
						findswapname -> memcpy;
 | 
				
			||||||
 | 
						findswapname -> home_replace;
 | 
				
			||||||
 | 
						findswapname -> xstrlcat;
 | 
				
			||||||
 | 
						findswapname -> do_dialog;
 | 
				
			||||||
 | 
						findswapname -> xfree;
 | 
				
			||||||
 | 
						findswapname -> msg_reset_scroll;
 | 
				
			||||||
 | 
						findswapname -> os_remove;
 | 
				
			||||||
 | 
						findswapname -> os_path_exists;
 | 
				
			||||||
 | 
						findswapname -> msg_puts;
 | 
				
			||||||
 | 
						findswapname -> wait_return;
 | 
				
			||||||
 | 
						findswapname -> emsg;
 | 
				
			||||||
 | 
						findswapname -> XFREE_CLEAR;
 | 
				
			||||||
 | 
						findswapname -> os_isdir;
 | 
				
			||||||
 | 
						findswapname -> os_mkdir_recurse;
 | 
				
			||||||
 | 
						findswapname -> os_strerror;
 | 
				
			||||||
 | 
						findswapname -> xfree;
 | 
				
			||||||
 | 
						findswapname -> xfree;
 | 
				
			||||||
 | 
						makeswapname -> resolve_symlink;
 | 
				
			||||||
 | 
						makeswapname -> STRLEN;
 | 
				
			||||||
 | 
						makeswapname -> after_pathsep;
 | 
				
			||||||
 | 
						makeswapname -> make_percent_swname;
 | 
				
			||||||
 | 
						makeswapname -> modname;
 | 
				
			||||||
 | 
						makeswapname -> xfree;
 | 
				
			||||||
 | 
						makeswapname -> modname;
 | 
				
			||||||
 | 
						makeswapname -> get_file_in_dir;
 | 
				
			||||||
 | 
						makeswapname -> xfree;
 | 
				
			||||||
 | 
						resolve_symlink -> STRLCPY;
 | 
				
			||||||
 | 
						resolve_symlink -> semsg;
 | 
				
			||||||
 | 
						resolve_symlink -> readlink;
 | 
				
			||||||
 | 
						resolve_symlink -> vim_FullName;
 | 
				
			||||||
 | 
						resolve_symlink -> path_is_absolute;
 | 
				
			||||||
 | 
						resolve_symlink -> STRCPY;
 | 
				
			||||||
 | 
						resolve_symlink -> path_tail;
 | 
				
			||||||
 | 
						resolve_symlink -> STRLEN;
 | 
				
			||||||
 | 
						resolve_symlink -> STRCPY;
 | 
				
			||||||
 | 
						resolve_symlink -> vim_FullName;
 | 
				
			||||||
 | 
						make_percent_swname -> FUNC_ATTR_NONNULL_ARG;
 | 
				
			||||||
 | 
						make_percent_swname -> fix_fname;
 | 
				
			||||||
 | 
						make_percent_swname -> xstrdup;
 | 
				
			||||||
 | 
						make_percent_swname -> MB_PTR_ADV;
 | 
				
			||||||
 | 
						make_percent_swname -> vim_ispathsep;
 | 
				
			||||||
 | 
						make_percent_swname -> concat_fnames;
 | 
				
			||||||
 | 
						make_percent_swname -> xfree;
 | 
				
			||||||
 | 
						make_percent_swname -> xfree;
 | 
				
			||||||
 | 
						do_swapexists -> set_vim_var_string;
 | 
				
			||||||
 | 
						do_swapexists -> set_vim_var_string;
 | 
				
			||||||
 | 
						do_swapexists -> apply_autocmds;
 | 
				
			||||||
 | 
						do_swapexists -> set_vim_var_string;
 | 
				
			||||||
 | 
						do_swapexists -> get_vim_var_str;
 | 
				
			||||||
 | 
						attention_message -> assert;
 | 
				
			||||||
 | 
						attention_message -> emsg;
 | 
				
			||||||
 | 
						attention_message -> msg_puts;
 | 
				
			||||||
 | 
						attention_message -> msg_home_replace;
 | 
				
			||||||
 | 
						attention_message -> msg_puts;
 | 
				
			||||||
 | 
						attention_message -> swapfile_info;
 | 
				
			||||||
 | 
						attention_message -> msg_puts;
 | 
				
			||||||
 | 
						attention_message -> msg_outtrans;
 | 
				
			||||||
 | 
						attention_message -> msg_puts;
 | 
				
			||||||
 | 
						attention_message -> os_fileinfo;
 | 
				
			||||||
 | 
						attention_message -> msg_puts;
 | 
				
			||||||
 | 
						attention_message -> msg_puts;
 | 
				
			||||||
 | 
						attention_message -> msg_puts;
 | 
				
			||||||
 | 
						attention_message -> msg_puts;
 | 
				
			||||||
 | 
						attention_message -> msg_puts;
 | 
				
			||||||
 | 
						attention_message -> msg_puts;
 | 
				
			||||||
 | 
						attention_message -> msg_puts;
 | 
				
			||||||
 | 
						attention_message -> msg_outtrans;
 | 
				
			||||||
 | 
						attention_message -> msg_puts;
 | 
				
			||||||
 | 
						attention_message -> msg_puts;
 | 
				
			||||||
 | 
						attention_message -> msg_outtrans;
 | 
				
			||||||
 | 
						attention_message -> msg_puts;
 | 
				
			||||||
 | 
						swapfile_info -> assert;
 | 
				
			||||||
 | 
						swapfile_info -> os_fileinfo;
 | 
				
			||||||
 | 
						swapfile_info -> os_get_uname;
 | 
				
			||||||
 | 
						swapfile_info -> msg_puts;
 | 
				
			||||||
 | 
						swapfile_info -> msg_outtrans;
 | 
				
			||||||
 | 
						swapfile_info -> msg_puts;
 | 
				
			||||||
 | 
						swapfile_info -> msg_puts;
 | 
				
			||||||
 | 
						swapfile_info -> msg_puts;
 | 
				
			||||||
 | 
						swapfile_info -> os_open;
 | 
				
			||||||
 | 
						swapfile_info -> read_eintr;
 | 
				
			||||||
 | 
						swapfile_info -> STRNCMP;
 | 
				
			||||||
 | 
						swapfile_info -> msg_puts;
 | 
				
			||||||
 | 
						swapfile_info -> ml_check_b0_id;
 | 
				
			||||||
 | 
						swapfile_info -> msg_puts;
 | 
				
			||||||
 | 
						swapfile_info -> ml_check_b0_strings;
 | 
				
			||||||
 | 
						swapfile_info -> msg_puts;
 | 
				
			||||||
 | 
						swapfile_info -> msg_puts;
 | 
				
			||||||
 | 
						swapfile_info -> msg_puts;
 | 
				
			||||||
 | 
						swapfile_info -> msg_outtrans;
 | 
				
			||||||
 | 
						swapfile_info -> msg_puts;
 | 
				
			||||||
 | 
						swapfile_info -> msg_puts;
 | 
				
			||||||
 | 
						swapfile_info -> msg_puts;
 | 
				
			||||||
 | 
						swapfile_info -> msg_outtrans;
 | 
				
			||||||
 | 
						swapfile_info -> msg_puts;
 | 
				
			||||||
 | 
						swapfile_info -> msg_puts;
 | 
				
			||||||
 | 
						swapfile_info -> msg_outtrans;
 | 
				
			||||||
 | 
						swapfile_info -> char_to_long;
 | 
				
			||||||
 | 
						swapfile_info -> msg_puts;
 | 
				
			||||||
 | 
						swapfile_info -> msg_outnum;
 | 
				
			||||||
 | 
						swapfile_info -> os_proc_running;
 | 
				
			||||||
 | 
						swapfile_info -> msg_puts;
 | 
				
			||||||
 | 
						swapfile_info -> b0_magic_wrong;
 | 
				
			||||||
 | 
						swapfile_info -> msg_puts;
 | 
				
			||||||
 | 
						swapfile_info -> msg_puts;
 | 
				
			||||||
 | 
						swapfile_info -> close;
 | 
				
			||||||
 | 
						swapfile_info -> msg_puts;
 | 
				
			||||||
 | 
						swapfile_info -> msg_putchar;
 | 
				
			||||||
 | 
						ml_check_b0_strings -> memchr;
 | 
				
			||||||
 | 
						ml_check_b0_strings -> memchr;
 | 
				
			||||||
 | 
						ml_check_b0_strings -> memchr;
 | 
				
			||||||
 | 
						ml_check_b0_strings -> memchr;
 | 
				
			||||||
 | 
						ml_new_ptr -> mf_new;
 | 
				
			||||||
 | 
						ml_new_ptr -> sizeof;
 | 
				
			||||||
 | 
						ml_new_data -> assert;
 | 
				
			||||||
 | 
						ml_new_data -> mf_new;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										47
									
								
								test.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								test.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,47 @@
 | 
				
			|||||||
 | 
					#include <stdio.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int aurevoir(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						return 42;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void bonjour(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						puts("Bonjour !");
 | 
				
			||||||
 | 
						aurevoir();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void bye(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						puts("Byte...");
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void hello(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						puts("Hello, world!");
 | 
				
			||||||
 | 
						bye();
 | 
				
			||||||
 | 
						bonjour();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void foo(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						hello();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int add(int a, int b)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						aurevoir();
 | 
				
			||||||
 | 
						return a + b;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int main(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						int res;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						foo();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						res = add(21, 21);
 | 
				
			||||||
 | 
						printf("%i\n", res);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										52
									
								
								vec.c
									
									
									
									
									
								
							
							
						
						
									
										52
									
								
								vec.c
									
									
									
									
									
								
							@ -46,11 +46,11 @@ graph_vec new_graph(int cap)
 | 
				
			|||||||
	return g;
 | 
						return g;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void insert_node(graph_vec *g, int i, fix_str str, bool intern)
 | 
					void insert_node(graph_vec *g, fix_str str)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	++g->n;
 | 
						++g->n;
 | 
				
			||||||
	struct node *n = malloc(sizeof(struct node));
 | 
						struct node *n = malloc(sizeof(struct node));
 | 
				
			||||||
	n->num = i;
 | 
						n->num = g->n;
 | 
				
			||||||
	n->nbs = 0;
 | 
						n->nbs = 0;
 | 
				
			||||||
	n->cap = 5;
 | 
						n->cap = 5;
 | 
				
			||||||
	n->succ = malloc(5 * sizeof(nodept));
 | 
						n->succ = malloc(5 * sizeof(nodept));
 | 
				
			||||||
@ -87,11 +87,53 @@ void print_node(nodept node)
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
	int i;
 | 
						int i;
 | 
				
			||||||
	printf("NODE: %s\n", node->func);
 | 
						printf("NODE: %s\n", node->func);
 | 
				
			||||||
	for (int i = 0; i < node->nbs; ++i) {
 | 
						for (i = 0; i < node->nbs; ++i) {
 | 
				
			||||||
		printf("SUCC: %s\n", node->succ[i]->func);
 | 
							printf("SUCC: %s\n", node->succ[i]->func);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	for (int i = 0; i < node->nbs; ++i) {
 | 
						for (i = 0; i < node->nbs; ++i) {
 | 
				
			||||||
		if (node->succ[i]->intern)
 | 
							if (node->succ[i] != node && node->succ[i]->nbs != 0)
 | 
				
			||||||
			print_node(node->succ[i]);
 | 
								print_node(node->succ[i]);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// fprintf(fp, "\t%s -> %s;\n", node->func, node->succ[i]->func);
 | 
				
			||||||
 | 
					void write_node_dot(FILE *fp, nodept node)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						int i;
 | 
				
			||||||
 | 
						for (i = 0; i < node->nbs; ++i) {
 | 
				
			||||||
 | 
							fprintf(fp, "\t%s -> %s;\n",  node->func, node->succ[i]->func);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						for (i = 0; i < node->nbs; ++i) {
 | 
				
			||||||
 | 
							if (node->succ[i] != node && node->succ[i]->nbs != 0)
 | 
				
			||||||
 | 
								write_node_dot(fp, node->succ[i]);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void dot_graph(nodept node)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						FILE *fp;
 | 
				
			||||||
 | 
						int i;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						fp = fopen("graph.dot", "w");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						fprintf(fp, "digraph main {\n");
 | 
				
			||||||
 | 
						write_node_dot(fp, node);
 | 
				
			||||||
 | 
						// for (i = 0; i < node->nbs; ++i) {
 | 
				
			||||||
 | 
						// 	fprintf(fp, "\t%s -> %s;\n", node->func, node->succ[i]->func);
 | 
				
			||||||
 | 
						// }
 | 
				
			||||||
 | 
						// for (i = 0; i < node->nbs; ++i) {
 | 
				
			||||||
 | 
						// 	if (node->succ[i] != node && node->succ[i]->nbs != 0) {
 | 
				
			||||||
 | 
						// 		write_node_dot(fp, node->succ[i]);
 | 
				
			||||||
 | 
						// 		fprintf(fp, "\n\t%s ", node->succ[i]->func);
 | 
				
			||||||
 | 
						//
 | 
				
			||||||
 | 
						// 		for (int j = 0; j < node->succ[i]->nbs; ++j) {
 | 
				
			||||||
 | 
						// 			fprintf(fp, "-> %s ", node->succ[i]->succ[j]->func);
 | 
				
			||||||
 | 
						// 		}
 | 
				
			||||||
 | 
						//
 | 
				
			||||||
 | 
						// 		fprintf(fp, ";\n");
 | 
				
			||||||
 | 
						// 	}
 | 
				
			||||||
 | 
						// }
 | 
				
			||||||
 | 
						fprintf(fp, "}");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						fclose(fp);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										4
									
								
								vec.h
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								vec.h
									
									
									
									
									
								
							@ -11,7 +11,6 @@ struct nodes {
 | 
				
			|||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct node {
 | 
					struct node {
 | 
				
			||||||
	bool intern;
 | 
					 | 
				
			||||||
	int num;	  // le numero de noeud
 | 
						int num;	  // le numero de noeud
 | 
				
			||||||
	int nbs;	  // nombre de successeurs
 | 
						int nbs;	  // nombre de successeurs
 | 
				
			||||||
	fix_str func; // noms de fonctions
 | 
						fix_str func; // noms de fonctions
 | 
				
			||||||
@ -23,7 +22,8 @@ struct node *new_node(int num);
 | 
				
			|||||||
void delete_node(struct node *n);
 | 
					void delete_node(struct node *n);
 | 
				
			||||||
void insert_succ(graph_vec *g, int i, int i1, fix_str str);
 | 
					void insert_succ(graph_vec *g, int i, int i1, fix_str str);
 | 
				
			||||||
graph_vec new_graph(int cap);
 | 
					graph_vec new_graph(int cap);
 | 
				
			||||||
void insert_node(graph_vec *g, int i, fix_str str, bool intern);
 | 
					void insert_node(graph_vec *g, fix_str str);
 | 
				
			||||||
void delete_graph(graph_vec *g);
 | 
					void delete_graph(graph_vec *g);
 | 
				
			||||||
int is_in(graph_vec g, fix_str func);
 | 
					int is_in(graph_vec g, fix_str func);
 | 
				
			||||||
void print_node(nodept node);
 | 
					void print_node(nodept node);
 | 
				
			||||||
 | 
					void dot_graph(nodept node);
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user