diff --git a/Makefile b/Makefile index 4d40023..cce1e77 100644 --- a/Makefile +++ b/Makefile @@ -2,7 +2,7 @@ CC := gcc LD := $(CC) LDFLAGS := CFLAGS := $(shell cat compile_flags.txt | sed -z "s/\n/ /g") -SRC := $(wildcard src/*.c) +SRC := $(wildcard src/*.c lib/**/*.c) OBJ_DIR := build OBJ := $(addprefix $(OBJ_DIR)/, $(patsubst %.c,%.o,$(SRC))) DIR := . diff --git a/compile_flags.txt b/compile_flags.txt index 6cabb19..8b67f31 100644 --- a/compile_flags.txt +++ b/compile_flags.txt @@ -1,6 +1,9 @@ -includeinc/main.h +-includelib/libft/libft.h +-includelib/ft_printf/ft_printf.h -Wall -Wextra -std=c23 -iquoteinc +-iquotelib -g diff --git a/inc/main.h b/inc/main.h index f7bf511..a65b80d 100644 --- a/inc/main.h +++ b/inc/main.h @@ -1,11 +1,15 @@ #pragma once -typedef struct flags { - bool l; - bool a; - bool R; - bool r; - bool t; +#include + +typedef struct { + i64 l; + i64 a; + i64 R; + i64 r; + i64 t; + int error[2]; } flags_t; -flags_t get_flags(char **argv); +flags_t *get_flags(char **argv); +void display_flags(flags_t flags); diff --git a/lib/ft_printf b/lib/ft_printf new file mode 160000 index 0000000..b7b7d5a --- /dev/null +++ b/lib/ft_printf @@ -0,0 +1 @@ +Subproject commit b7b7d5aa04fea13f5da4e4ffb00beb4f5724e3cd diff --git a/lib/libft b/lib/libft new file mode 160000 index 0000000..a020fd7 --- /dev/null +++ b/lib/libft @@ -0,0 +1 @@ +Subproject commit a020fd795c3dc0a34a59d2906908202cde3d3ccf diff --git a/src/flags.c b/src/flags.c index 7454832..f589ac1 100644 --- a/src/flags.c +++ b/src/flags.c @@ -1,6 +1,34 @@ -flags_t get_flags(char **argv) { +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; - flags_t flags = {false, false, false, false, false}; + 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); +} diff --git a/src/main.c b/src/main.c index 4722db7..49802aa 100644 --- a/src/main.c +++ b/src/main.c @@ -3,6 +3,13 @@ int main(int argc, char **argv) { if (argc < 2) return 1; - get_flags(argv); + 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]]); + return 2; + } + display_flags(*flags); + return 0; }