void bind_fet_node(t_mosfet *mosfet, t_node *node, t_terminal terminal);
void free_node(void *node);
-int process_input(t_vec *nodes, t_vec *mosfets);
-int get_input(t_input *input);
+int process_input(t_vec *nodes, t_vec *mosfets, int fd);
+int get_input(t_input *input, int fd);
const char *state_color_escape(t_state state);
void draw_single(t_vec *mosfets, size_t i);
#include "FET_sim.h"
#include "libft.h"
#include <stdlib.h>
+#include <unistd.h>
+#include <fcntl.h>
-void build_graph(__attribute__((unused)) const char *filename, t_vec *nodes, t_vec *mosfets)
+void build_graph(const char *filename, t_vec *nodes, t_vec *mosfets)
{
- add_node(nodes, off);
- add_node(nodes, off);
- add_node(nodes, pull_up);
- add_mosfet(mosfets, p);
- bind_fet_node(ft_vec_access(mosfets, 0), ft_vec_access(nodes, 0), gate);
- bind_fet_node(ft_vec_access(mosfets, 0), ft_vec_access(nodes, 1), drain);
- bind_fet_node(ft_vec_access(mosfets, 0), ft_vec_access(nodes, 2), source);
+ int fd;
+
+ fd = open(filename, O_RDONLY);
+ if (fd >= 0)
+ {
+ while (process_input(nodes, mosfets, fd));
+ close(fd);
+ }
+ else
+ {
+ ft_printf("An error has occured reading file %s.\n", filename);
+ }
return ;
}
return (1);
}
-int get_input(t_input *input)
+int get_input(t_input *input, int fd)
{
int res;
char *str_inp;
char **split_inp;
- str_inp = get_next_line(0);
+ str_inp = get_next_line(fd);
if (!str_inp)
{
input->command = exitsim;
return (res);
}
-int process_input(t_vec *nodes, t_vec *mosfets)
+int process_input(t_vec *nodes, t_vec *mosfets, int fd)
{
int res;
static t_input input = {.command = help, .argc = 0};
ft_printf("FET_sim> ");
- if (!get_input(&input))
+ if (!get_input(&input, fd))
return (1);
res = 1;
if (input.command == next)
return (res);
}
-int main(__attribute__((unused)) int argc, char **argv)
+int main(int argc, char **argv)
{
t_vec nodes;
t_vec mosfets;
print_start();
ft_vec_init(&nodes, sizeof(t_node));
ft_vec_init(&mosfets, sizeof(t_mosfet));
- build_graph(argv[1], &nodes, &mosfets);
- while (process_input(&nodes, &mosfets))
- {
- continue ;
- }
+ if (argc > 1)
+ build_graph(argv[1], &nodes, &mosfets);
+ while (process_input(&nodes, &mosfets, STDIN_FILENO));
update_nodes(NULL);
ft_vec_free(&nodes, free_node);
ft_vec_free(&mosfets, NULL);