/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* main.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: jayang <[email protected]> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2022/02/20 15:19:31 by jayang #+# #+# */
/* Updated: 2022/02/21 20:55:42 by jayang ### ########.fr */
/* */
/* ************************************************************************** */
#include "ft_hexdump.h"
void print_hex_addr(void);
void print_hex_addr2(void);
void vacate_buffer(int option)
{
if (option == 0)
{
ft_print_hex(g_file, g_idx);
g_addr += (unsigned long long)g_idx;
print_hex_addr();
ft_putchar('\\n');
}
else
{
ft_print_hex_option(g_file, g_idx);
g_addr += (unsigned long long)g_idx;
print_hex_addr2();
ft_putchar('\\n');
}
}
void ft_read_file(int is_end, int fd, int option)
{
int byte;
g_flag = 1;
while (1)
{
byte = read(fd, g_file + g_idx, 1);
if (byte <= 0)
break ;
if (option == 0 && g_idx == 15)
ft_print_hex(g_file, 16);
else if (option == 1 && g_idx == 15)
ft_print_hex_option(g_file, 16);
g_idx = (g_idx + 1) % 16;
if (g_idx == 0)
g_addr += 16;
}
if (is_end && g_flag == 0)
vacate_buffer(option);
}
void ft_open_file(int is_end, char *argv, int option)
{
int fd;
fd = open(argv, O_RDONLY);
if (fd < 0)
{
ft_print_errno(argv, errno);
if (is_end && g_err == 0)
bad_type_err(argv);
else if (is_end && g_err)
vacate_buffer(option);
return ;
}
g_err = 1;
ft_read_file(is_end, fd, option);
close(fd);
}
void handle_option(int argc, char *argv[], int param)
{
if (argc == 2)
ft_read_file(1, 0, 1);
while (param < argc)
{
ft_open_file(param == argc - 1, argv[param], 1);
param++;
}
}
int main(int argc, char *argv[])
{
int param;
g_path = argv[0];
g_flag = 0;
g_err = 0;
g_idx = 0;
param = 1;
if (argc > 1 && argv[1][0] == '-' && argv[1][1] == 'C')
handle_option(argc, argv, param + 1);
else
{
if (argc == 1)
ft_read_file(1, 0, 0);
while (param < argc)
{
ft_open_file(param == argc - 1, argv[param], 0);
param++;
}
}
return (0);
}