106 lines
2.6 KiB
C
106 lines
2.6 KiB
C
static void display_recursive(dir_t *dir);
|
|
|
|
void space_between_files(t_list **files, dir_t *file) {
|
|
|
|
if (win.ws_col == 0) {
|
|
ft_printf("\n");
|
|
return;
|
|
}
|
|
|
|
u32 max = 0, i = 0, index_file = 0, count = 0;
|
|
for (t_list *cur = *files; cur != NULL; cur = cur->next) {
|
|
dir_t *cur_file = (dir_t*)(cur)->content;
|
|
u32 len = ft_strlen(cur_file->name);
|
|
count += len;
|
|
max = MAX(len, max);
|
|
if (ft_strcmp(cur_file->name, file->name) == 0)
|
|
index_file = i;
|
|
i++;
|
|
}
|
|
max += 1;
|
|
u32 col = MAX(win.ws_col / max, 1);
|
|
u32 line = index_file % col;
|
|
if (count <= win.ws_col)
|
|
ft_printf(" ");
|
|
else if (col >= i && index_file != i - 1)
|
|
ft_printf(" ");
|
|
else if (col >= i && index_file == i - 1)
|
|
ft_printf("\n");
|
|
else if (line == col - 1 || index_file == i - 1)
|
|
ft_printf("\n");
|
|
else
|
|
for (i = 0; i < max - ft_strlen(file->name); i++)
|
|
ft_printf(" ");
|
|
}
|
|
|
|
void
|
|
display_name(dir_t *dir) {
|
|
ft_printf("%s", dir->name);
|
|
}
|
|
|
|
void
|
|
display_directory(dir_t *dir) {
|
|
if (flags.R) {
|
|
if (!dir->is_file)
|
|
display_recursive(dir);
|
|
}
|
|
else {
|
|
t_list **files = get_all_in(dir);
|
|
if (!files)
|
|
return;
|
|
display_files(files);
|
|
free_files(files);
|
|
}
|
|
}
|
|
|
|
i32
|
|
display_files(t_list **files) {
|
|
i32 drawed = 0;
|
|
if (flags.l)
|
|
return display_files_stat(files);
|
|
else {
|
|
for (t_list *cur = *files; cur != NULL; cur = cur->next) {
|
|
dir_t *dir = (dir_t*)(cur)->content;
|
|
display_name(dir);
|
|
drawed++;
|
|
if (cur->next != NULL)
|
|
space_between_files(files, dir);
|
|
}
|
|
if (drawed > 0)
|
|
ft_printf("\n");
|
|
}
|
|
return drawed;
|
|
}
|
|
|
|
static void
|
|
to_print_return_of_line() {
|
|
static int need_to_return_of_line = 0;
|
|
if (!need_to_return_of_line)
|
|
need_to_return_of_line = 1;
|
|
else {
|
|
ft_printf("\n");
|
|
}
|
|
}
|
|
|
|
static void
|
|
display_recursive(dir_t *dir) {
|
|
if (dir->is_file)
|
|
return;
|
|
|
|
to_print_return_of_line();
|
|
ft_printf("%s:\n", dir->path);
|
|
t_list **files = get_all_in(dir);
|
|
if (!files)
|
|
return;
|
|
display_files(files);
|
|
for (t_list *cur = *files; cur != NULL; cur = cur->next) {
|
|
dir_t *cur_dir = (dir_t*)cur->content;
|
|
if (!cur_dir->is_file
|
|
&& ft_strcmp(".", cur_dir->path + ft_strlen(cur_dir->path) - 1) != 0
|
|
&& ft_strcmp("..", cur_dir->path + ft_strlen(cur_dir->path) - 2) != 0)
|
|
display_recursive(cur_dir);
|
|
}
|
|
free_files(files);
|
|
}
|
|
|