parsing flags finish

This commit is contained in:
Xamora 2024-12-17 09:18:58 +01:00
parent 3c973bd307
commit 411659db94
14 changed files with 103 additions and 229 deletions

View file

@ -2,7 +2,7 @@ CC := gcc
LD := $(CC)
LDFLAGS :=
CFLAGS := $(shell cat compile_flags.txt | sed -z "s/\n/ /g")
SRC := $(wildcard src/*.c lib/**/*.c)
SRC := $(wildcard lib/**/*.c src/*.c)
OBJ_DIR := build
OBJ := $(addprefix $(OBJ_DIR)/, $(patsubst %.c,%.o,$(SRC)))
DIR := .

View file

@ -1,6 +1,6 @@
-includeinc/main.h
-includelib/libft/libft.h
-includelib/ft_printf/ft_printf.h
-includeinc/main.h
-Wall
-Wextra
-std=c23

View file

@ -3,13 +3,13 @@
#include <inttypes.h>
typedef struct {
i64 l;
i64 a;
i64 R;
i64 r;
i64 t;
bool l;
bool a;
bool R;
bool r;
bool t;
int error[2];
} flags_t;
flags_t *get_flags(char **argv);
flags_t get_flags(char **argv);
void display_flags(flags_t flags);

View file

@ -18,50 +18,59 @@ static u32 ft_is_format(const char c)
|| c == 'u' || c == 'x' || c == 'X' || c == '%' || c == 'b');
}
static u32 ft_post_character(u32 fd, char format, va_list *args)
static u32 ft_post_character(u32 fd, char format, va_list args)
{
if (format == 'c')
return ft_putchar_fd(va_arg(*args, int), fd);
return ft_putchar_fd(va_arg(args, int), fd);
else if (format == 's')
return ft_putstr_fd(va_arg(*args, char *), fd);
return ft_putstr_fd(va_arg(args, char *), fd);
else if (format == 'd' || format == 'i' || format == 'u')
return ft_putnbr_fd(va_arg(*args, i64), fd);
return ft_putnbr_fd(va_arg(args, i64), fd);
else if (format == 'x')
return ft_putnbrhex_fd(va_arg(*args, u32), fd);
return ft_putnbrhex_fd(va_arg(args, u32), fd);
else if (format == 'X')
return ft_putnbrhex_upper_fd(va_arg(*args, u32), fd);
return ft_putnbrhex_upper_fd(va_arg(args, u32), fd);
else if (format == '%')
return ft_putchar_fd('%', fd);
else if (format == 'p')
return ft_putvd_fd(va_arg(*args, void *), fd);
return ft_putvd_fd(va_arg(args, void *), fd);
else if (format == 'b')
return ft_putstr_fd(va_arg(*args, i32) ? "true" : "false", fd);
return ft_putstr_fd(va_arg(args, i32) ? "true" : "false", fd);
return 0;
}
u32 ft_printf_fd(u32 fd, const char *str, ...)
{
va_list args;
u32 ft_vdprintf(u32 fd, const char *str, va_list args) {
u32 count = 0;
if (str == NULL)
return (-1);
va_start(args, str);
for (u32 i = 0; str[i]; i++) {
if (str[i] == '%' && ft_is_format(str[i + 1]))
count += ft_post_character(fd, str[(i++) + 1], &args);
count += ft_post_character(fd, str[(i++) + 1], args);
else {
ft_putchar_fd(str[i], fd);
count++;
}
}
va_end(args);
return (count);
}
u32 ft_printf_fd(u32 fd, const char *str, ...)
{
va_list args;
va_start(args, str);
u32 count = ft_vdprintf(fd, str, args);
va_end(args);
return count;
}
u32 ft_printf(const char *str, ...)
{
va_list args;
return ft_printf_fd(0, str, args);
va_start(args, str);
u32 count = ft_vdprintf(0, str, args);
va_end(args);
return count;
}

View file

@ -16,8 +16,9 @@
# include <unistd.h>
# include <stdarg.h>
uint32_t ft_printf(const char *str, ...);
uint32_t ft_printf_fd(uint32_t fd, const char *str, ...);
uint32_t ft_putnbrhex_fd(uint32_t v, uint32_t fd);
uint32_t ft_putnbrhex_upper_fd(uint32_t v, uint32_t fd);
uint32_t ft_putvd_fd(void *v, uint32_t fd);
u32 ft_printf(const char *str, ...);
u32 ft_printf_fd(u32 fd, const char *str, ...);
u32 ft_vdprintf(u32 fd, const char *str, va_list args);
u32 ft_putnbrhex_fd(u32 v, u32 fd);
u32 ft_putnbrhex_upper_fd(u32 v, u32 fd);
u32 ft_putvd_fd(void *v, u32 fd);

View file

@ -12,10 +12,10 @@
#include "ft_printf.h"
uint32_t ft_putnbrhex_fd(uint32_t v, uint32_t fd)
u32 ft_putnbrhex_fd(u32 v, u32 fd)
{
uint32_t tmp = 0;
uint32_t count = 0;
i32 tmp = 0;
i32 count = 0;
char hex[100];
if (v == 0)

View file

@ -12,10 +12,10 @@
#include "ft_printf.h"
int ft_putnbrhex_upper_fd(unsigned int v, int fd)
u32 ft_putnbrhex_upper_fd(u32 v, u32 fd)
{
int tmp = 0;
int count = 0;
u32 tmp = 0;
u32 count = 0;
char hex[100];
if (v == 0)

View file

@ -12,9 +12,9 @@
#include "ft_printf.h"
int ft_putvd_fd(void *v, int fd)
u32 ft_putvd_fd(void *v, u32 fd)
{
int count;
u32 count;
unsigned long u;
if (v == NULL)

View file

@ -1,154 +0,0 @@
# **************************************************************************** #
# #
# ::: :::::::: #
# Makefile :+: :+: :+: #
# +:+ +:+ +:+ #
# By: erey-bet <marvin@42.fr> +#+ +:+ +#+ #
# +#+#+#+#+#+ +#+ #
# Created: 2022/09/27 04:19:30 by erey-bet #+# #+# #
# Updated: 2022/10/19 17:45:46 by erey-bet ### ########.fr #
# #
# **************************************************************************** #
SRCS = ft_isalpha.c ft_isdigit.c ft_isalnum.c ft_isascii.c ft_isprint.c \
ft_strlen.c ft_memset.c ft_bzero.c ft_memcpy.c ft_memmove.c ft_strlcpy.c \
ft_strlcat.c ft_toupper.c ft_tolower.c ft_strchr.c ft_strrchr.c ft_strncmp.c \
ft_memchr.c ft_memcmp.c ft_strnstr.c ft_atoi.c ft_calloc.c ft_strdup.c \
ft_substr.c ft_strjoin.c ft_strtrim.c ft_split.c ft_itoa.c ft_strmapi.c \
ft_striteri.c ft_putchar_fd.c ft_putstr_fd.c ft_putendl_fd.c ft_putnbr_fd.c \
ft_get_size.c ft_power.c ft_atoi_check.c
OBJS = ${SRCS:.c=.o}
BONUS_SRCS = ft_lstnew.c ft_lstadd_front.c ft_lstsize.c ft_lstlast.c \
ft_lstadd_back.c ft_lstdelone.c ft_lstclear.c ft_lstiter.c ft_lstmap.c
BONUS_OBJS = ${BONUS_SRCS:.c=.o}
CC = gcc
CFLAGS = -Wall -Wextra -Werror
NAME = libft.a
ifdef BONUS
SRCS += ${BONUS_SRCS}
endif
all: ${NAME}
${NAME}: ${OBJS}
ar -rc ${NAME} ${OBJS}
%.o:%.c
${CC} ${CFLAGS} -c -o $@ $<
clean:
rm -f ${OBJS} ${BONUS_OBJS}
fclean: clean
rm -f ${NAME}
re: fclean all
bonus:
@make BONUS=1
coffee:
@clear
@echo ""
@echo " ("
@echo " ) (◦"
@echo " ___...(-------)-....___◦"
@echo ' .-"" ) ( ""-.'
@echo " .-''''|-._ ) _.-|"
@echo ' / .--.| `""---...........---""` |'
@echo " / / | |"
@echo " | | | |"
@echo " \ \ | |"
@echo " '\ '\ | |"
@echo " '\ '| |"
@echo " _/ /\ /"
@echo " (__/ \ /"
@echo ' _..---""` \ /`""---.._'
@echo " .-' \ / '-."
@echo ": '-.__ __.-' :"
@echo ': ) ""---...---"" ( :'
@echo '\._ "--...___...--" _."'
@echo ' \""--..__ __..--""/'
@echo ' "._ """----.....______.....----""" _."'
@echo ' ""--..,,_____ _____,,..--"""'
@echo ' """------"""'
@sleep 0.2
@clear
@echo ""
@echo " (◦"
@echo " ◦ ◦ ) ( "
@echo " ___..(.------)--....___"
@echo ' .-"" ) ( ""-.'
@echo " .-''''|-._ ( ) _.-|"
@echo ' / .--.| `""---...........---""` |'
@echo " / / | |"
@echo " | | | |"
@echo " \ \ | |"
@echo " '\ '\ | |"
@echo " '\ '| |"
@echo " _/ /\ /"
@echo " (__/ \ /"
@echo ' _..---""` \ /`""---.._'
@echo " .-' \ / '-."
@echo ": '-.__ __.-' :"
@echo ': ) ""---...---"" ( :'
@echo '\._ "--...___...--" _."'
@echo ' \""--..__ __..--""/'
@echo ' "._ """----.....______.....----""" _."'
@echo ' ""--..,,_____ _____,,..--"""'
@echo ' """------"""'
@sleep 0.2
@clear
@echo " ◦"
@echo " ( ◦"
@echo " ◦ ) ( "
@echo " ___..(.------)--....___"
@echo ' .-"" ) ( ""-.'
@echo " .-''''|-._ ( ) _.-|"
@echo ' / .--.| `""---...........---""` |'
@echo " / / | |"
@echo " | | | |"
@echo " \ \ | |"
@echo " '\ '\ | |"
@echo " '\ '| |"
@echo " _/ /\ /"
@echo " (__/ \ /"
@echo ' _..---""` \ /`""---.._'
@echo " .-' \ / '-."
@echo ": '-.__ __.-' :"
@echo ': ) ""---...---"" ( :'
@echo '\._ "--...___...--" _."'
@echo ' \""--..__ __..--""/'
@echo ' "._ """----.....______.....----""" _."'
@echo ' ""--..,,_____ _____,,..--"""'
@echo ' """------"""'
@sleep 0.2
@clear
@echo ""
@echo " ( ) ◦"
@echo " ◦ ) (◦"
@echo " ___)...----)----....___"
@echo ' .-"" ) ( ""-.'
@echo " .-''''|-._ ( ) _.-|"
@echo ' / .--.| `""---...........---""` |'
@echo " / / | |"
@echo " | | | |"
@echo " \ \ | |"
@echo " '\ '\ | |"
@echo " '\ '| |"
@echo " _/ /\ /"
@echo " (__/ \ /"
@echo ' _..---""` \ /`""---.._'
@echo " .-' \ / '-."
@echo ": '-.__ __.-' :"
@echo ': ) ""---...---"" ( :'
@echo '\._ "--...___...--" _."'
@echo ' \""--..__ __..--""/'
@echo ' "._ """----.....______.....----""" _."'
@echo ' ""--..,,_____ _____,,..--"""'
@echo ' """------"""'
@sleep 0.
${MAKE} coffee
.PHONY: all clean fclean re bonus coffee

5
lib/libft/ft_strslen.c Normal file
View file

@ -0,0 +1,5 @@
u32 ft_strslen(char **strs) {
u32 count = 0;
for(; strs[count] ;count++);
return count;
}

View file

@ -83,4 +83,5 @@ void ft_lstdelone(t_list *lst, void (*del)(void*));
void ft_lstclear(t_list **lst, void (*del)(void*));
void ft_lstiter(t_list *lst, void (*f)(void *));
t_list *ft_lstmap(t_list *lst, void *(*f)(void *), void (*del)(void *));
int ft_atoi_check(const char *nptr);
int ft_atoi_check(const char *nptr);
u32 ft_strslen(char **strs);

View file

@ -1,34 +0,0 @@
flags_t *get_flags(char **argv) {
flags_t *flags = ft_calloc(1, sizeof(flags_t));
if (flags == nullptr)
return nullptr;
flags->t = 0;
flags->error[0] = -1;
for (int i = 1; argv[i] != NULL; i++)
if (argv[i][0] == '-')
for (int j = 1; argv[i][j] != '\0'; j++) {
if (argv[i][j] == 'l')
flags->l = 1;
else if (argv[i][j] == 'a')
flags->a = 1;
else if (argv[i][j] == 'R')
flags->R = 1;
else if (argv[i][j] == 'r')
flags->r = 1;
else if (argv[i][j] == 't')
flags->t = 1;
else {
flags->error[0] = i;
flags->error[1] = j;
return flags;
}
}
return flags;
}
void display_flags(flags_t flags) {
ft_printf("l: %d; a: %d; R: %d; r: %d; t: %d\n",
flags.l, flags.a, flags.R, flags.r, flags.t);
}

View file

@ -3,13 +3,15 @@ int main(int argc, char **argv) {
if (argc < 2)
return 1;
flags_t *flags = get_flags(argv);
if (flags->error[0] != -1) {
flags_t flags = get_flags(argv);
if (flags.error[0] != -1) {
ft_printf_fd(2, "ls: invalid line width: \'%s\'",
argv[flags->error[0]][flags->error[1]]);
&argv[flags.error[0]][flags.error[1]]);
return 2;
}
display_flags(*flags);
display_flags(flags);
//ft_ls(flags);
return 0;
}

44
src/parsing.c Normal file
View file

@ -0,0 +1,44 @@
flags_t get_flags(char **argv) {
flags_t flags = {false, false, false, false, false,
{-1, -1}};
for (int i = 1; argv[i] != NULL; i++) {
if (argv[i][0] == '-') {
for (int j = 1; argv[i][j] != '\0'; j++) {
if (argv[i][j] == 'l')
flags.l = true;
else if (argv[i][j] == 'a')
flags.a = true;
else if (argv[i][j] == 'R')
flags.R = true;
else if (argv[i][j] == 'r')
flags.r = true;
else if (argv[i][j] == 't')
flags.t = true;
else {
flags.error[0] = i;
flags.error[1] = j;
return flags;
}
}
}
}
return flags;
}
void display_flags(flags_t flags) {
ft_printf("l: %b; a: %b; R: %b; r: %b; t: %b\n",
flags.l, flags.a, flags.R, flags.r, flags.t);
}
char **get_files(char **argv) {
char **files = ft_calloc(ft_strslen(argv), sizeof(char*));
for (int i = 1; argv[i] != NULL; i++) {
if (argv[i][0] == '-') {
}
}
}