-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathinput_validation.c
114 lines (102 loc) · 2.19 KB
/
input_validation.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#include "lem_in.h"
int valid_ants(t_lemin **lemin, int ants, char *line)
{
t_lemin *list;
list = *lemin;
while (list)
{
if (list->ants)
return (0);
else
list->ants = ants;
list = list->next;
}
write_ants(lemin, line);
return (1);
}
int valid_start_end(t_lemin **lemin, char *line, int fd, int *i)
{
t_room *room;
t_connect *connect;
room = (*lemin)->room;
while (room)
{
connect = room->connect;
while (connect)
{
if (connect->room)
return (0);
connect = connect->next;
}
room = room->next;
}
write_check_start_end(lemin, line, fd, i);
return (1);
}
int valid_connect(t_lemin **lemin, char *line, char **str, t_room *room)
{
t_connect *connect;
int flag;
room = (*lemin)->room;
while (room && ((flag = 0) == 0))
{
// flag = 0;
if (room->name && (!ft_strcmp(str[0], room->name) ||
!ft_strcmp(str[1], room->name)))
{
connect = room->connect;
if (!valid_room_name(lemin, !ft_strcmp(str[0], room->name) ?
str[1] : str[0]))
return (free_twodem_str(str) == NULL ? 0 : 0);
while (connect)
{
if (valid_connect_if(str, room, connect, &flag))
break;
connect = connect->next;
}
!flag ? write_connect(lemin, line, ft_strsplit(line, '-')) : 0;
return (free_twodem_str(str) == NULL ? 1 : 1);
}
room = room->next;
}
return (free_twodem_str(str) == NULL ? 0 : 0);
}
int valid_room_name(t_lemin **lemin, char *s)
{
t_room *room;
room = (*lemin)->room;
while (room->next)
{
if (!ft_strcmp(room->name, s))
return (1);
room = room->next;
}
return (0);
}
int valid_room(t_lemin **lemin, char *line, char **str)
{
t_room *room;
int start_end;
room = (*lemin)->room;
if (str[0][0] == 'L')
return 0;
start_end = check_start_end(lemin, line);
while (room)
{
if (!room->name)
{
!start_end ? write_room(lemin, line, 0, 0) : 0;
return (free_twodem_str(str) == NULL ? 1 : 1);
}
else
{
if (!ft_strcmp(room->name, line) ||
room->connect || !(*lemin)->ants)
return (free_twodem_str(str) == NULL ? 0 : 0);
if (!ft_strcmp(room->x, str[1]) && !ft_strcmp(room->y, str[2]))
return (free_twodem_str(str) == NULL ? 0 : 0);
}
room = room->next;
}
return (free_twodem_str(str) == NULL ? 1 : 1);
}