diff --git a/builds/draw.o b/builds/draw.o new file mode 100644 index 0000000..6c454ff Binary files /dev/null and b/builds/draw.o differ diff --git a/builds/fdf.o b/builds/fdf.o new file mode 100644 index 0000000..b40fb07 Binary files /dev/null and b/builds/fdf.o differ diff --git a/builds/modifs.o b/builds/modifs.o new file mode 100644 index 0000000..579d33d Binary files /dev/null and b/builds/modifs.o differ diff --git a/builds/parse.o b/builds/parse.o new file mode 100644 index 0000000..02517c0 Binary files /dev/null and b/builds/parse.o differ diff --git a/fdf b/fdf new file mode 100755 index 0000000..ef15727 Binary files /dev/null and b/fdf differ diff --git a/includes/fdf.h b/includes/fdf.h index 676cdbc..23815ce 100644 --- a/includes/fdf.h +++ b/includes/fdf.h @@ -6,6 +6,7 @@ # include // for sleep() # include // for M_PI # include // for printf() +# include // for open typedef struct s_fdf { diff --git a/libft b/libft deleted file mode 160000 index 26147ee..0000000 --- a/libft +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 26147eeeeb0719801c97933930f231e4bac72e1b diff --git a/libft b/libft new file mode 120000 index 0000000..5634df6 --- /dev/null +++ b/libft @@ -0,0 +1 @@ +../libft \ No newline at end of file diff --git a/libftt/Makefile b/libftt/Makefile new file mode 100644 index 0000000..147c2f3 --- /dev/null +++ b/libftt/Makefile @@ -0,0 +1,939 @@ +# - - - - - - - - - # +# variables names # +# - - - - - - - - - # + +NAME = libft.a +CC = gcc +VPATH = srcs/ \ + srcs/ft_printf_files/ + +IDIR = ./includes +_DEP = libft.h +DEPS = $(_DEP:%.h=$(IDIR)/%.h) + +CFLAGS = -I$(IDIR) +CFLAGS += -Wall -Wextra -Werror -g3 + +SRCS = ft_memset.c \ + ft_bzero.c \ + ft_memcpy.c \ + ft_memccpy.c \ + ft_memmove.c \ + ft_memchr.c \ + ft_memcmp.c \ + ft_strlen.c \ + ft_isalpha.c \ + ft_isdigit.c \ + ft_isalnum.c \ + ft_isascii.c \ + ft_isprint.c \ + ft_toupper.c \ + ft_tolower.c \ + ft_strchr.c \ + ft_strrchr.c \ + ft_strchrset.c \ + ft_strncmp.c \ + ft_strlcpy.c \ + ft_strlcat.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_utoa.c \ + ft_strmapi.c \ + ft_putchar_fd.c \ + ft_putstr_fd.c \ + ft_putendl_fd.c \ + ft_putnbr_fd.c \ + \ + 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 \ + \ + ft_strcat.c \ + ft_strcmp.c \ + ft_strcpy.c \ + ft_strncat.c \ + ft_strncpy.c \ + ft_strstr.c \ + ft_strjoinfree.c \ + ft_strclr.c \ + ft_strdel.c \ + ft_strequ.c \ + ft_striter.c \ + ft_striteri.c \ + ft_strmap.c \ + ft_strnequ.c \ + ft_strnew.c \ + ft_memalloc.c \ + ft_memdel.c \ + ft_putchar.c \ + ft_putendl.c \ + ft_putnbr.c \ + ft_putnbrendl.c \ + ft_putnbrendl_fd.c \ + ft_putnbrbase.c \ + ft_putstr.c \ + ft_any.c \ + ft_atoibase.c \ + ft_convertbase.c \ + ft_convertbase_free.c \ + ft_foreach.c \ + ft_issort.c \ + ft_arraymap.c \ + ft_strmultisplit.c \ + \ + ft_gnl.c \ + ft_concat_free.c \ + \ + ft_printf.c \ + ft_next_word.c \ + ft_convert.c \ + ft_flag_transform.c \ + ft_flag_transform_bonus.c \ + ft_abs.c \ + ft_greater.c \ + ft_smaller.c \ + ft_sign.c + + +ODIR = ./builds +OBJS = $(SRCS:%.c=$(ODIR)/%.o) + + +# - - - - - - - - - - - # +# rules to execute # +# - - - - - - - - - - - # + + +all: $(NAME) + +$(ODIR): + @printf "\033[35m" + mkdir -p $(ODIR) + @printf "\033[0m" + +$(NAME): $(ODIR) $(OBJS) $(DEPS) + @printf "\033[33m" + ar -rc $@ $(OBJS) + ranlib $@ + @printf "\033[0m" + +$(ODIR)/%.o: %.c + @printf "\033[36m" + $(CC) $(CFLAGS) -c -o $@ $< + +clean: + @printf "\033[31m" + /bin/rm -rf $(ODIR) + @printf "\033[0m" + +fclean: clean + @printf "\033[31m" + /bin/rm -f $(NAME) + @printf "\033[0m" + +re: fclean all + +.PHONY: clean fclean re all + + + + + + + + + + + +# ------------------------------------------------------ # +# explication complete etapes par etapes depuis le debut # +# ------------------------------------------------------ # + +## 1 - compiler avec gcc [25 gj] +# compiler un programme [29 gj] +# compiler en plusieurs fichiers [54 gj] +# les .o : compiler et linker [102 gj] + +## 2 - creer une librairie [135 gj] +# ar rc [139 gj] +# ar rc en plusieurs fois [164 gj] +# ranlib [185 gj] + +## 3 - fichiers .h [198 gj] +# a quoi sert un header [202 gj] +# ecrire un header [229 gj] +# comment ca se compile [273 gj] + +## 4 - ecrire un make file [305 gj] +# basic makefile [309 gj] +# makefile with subdirectories [462 gj] +# makefile making another makefile [583 gj] +# makefile for a library [690 gj] + +## ---------------------- +## 1 - compiler avec gcc +## ---------------------- + +# - - - - - - - - - - - - - - - - - - - - - - +# compiler un programme qui contient un main +# - - - - - - - - - - - - - - - - - - - - - - + +# quand on ecrit un programme il contient un main et les +# fonctions dont le main a besoin (ex ft_putchar) : +# +# # #include +# # +# # void ft_putchar(char c) +# # { +# # write(1, &c, 1); +# # } +# # +# # int main() +# # { +# # ft_putchar('0'); +# # return (0); +# # } +# +# on peut compiler ce fichier avec gcc en faisant : +# gcc file.c +# et ca sort un executable a.out +# si on l'execute "./a.out" ca ecrit 0 dans la console + +# - - - - - - - - - - - - - - - - - - - - - - - +# compiler un programme en plusieurs fichiers +# - - - - - - - - - - - - - - - - - - - - - - - + +# on va vite vouloir mettre chaque fonctions utilisee +# dans un fichier a part afin de mieux gerer les modules +# d'un programme. donc si on sort ft_putchar du fichier : +# +# # int main() +# # { +# # ft_putchar('0'); +# # return (0); +# # } +# +# et qu'on execute "gcc file.c" on va avoir une erreur +# car file.c utilise ft_putchar mais gcc ne sait pas ce +# que c'est, donc il faut faire deux choses : +# +# 1 - d'une part indiquer a main() que ft_putchar() +# existe, en ecrivant au dessus non pas toute la fonction +# (puisqu'on veut la mettre dans un fichier a part) mais +# uniquement son prototype : +# +# # void ft_putchar(char c); +# +# 2 - et d'autre part qu'on rajoute le fichier contenant +# la fonction ft_putchar a la compilation : +# +# [ft_putchar.c] +# # #include +# # +# # void ft_putchar(char c) +# # { +# # write(1, &c, 1); +# # } +# +# [main.c] +# # void ft_putchar(char c); +# # +# # int main() +# # { +# # ft_putchar('0'); +# # return (0); +# # } +# +# si on compile les deux ca marche : +# gcc main.c ft_putchar.c + +# - - - - - - - - - - - - - - - +# les .o : compiler et linker +# - - - - - - - - - - - - - - - + +# ca fonctionne mais gcc doit a chaque fois recompiler +# ft_putchar.c alors qu'il n'est pas modifie, donc on peut +# le compiler une bonne fois pour toute et l'ajouter a la +# compilation finale quand on en a besoin sans que l'ordi +# ait a tout retraduire dans son langage +# +# mais si on essaye de compiler ft_putchar seul +# +# # gcc ft_putchar.c +# +# ca nous donne une erreur car pour compiler, gcc a besoin +# de trouver un main ! +# +# on va donc utiliser l'option -c pour creer un fichier +# objet .o qui est deja traduit en langue d'ordinateur +# et pret a etre rajoute a la compilation : +# +# # gcc -c ft_putchar.c --> donne ft_putchar.o +# # gcc -c main.c --> donne main.o +# +# cette etape qui consiste a transformer les fichiers en +# objets .o s'appelle la compilation, il faut ensuite +# linker les objets, ce qui avec gcc se fait simplement : +# +# # gcc main.o ft_putchar.o +# +# on va maintenant voir comment faire une libraire qui +# contient tous nos fichiers objets + +## ------------------------ +## 2 - creer une librairie +## ------------------------ + +# - - - - +# ar rc +# - - - - + +# pour mettre tous les fichiers .o dans un seul fichier .a +# on utilise un programme d'archive ar avec les options rc +# - r indique d'inserer les .o en remplacant si necessaire +# - c de creer une nouvelle archive +# +# le nom de l'archive doit commencer par lib et +# finir par .a : +# +# # ar rc libtest.a ft_putchar.o +# +# on obtient un fichier libtest.a qui contient les +# fichiers objets .o +# +# on peut l'utiliser a la compilation de cette manniere : +# +# # gcc main.c -L. -ltest +# +# -L indique ou est la librairie (ici elle est dans le +# dossier courant .) +# -l indique son nom (TEST car on n'indique pas lib et .a) + +# - - - - - - - - - - - - - +# ar rc en plusieurs fois +# - - - - - - - - - - - - - + +# on n'est pas oblige de creer une librairie en une seule +# fois, ce qui est bien pratique nottament pour les +# makefiles, on verra ca apres. +# +# ca signifie que si notre librairie contient plusieurs +# fonctions, par exmple la librairie libfruits.a contient +# banane.o et orange.o, on peut creer la librairie +# avec banane.o puis y ajouter orange.o, sans auncune +# manipulation speciale : +# +# # ar rc libfruits.a banane.o +# # ar rc libfruits.a orange.o +# +# revient au meme qu'ecrire : +# +# # ar rc libfruits.a banane.o orange.o + +# - - - - +# ranlib +# - - - - + +# ranlib creer un index du contenu de la librairie et le +# place dedans, c'est utile des que la librairie est tres +# grande afin que gcc sache acceder rapidement aux +# fonctions dont il a besoin dedans +# +# # ranlib libtest.a +# +# ranlib s'utilise apres avoir creer la lib avec ar rc + +## ---------------- +## 3 - fichiers .h +## ---------------- + +# - - - - - - - - - - - - +# a quoi sert un header +# - - - - - - - - - - - - +# si on utilise une librairie c'est parce qu'on peut avoir +# souvent besoin des memes fonctions dans un programme +# mais si a chaque fois qu'on utilise une fonction de la +# librairie on doit ecrire son prototype, ca va poser deux +# problemes : +# +# le prototype d'une seule fonction peut etre ecrit a +# pleins d'endroits, donc si la fonction change un peu on +# doit retrouver tous les emplacements des prototypes et +# les modifier un par un +# +# et d'autre part, si on utilise pleins de fonctions dans +# l'ecriture d'un programme on va devoir reecrire a chaque +# fois son prototype et c'est tres relou +# +# afin d'eviter ca on ecrit tous les prototypes, ainsi que +# les includes, et les structures, les defines, et autres, +# dans un seul fichier pour tout un programme, ou dans le +# cas present pour toute la librairie, et on l'inclus +# systematiquement au debut d'un fichier contenant des +# fonctions de la librairie, gcc s'occupera de l'expandre +# a la precompilation +# + +# - - - - - - - - - +# ecrire un header +# - - - - - - - - - + +# [ft_putchar.c] +# # #include "libtest.h" +# # +# # void ft_putchar(char c) +# # { +# # write(1, &c, 1); +# # } +# +# [main.c] +# # #include "libtest.h" +# # +# # int main() +# # { +# # ft_putchar('0'); +# # return (0); +# # } +# +# [libetest.h] +# # # ifndef LIBTEST_H +# # # define LIBTEST_H +# # +# # #include +# # +# # void ft_putchar(char c); +# # +# # # endif +# +# en tete de chaque fichier de fonctions on ecrit +# l'include de la librairie, comme un include classique, +# precede d'un #, mais avec le nom de la librairie entre +# guillemets et non pas entre signes comparateurs +# +# dans le fichier de la librairie on ajoute les includes +# dont on peut avoir besoin pour que la librairie ou des +# fonctions auont besoin, et les prototypes des fonctions +# +# on entoure toutes ces infos par une definition, afin +# de proteger le .h d'etre expand plusieurs fois dans +# un fichier + +# - - - - - - - - - - - - +# comment ca se compile +# - - - - - - - - - - - - + +# au moment de la compilation il faut indiquer a gcc ou +# se trouve le fichier .h avec le flag -I +# +# par exemple pour l'architecture de dossier suivante : +# +# # file/ +# # main.c +# # ft_putchar.c +# # libtest.h +# +# il faut ecrire : +# +# # gcc main.c ft_putchar.c -I. +# +# et si la compilation utilise une librairie, par exemple +# si on met la fonction ft_putchar.c dans une librairie : +# +# # gcc -c ft_putchar.c +# # (donne ft_putchar.o) +# # ar rc libtest.a ft_putchar.o +# +# on peut alors compiler avec la librairie .a et le +# fichier .h : +# +# # gcc main.c -I. -L. -ltest -o test +# +# qui sort l'executable "test" + +## ---------------------------------------------------- +## 4 - ecrire un make file pour aider a la compilation +## ---------------------------------------------------- + +# - - - - - - - - - +# makefile basique +# - - - - - - - - - + +# exemple for a basic makefile : +# +# [architecture] +# # main.c +# # function01.c +# # function02.c +# # header.h +# # libtest.a +# # Makefile +# +# [Makefile] +# # #-------------# +# # # VARIABLES # +# # #-------------# +# # NAME = program_test +# # CC = gcc +# # CFLAGS = -I. +# # LFLAGS = -L. -ltest +# # DEPS = header.h +# # SRCS = main.c \ +# # function01.c \ +# # function02.c +# # ODIR = ./builds +# # OBJS = $(SRCS:%.c=%.o) +# # +# # #---------# +# # # RULES # +# # #---------# +# # all: $(ODIR) $(NAME) +# # $(NAME): $(OBJS) $(DEPS) +# # $(CC) $(CFLAGS) -o $@ $(OBJS) $(LFLAGS) +# # %.o: %.c +# # $(CC) $(CFLAGS) -c -o $@ $< +# # clean: +# # /bin/rm -rf $(ODIR) +# # fclean: clean +# # /bin/rm -f $(NAME) +# # re: fclean all +# # .PHONY: all clean fclean re +# +# # prompt "make" execute the first rule ("all") +# +# [architecture] +# # main.c +# # main.o +# # function01.c +# # function01.o ++ +# # function02.c +# # function02.o ++ +# # header.h +# # libtest.a +# # Makefile +# # program_test ++ +# +# ----- +# +# shape of a rule : +# +# target: prerequisites ... +# recipe ... +# +# when a target is called, its execution depends of the +# prerequisites, if they have been more recently modify +# than the target the makefile execute the recipe +# +# to execute a rull you have to call it's name with make : +# "make rule", and by default the first rule is execute +# +# ----- +# +# "automatic variables" +# +# $@ is the name of the target that called the rule +# $< is the name of the first prerequisite +# $^ is the name of all the prerequisites +# +# ----- +# +# $(SRCS:%.c=%.o) +# +# is a built-in function called a "substitute reference", +# an abbreviation for the expansion function "patsubst" : +# +# $(patsubst pattern,replacement,text) +# $(text:pattern=replacement) +# +# $() is a variable which expand in its value +# +# % match everything, the value of the first % in +# "replacement" is replaced with the text matched by the +# first % in "pattern", it only works for the firsts +# +# ----- +# +# all: $(ODIR) $(NAME) +# +# ALL depends on ODIR and NAME, so if ODIR doesn't exist +# it will be created, and then NAME is called +# +# ----- +# +# $(NAME): $(OBJS) $(DEPS) +# $(CC) $(CFLAGS) -o $@ $(OBJS) $(LFLAGS) +# +# NAME depends on OBJS and DEPS, so if any .o or any .h +# have more recent date of modification NAME will execute +# only for them +# +# ----- +# +# %.o: %.c +# $(CC) $(CFLAGS) -c -o $@ $< +# +# when $(OBJS) expand in the list of .o files at the call +# of the NAME rule, each of them call the rule "%.o" wich +# depends on the equivalent .c, so if one has been +# modified since last execution of ALL, it's recompiled in +# object file with use of automatic variables $@ and $< +# +# ----- +# +# #clean: +# /bin/rm -rf $(ODIR) +# +# "make clean" suppress all the .o files +# +# ----- +# +# fclean: clean +# /bin/rm -f $(NAME) +# +# "make fclean" call CLEAN and suppress the executable +# +# ----- +# +# re: fclean all +# +# "make fclean" basically rerun make +# +# ----- +# +# .PHONY: all clean fclean re +# +# a phony target is one that is not the name of a file +# if a file called "clean" for instance exist, the rule +# CLEAN will never be executed when prompt "make clean" +# because it will be considered up to date, but if it's +# declared to be phony it will be executed in any case + +# - - - - - - - - - - - - - - - +# makefile with subdirectories +# - - - - - - - - - - - - - - - + +# put the .o in a "builds/" directory +# +# have the .c in a "srcs/" directory +# +# have the .h in an "includes" directory +# +# have multiples .a files +# +# [architecture] +# # srcs/ +# # main.c +# # function01.c +# # function02.c +# # includes/ +# # header01.h +# # header02.h +# # libtest.a +# # liboption.a +# # Makefile +# +# # #-------------# +# # # VARIABLES # +# # #-------------# +# # NAME = program_test +# # CC = gcc +# # VPATH = srcs +# # +# # IDIR = includes +# # _DEPS = header01.h \ +# # header02.h +# # DEPS = $(_DEPS:%.h=$(IDIR)/%.h) +# # +# # LDIR = ./ +# # _LIBS = libtest.a \ +# # liboption.a +# # LIBS = $(_LIBS:lib%.a=%) +# # +# # SRCS = main.c \ +# # function01.c +# # function02.c +# # ODIR = ./builds +# # OBJS = $(SRCS:%.c=$(ODIR)/%.o) +# # +# # CFLAGS = -I$(IDIR) +# # LFLAGS = -L$(LDIR) -l$(LIBS) +# # +# # #---------# +# # # RULES # +# # #---------# +# # all: $(ODIR) $(NAME) +# # $(NAME): $(OBJS) $(DEPS) +# # $(CC) $(CFLAGS) -o $@ $(OBJS) $(LFLAGS) +# # $(ODIR): +# # mkdir -p $@ +# # $(ODIR)/%.o: %.c +# # $(CC) $(CFLAGS) -c -o $@ $< +# # clean: +# # /bin/rm -rf $(ODIR) +# # fclean: clean +# # /bin/rm -f $(NAME) +# # re: fclean all +# # .PHONY: all clean fclean re +# +# # prompt "make" execute the first rule ("all") +# +# [architecture] +# # srcs/ +# # main.c +# # function01.c +# # function02.c +# # includes/ +# # header01.h +# # header02.h +# # builds/ ++ +# # main.o ++ +# # function01.o ++ +# # function02.o ++ +# # libtest.a +# # liboption.a +# # Makefile +# # program_test ++ +# +# ----- +# +# VPATH = srcs +# +# build-in variable VPATH is a list of directories where +# makefile looks for files that it doesn't find in the +# first place, so it let you easily put .c files into +# subdirectories +# +# ----- +# +# LIBS = $(_LIBS:lib%.a=%) +# +# from "libtest.a" and "liboption.a" it creates "test" +# and "option" +# +# as said, the value of the % in "replacement" is +# replaced with the text matched by the % in "pattern" +# +# ----- +# +# OBJS = $(SRCS:%.c=$(ODIR)/%.o) +# +# creates the list of .o from the .c with addition of the +# path directory "builds/main.o" +# +# it could be : +# $(patsubst %.c,$(ODIR)/%.o,$(SRCS)) +# or : +# $(addprefix $(ODIR)/, $(SRCS:.c=.o)) +# +# ----- +# +# $(NAME): $(OBJS) $(DEPS) +# $(CC) $(CFLAGS) -o $@ $(OBJS) $(LFLAGS) +# +# NAME depends on OBJS and DEPS, so if any .o or any .h +# have more recent date of modification NAME will execute +# again only for them + +# - - - - - - - - - - - - - - - - - +# makefile making another makefile +# - - - - - - - - - - - - - - - - - + +# compiling a makefile with compiling another makefile in +# a subdirectory wich contain the library used by the +# roots makefile +# +# [architecture] +# # srcs/ +# # main.c +# # function01.c +# # function02.c +# # includes/ +# # header01.h +# # header02.h +# # libtest/ +# # Makefile +# # header_lib.h +# # function_lib01.c +# # function_lib02.c +# # libtest.a +# # Makefile +# +# # #-------------# +# # # VARIABLES # +# # #-------------# +# # NAME = program_test +# # CC = gcc +# # VPATH = srcs +# # +# # IDIR = includes +# # _DEPS = header01.h \ +# # header02.h +# # DEPS = $(_DEPS:%.h=$(IDIR)/%.h) +# # +# # LDIR = ./libtest/ +# # _LIBS = libtest.a \ +# # LIBS = $(_LIBS:lib%.a=%) +# # +# # SRCS = main.c \ +# # function01.c +# # function02.c +# # ODIR = ./builds +# # OBJS = $(SRCS:%.c=$(ODIR)/%.o) +# # +# # CFLAGS = -I$(IDIR) +# # LFLAGS = -L$(LDIR) -l$(LIBS) +# # +# # #---------# +# # # RULES # +# # #---------# +# # all: $(ODIR) $(NAME) +# # $(NAME): $(OBJS) $(DEPS) +# # make -C $(LDIR) +# # $(CC) $(CFLAGS) -o $@ $(OBJS) $(LFLAGS) +# # $(ODIR): +# # mkdir -p $@ +# # $(ODIR)/%.o: %.c +# # $(CC) $(CFLAGS) -c -o $@ $< +# # clean: +# # make clean -C $(LDIR) +# # /bin/rm -rf $(ODIR) +# # fclean: clean +# # make fclean -C $(LDIR) +# # /bin/rm -f $(NAME) +# # re: fclean all +# # .PHONY: all clean fclean re +# +# # prompt "make" execute the first rule ("all") +# +# [archtecture] +# # srcs/ +# # main.c +# # function01.c +# # function02.c +# # includes/ +# # header01.h +# # header02.h +# # builds/ ++ +# # main.o ++ +# # function01.o ++ +# # function02.o ++ +# # libtest/ +# # Makefile +# # header_lib.h +# # function_lib01.c +# # function_lib02.c +# # libtest.a +# # Makefile +# # program_test ++ +# +# ----- +# +# make -C $(LDIR) +# +# make -C +# +# the -C option says to makefile it should first go to the +# path location and then do "make" +# +# it's similar to : +# +# rule: +# cd $(LDIR) && make +# + +# - - - - - - - - - - - - +# makefile for a library +# - - - - - - - - - - - - + +# +# exemple of a makefile used not for a compilation into a +# binary executable, but to create a library +# +# [architecture] +# # srcs/ +# # function01.c +# # function02.c +# # includes/ +# # header.h +# # Makefile +# +# # #-------------# +# # # VARIABLES # +# # #-------------# +# # NAME = libtest.a +# # CC = gcc +# # VPATH = srcs +# # +# # IDIR = includes +# # _DEPS = header.h +# # DEPS = $(_DEPS:%.h=$(IDIR)/%.h) +# # +# # SRCS = function01.c \ +# # function02.c +# # ODIR = ./builds +# # OBJS = $(SRCS:%.c=$(ODIR)/%.o) +# # +# # CFLAGS = -I$(IDIR) +# # +# # #---------# +# # # RULES # +# # #---------# +# # all: $(ODIR) $(NAME) +# # $(NAME): $(OBJS) $(DEP) +# # ar -rc $@ $(OBJS) +# # @ranlib $@ +# # $(ODIR): +# # mkdir -p $@ +# # $(ODIR)/%.o: %.c +# # $(CC) $(CFLAGS) -c -o $@ $< +# # clean: +# # /bin/rm -rf $(ODIR) +# # fclean: clean +# # /bin/rm -f $(NAME) +# # re: fclean all +# # .PHONY: all clean fclean re +# +# # prompt "make" execute the first rule ("all") +# +# [archtecture] +# # srcs/ +# # function01.c +# # function02.c +# # includes/ +# # header.h +# # builds/ +# # function01.o +# # function02.o +# # libtest.a +# # Makefile +# +# ----- +# +# NAME = libtest.a +# +# name is now the name of the library to be built +# +# ----- +# +# @ranlib $@ +# +# @ tells makefile not to show the line in prompt +# + +# +# THE END +# enjoy, futur me +# diff --git a/libftt/builds/ft_abs.o b/libftt/builds/ft_abs.o new file mode 100644 index 0000000..e0c9d8b Binary files /dev/null and b/libftt/builds/ft_abs.o differ diff --git a/libftt/builds/ft_any.o b/libftt/builds/ft_any.o new file mode 100644 index 0000000..5887653 Binary files /dev/null and b/libftt/builds/ft_any.o differ diff --git a/libftt/builds/ft_arraymap.o b/libftt/builds/ft_arraymap.o new file mode 100644 index 0000000..af88cce Binary files /dev/null and b/libftt/builds/ft_arraymap.o differ diff --git a/libftt/builds/ft_atoi.o b/libftt/builds/ft_atoi.o new file mode 100644 index 0000000..121176d Binary files /dev/null and b/libftt/builds/ft_atoi.o differ diff --git a/libftt/builds/ft_atoibase.o b/libftt/builds/ft_atoibase.o new file mode 100644 index 0000000..33db8f6 Binary files /dev/null and b/libftt/builds/ft_atoibase.o differ diff --git a/libftt/builds/ft_bzero.o b/libftt/builds/ft_bzero.o new file mode 100644 index 0000000..97dff81 Binary files /dev/null and b/libftt/builds/ft_bzero.o differ diff --git a/libftt/builds/ft_calloc.o b/libftt/builds/ft_calloc.o new file mode 100644 index 0000000..2f12799 Binary files /dev/null and b/libftt/builds/ft_calloc.o differ diff --git a/libftt/builds/ft_concat_free.o b/libftt/builds/ft_concat_free.o new file mode 100644 index 0000000..ad1da95 Binary files /dev/null and b/libftt/builds/ft_concat_free.o differ diff --git a/libftt/builds/ft_convert.o b/libftt/builds/ft_convert.o new file mode 100644 index 0000000..c44dbaf Binary files /dev/null and b/libftt/builds/ft_convert.o differ diff --git a/libftt/builds/ft_convertbase.o b/libftt/builds/ft_convertbase.o new file mode 100644 index 0000000..5fd0f9c Binary files /dev/null and b/libftt/builds/ft_convertbase.o differ diff --git a/libftt/builds/ft_convertbase_free.o b/libftt/builds/ft_convertbase_free.o new file mode 100644 index 0000000..5665658 Binary files /dev/null and b/libftt/builds/ft_convertbase_free.o differ diff --git a/libftt/builds/ft_flag_transform.o b/libftt/builds/ft_flag_transform.o new file mode 100644 index 0000000..97c8681 Binary files /dev/null and b/libftt/builds/ft_flag_transform.o differ diff --git a/libftt/builds/ft_flag_transform_bonus.o b/libftt/builds/ft_flag_transform_bonus.o new file mode 100644 index 0000000..b58a534 Binary files /dev/null and b/libftt/builds/ft_flag_transform_bonus.o differ diff --git a/libftt/builds/ft_foreach.o b/libftt/builds/ft_foreach.o new file mode 100644 index 0000000..1b286b8 Binary files /dev/null and b/libftt/builds/ft_foreach.o differ diff --git a/libftt/builds/ft_gnl.o b/libftt/builds/ft_gnl.o new file mode 100644 index 0000000..1fa3507 Binary files /dev/null and b/libftt/builds/ft_gnl.o differ diff --git a/libftt/builds/ft_greater.o b/libftt/builds/ft_greater.o new file mode 100644 index 0000000..ae9e877 Binary files /dev/null and b/libftt/builds/ft_greater.o differ diff --git a/libftt/builds/ft_isalnum.o b/libftt/builds/ft_isalnum.o new file mode 100644 index 0000000..35144c8 Binary files /dev/null and b/libftt/builds/ft_isalnum.o differ diff --git a/libftt/builds/ft_isalpha.o b/libftt/builds/ft_isalpha.o new file mode 100644 index 0000000..a0f7933 Binary files /dev/null and b/libftt/builds/ft_isalpha.o differ diff --git a/libftt/builds/ft_isascii.o b/libftt/builds/ft_isascii.o new file mode 100644 index 0000000..5f52e76 Binary files /dev/null and b/libftt/builds/ft_isascii.o differ diff --git a/libftt/builds/ft_isdigit.o b/libftt/builds/ft_isdigit.o new file mode 100644 index 0000000..d7f7c18 Binary files /dev/null and b/libftt/builds/ft_isdigit.o differ diff --git a/libftt/builds/ft_isprint.o b/libftt/builds/ft_isprint.o new file mode 100644 index 0000000..0fe1573 Binary files /dev/null and b/libftt/builds/ft_isprint.o differ diff --git a/libftt/builds/ft_issort.o b/libftt/builds/ft_issort.o new file mode 100644 index 0000000..2449083 Binary files /dev/null and b/libftt/builds/ft_issort.o differ diff --git a/libftt/builds/ft_itoa.o b/libftt/builds/ft_itoa.o new file mode 100644 index 0000000..f0fa122 Binary files /dev/null and b/libftt/builds/ft_itoa.o differ diff --git a/libftt/builds/ft_lstadd_back.o b/libftt/builds/ft_lstadd_back.o new file mode 100644 index 0000000..7ec2bfe Binary files /dev/null and b/libftt/builds/ft_lstadd_back.o differ diff --git a/libftt/builds/ft_lstadd_front.o b/libftt/builds/ft_lstadd_front.o new file mode 100644 index 0000000..45731b5 Binary files /dev/null and b/libftt/builds/ft_lstadd_front.o differ diff --git a/libftt/builds/ft_lstclear.o b/libftt/builds/ft_lstclear.o new file mode 100644 index 0000000..845d0d7 Binary files /dev/null and b/libftt/builds/ft_lstclear.o differ diff --git a/libftt/builds/ft_lstdelone.o b/libftt/builds/ft_lstdelone.o new file mode 100644 index 0000000..a0d9980 Binary files /dev/null and b/libftt/builds/ft_lstdelone.o differ diff --git a/libftt/builds/ft_lstiter.o b/libftt/builds/ft_lstiter.o new file mode 100644 index 0000000..743cb87 Binary files /dev/null and b/libftt/builds/ft_lstiter.o differ diff --git a/libftt/builds/ft_lstlast.o b/libftt/builds/ft_lstlast.o new file mode 100644 index 0000000..6e07ac2 Binary files /dev/null and b/libftt/builds/ft_lstlast.o differ diff --git a/libftt/builds/ft_lstmap.o b/libftt/builds/ft_lstmap.o new file mode 100644 index 0000000..12ecc22 Binary files /dev/null and b/libftt/builds/ft_lstmap.o differ diff --git a/libftt/builds/ft_lstnew.o b/libftt/builds/ft_lstnew.o new file mode 100644 index 0000000..77fc170 Binary files /dev/null and b/libftt/builds/ft_lstnew.o differ diff --git a/libftt/builds/ft_lstsize.o b/libftt/builds/ft_lstsize.o new file mode 100644 index 0000000..01db5ea Binary files /dev/null and b/libftt/builds/ft_lstsize.o differ diff --git a/libftt/builds/ft_memalloc.o b/libftt/builds/ft_memalloc.o new file mode 100644 index 0000000..e2f2040 Binary files /dev/null and b/libftt/builds/ft_memalloc.o differ diff --git a/libftt/builds/ft_memccpy.o b/libftt/builds/ft_memccpy.o new file mode 100644 index 0000000..7932120 Binary files /dev/null and b/libftt/builds/ft_memccpy.o differ diff --git a/libftt/builds/ft_memchr.o b/libftt/builds/ft_memchr.o new file mode 100644 index 0000000..f7e74ed Binary files /dev/null and b/libftt/builds/ft_memchr.o differ diff --git a/libftt/builds/ft_memcmp.o b/libftt/builds/ft_memcmp.o new file mode 100644 index 0000000..6d1d794 Binary files /dev/null and b/libftt/builds/ft_memcmp.o differ diff --git a/libftt/builds/ft_memcpy.o b/libftt/builds/ft_memcpy.o new file mode 100644 index 0000000..5ad07d1 Binary files /dev/null and b/libftt/builds/ft_memcpy.o differ diff --git a/libftt/builds/ft_memdel.o b/libftt/builds/ft_memdel.o new file mode 100644 index 0000000..3cb605b Binary files /dev/null and b/libftt/builds/ft_memdel.o differ diff --git a/libftt/builds/ft_memmove.o b/libftt/builds/ft_memmove.o new file mode 100644 index 0000000..9ac3a2a Binary files /dev/null and b/libftt/builds/ft_memmove.o differ diff --git a/libftt/builds/ft_memset.o b/libftt/builds/ft_memset.o new file mode 100644 index 0000000..90756dd Binary files /dev/null and b/libftt/builds/ft_memset.o differ diff --git a/libftt/builds/ft_next_word.o b/libftt/builds/ft_next_word.o new file mode 100644 index 0000000..b67d7b0 Binary files /dev/null and b/libftt/builds/ft_next_word.o differ diff --git a/libftt/builds/ft_printf.o b/libftt/builds/ft_printf.o new file mode 100644 index 0000000..9f8a856 Binary files /dev/null and b/libftt/builds/ft_printf.o differ diff --git a/libftt/builds/ft_putchar.o b/libftt/builds/ft_putchar.o new file mode 100644 index 0000000..9484abc Binary files /dev/null and b/libftt/builds/ft_putchar.o differ diff --git a/libftt/builds/ft_putchar_fd.o b/libftt/builds/ft_putchar_fd.o new file mode 100644 index 0000000..e94bcf9 Binary files /dev/null and b/libftt/builds/ft_putchar_fd.o differ diff --git a/libftt/builds/ft_putendl.o b/libftt/builds/ft_putendl.o new file mode 100644 index 0000000..3b09923 Binary files /dev/null and b/libftt/builds/ft_putendl.o differ diff --git a/libftt/builds/ft_putendl_fd.o b/libftt/builds/ft_putendl_fd.o new file mode 100644 index 0000000..6c7dc21 Binary files /dev/null and b/libftt/builds/ft_putendl_fd.o differ diff --git a/libftt/builds/ft_putnbr.o b/libftt/builds/ft_putnbr.o new file mode 100644 index 0000000..c1f9619 Binary files /dev/null and b/libftt/builds/ft_putnbr.o differ diff --git a/libftt/builds/ft_putnbr_fd.o b/libftt/builds/ft_putnbr_fd.o new file mode 100644 index 0000000..bec2dca Binary files /dev/null and b/libftt/builds/ft_putnbr_fd.o differ diff --git a/libftt/builds/ft_putnbrbase.o b/libftt/builds/ft_putnbrbase.o new file mode 100644 index 0000000..50a8665 Binary files /dev/null and b/libftt/builds/ft_putnbrbase.o differ diff --git a/libftt/builds/ft_putnbrendl.o b/libftt/builds/ft_putnbrendl.o new file mode 100644 index 0000000..87f8b82 Binary files /dev/null and b/libftt/builds/ft_putnbrendl.o differ diff --git a/libftt/builds/ft_putnbrendl_fd.o b/libftt/builds/ft_putnbrendl_fd.o new file mode 100644 index 0000000..1f86272 Binary files /dev/null and b/libftt/builds/ft_putnbrendl_fd.o differ diff --git a/libftt/builds/ft_putstr.o b/libftt/builds/ft_putstr.o new file mode 100644 index 0000000..950ce9b Binary files /dev/null and b/libftt/builds/ft_putstr.o differ diff --git a/libftt/builds/ft_putstr_fd.o b/libftt/builds/ft_putstr_fd.o new file mode 100644 index 0000000..0bad1df Binary files /dev/null and b/libftt/builds/ft_putstr_fd.o differ diff --git a/libftt/builds/ft_sign.o b/libftt/builds/ft_sign.o new file mode 100644 index 0000000..3f14de5 Binary files /dev/null and b/libftt/builds/ft_sign.o differ diff --git a/libftt/builds/ft_smaller.o b/libftt/builds/ft_smaller.o new file mode 100644 index 0000000..ddbaaa3 Binary files /dev/null and b/libftt/builds/ft_smaller.o differ diff --git a/libftt/builds/ft_split.o b/libftt/builds/ft_split.o new file mode 100644 index 0000000..05116be Binary files /dev/null and b/libftt/builds/ft_split.o differ diff --git a/libftt/builds/ft_strcat.o b/libftt/builds/ft_strcat.o new file mode 100644 index 0000000..75d93d1 Binary files /dev/null and b/libftt/builds/ft_strcat.o differ diff --git a/libftt/builds/ft_strchr.o b/libftt/builds/ft_strchr.o new file mode 100644 index 0000000..a75d864 Binary files /dev/null and b/libftt/builds/ft_strchr.o differ diff --git a/libftt/builds/ft_strchrset.o b/libftt/builds/ft_strchrset.o new file mode 100644 index 0000000..f21ec78 Binary files /dev/null and b/libftt/builds/ft_strchrset.o differ diff --git a/libftt/builds/ft_strclr.o b/libftt/builds/ft_strclr.o new file mode 100644 index 0000000..18fc655 Binary files /dev/null and b/libftt/builds/ft_strclr.o differ diff --git a/libftt/builds/ft_strcmp.o b/libftt/builds/ft_strcmp.o new file mode 100644 index 0000000..5a260e7 Binary files /dev/null and b/libftt/builds/ft_strcmp.o differ diff --git a/libftt/builds/ft_strcpy.o b/libftt/builds/ft_strcpy.o new file mode 100644 index 0000000..bf3b6db Binary files /dev/null and b/libftt/builds/ft_strcpy.o differ diff --git a/libftt/builds/ft_strdel.o b/libftt/builds/ft_strdel.o new file mode 100644 index 0000000..75f9e8b Binary files /dev/null and b/libftt/builds/ft_strdel.o differ diff --git a/libftt/builds/ft_strdup.o b/libftt/builds/ft_strdup.o new file mode 100644 index 0000000..7733679 Binary files /dev/null and b/libftt/builds/ft_strdup.o differ diff --git a/libftt/builds/ft_strequ.o b/libftt/builds/ft_strequ.o new file mode 100644 index 0000000..17ffdec Binary files /dev/null and b/libftt/builds/ft_strequ.o differ diff --git a/libftt/builds/ft_striter.o b/libftt/builds/ft_striter.o new file mode 100644 index 0000000..56a382f Binary files /dev/null and b/libftt/builds/ft_striter.o differ diff --git a/libftt/builds/ft_striteri.o b/libftt/builds/ft_striteri.o new file mode 100644 index 0000000..ba184d7 Binary files /dev/null and b/libftt/builds/ft_striteri.o differ diff --git a/libftt/builds/ft_strjoin.o b/libftt/builds/ft_strjoin.o new file mode 100644 index 0000000..08818fd Binary files /dev/null and b/libftt/builds/ft_strjoin.o differ diff --git a/libftt/builds/ft_strjoinfree.o b/libftt/builds/ft_strjoinfree.o new file mode 100644 index 0000000..24d4f40 Binary files /dev/null and b/libftt/builds/ft_strjoinfree.o differ diff --git a/libftt/builds/ft_strlcat.o b/libftt/builds/ft_strlcat.o new file mode 100644 index 0000000..bf6b266 Binary files /dev/null and b/libftt/builds/ft_strlcat.o differ diff --git a/libftt/builds/ft_strlcpy.o b/libftt/builds/ft_strlcpy.o new file mode 100644 index 0000000..eddfe43 Binary files /dev/null and b/libftt/builds/ft_strlcpy.o differ diff --git a/libftt/builds/ft_strlen.o b/libftt/builds/ft_strlen.o new file mode 100644 index 0000000..525c52e Binary files /dev/null and b/libftt/builds/ft_strlen.o differ diff --git a/libftt/builds/ft_strmap.o b/libftt/builds/ft_strmap.o new file mode 100644 index 0000000..9dd63b0 Binary files /dev/null and b/libftt/builds/ft_strmap.o differ diff --git a/libftt/builds/ft_strmapi.o b/libftt/builds/ft_strmapi.o new file mode 100644 index 0000000..a998d38 Binary files /dev/null and b/libftt/builds/ft_strmapi.o differ diff --git a/libftt/builds/ft_strmultisplit.o b/libftt/builds/ft_strmultisplit.o new file mode 100644 index 0000000..7260f70 Binary files /dev/null and b/libftt/builds/ft_strmultisplit.o differ diff --git a/libftt/builds/ft_strncat.o b/libftt/builds/ft_strncat.o new file mode 100644 index 0000000..0938892 Binary files /dev/null and b/libftt/builds/ft_strncat.o differ diff --git a/libftt/builds/ft_strncmp.o b/libftt/builds/ft_strncmp.o new file mode 100644 index 0000000..760db2a Binary files /dev/null and b/libftt/builds/ft_strncmp.o differ diff --git a/libftt/builds/ft_strncpy.o b/libftt/builds/ft_strncpy.o new file mode 100644 index 0000000..da3bc3e Binary files /dev/null and b/libftt/builds/ft_strncpy.o differ diff --git a/libftt/builds/ft_strnequ.o b/libftt/builds/ft_strnequ.o new file mode 100644 index 0000000..abeb4e6 Binary files /dev/null and b/libftt/builds/ft_strnequ.o differ diff --git a/libftt/builds/ft_strnew.o b/libftt/builds/ft_strnew.o new file mode 100644 index 0000000..0f3dbfa Binary files /dev/null and b/libftt/builds/ft_strnew.o differ diff --git a/libftt/builds/ft_strnstr.o b/libftt/builds/ft_strnstr.o new file mode 100644 index 0000000..e78a38f Binary files /dev/null and b/libftt/builds/ft_strnstr.o differ diff --git a/libftt/builds/ft_strrchr.o b/libftt/builds/ft_strrchr.o new file mode 100644 index 0000000..1619388 Binary files /dev/null and b/libftt/builds/ft_strrchr.o differ diff --git a/libftt/builds/ft_strstr.o b/libftt/builds/ft_strstr.o new file mode 100644 index 0000000..a8886a8 Binary files /dev/null and b/libftt/builds/ft_strstr.o differ diff --git a/libftt/builds/ft_strtrim.o b/libftt/builds/ft_strtrim.o new file mode 100644 index 0000000..e629560 Binary files /dev/null and b/libftt/builds/ft_strtrim.o differ diff --git a/libftt/builds/ft_substr.o b/libftt/builds/ft_substr.o new file mode 100644 index 0000000..0609290 Binary files /dev/null and b/libftt/builds/ft_substr.o differ diff --git a/libftt/builds/ft_tolower.o b/libftt/builds/ft_tolower.o new file mode 100644 index 0000000..c6cc8be Binary files /dev/null and b/libftt/builds/ft_tolower.o differ diff --git a/libftt/builds/ft_toupper.o b/libftt/builds/ft_toupper.o new file mode 100644 index 0000000..c59c38f Binary files /dev/null and b/libftt/builds/ft_toupper.o differ diff --git a/libftt/builds/ft_utoa.o b/libftt/builds/ft_utoa.o new file mode 100644 index 0000000..4ba8597 Binary files /dev/null and b/libftt/builds/ft_utoa.o differ diff --git a/libftt/includes/ft_get_next_line.h b/libftt/includes/ft_get_next_line.h new file mode 100644 index 0000000..6d4dc9e --- /dev/null +++ b/libftt/includes/ft_get_next_line.h @@ -0,0 +1,31 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* get_next_line.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2019/01/29 10:19:37 by hulamy #+# #+# */ +/* Updated: 2020/02/25 18:48:49 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef GET_NEXT_LINE_H +# define GET_NEXT_LINE_H + +# ifndef BUFFER_SIZE +# define BUFFER_SIZE 1 +# endif + +typedef struct s_gnlist +{ + int lfd; + char *str; + struct s_gnlist *next; +} t_gnlist; + +int ft_gnl(const int fd, char **line); +int multi_fd(int fd, t_gnlist **lst); +int free_lst(t_gnlist **lst, int ret); + +#endif diff --git a/libftt/includes/ft_printf.h b/libftt/includes/ft_printf.h new file mode 100644 index 0000000..1f0e1fa --- /dev/null +++ b/libftt/includes/ft_printf.h @@ -0,0 +1,62 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_printf.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2020/02/27 12:07:47 by hulamy #+# #+# */ +/* Updated: 2020/03/12 20:35:10 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef FT_PRINTF_H +# define FT_PRINTF_H +# include // to use va_arg + +/* +** ft_printf.c +*/ + +char *specifier(char *s); +int ft_expand_star(int nbr, char **string); +int ft_put_word(char *s, char *type, int size); +char *convert_with_flags(char *s, va_list ap, char *type, int *size); +int ft_printf(char *string, ...); + +/* +** ft_next_word.c +*/ + +int width_precision(char *s); +int word_length(char *s); +char *next_word(char **s); + +/* +** ft_convert.c +*/ + +char *conv_i(char c, long int i); +char *conv_u(char c, unsigned long int i); +char *ft_convert(va_list ap, char *type, char **s); + +/* +** ft_flag_transform.c +*/ + +char *precision_int(char *print, int precision); +char *ft_precision(char *s, char *print, char *type); +char *width_flags(char *print, char *s, int width, int zero); +char *ft_width(char *s, char *print, int *size, char *type); +char *ft_flag_transform(char *s, char *print, char *type, int *size); + +/* +** ft_flag_transform_bonus.c +*/ + +char *ft_plus(char *s, char *print, char *type); +char *ft_sharp(char *s, char *print, char *type); +char *ft_sharp_again(char *s, char *print, char *type); +char *ft_space(char *s, char *print, char *type, int *size); + +#endif diff --git a/libftt/includes/libft.h b/libftt/includes/libft.h new file mode 100644 index 0000000..3712b93 --- /dev/null +++ b/libftt/includes/libft.h @@ -0,0 +1,169 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* libft.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2019/11/25 14:45:53 by hulamy #+# #+# */ +/* Updated: 2020/02/27 18:06:10 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef LIBFT_H +# define LIBFT_H +# include +# include +# include +# include "ft_get_next_line.h" +# include "ft_printf.h" +# include // to use va_arg in ft_printf + +void *ft_memset(void *b, int c, size_t len); +void ft_bzero(void *s, size_t n); +void *ft_memcpy(void *dst, const void *src, size_t n); +void *ft_memccpy(void *dst, const void *src, int c, size_t n); +void *ft_memmove(void *dst, const void *src, size_t len); +void *ft_memchr(const void *s, int c, size_t n); +int ft_memcmp(const void *s1, const void *s2, size_t n); +size_t ft_strlen(const char *str); +int ft_isalpha(int c); +int ft_isdigit(int c); +int ft_isalnum(int c); +int ft_isascii(int c); +int ft_isprint(int c); +int ft_toupper(int c); +int ft_tolower(int c); +char *ft_strchr(const char *s, int c); +char *ft_strrchr(const char *s, int c); +char *ft_strchrset(const char *s, const char *set); +int ft_strncmp(const char *s1, const char *s2, size_t n); +size_t ft_strlcpy(char *dst, const char *src, size_t size); +size_t ft_strlcat(char *dst, const char *src, size_t size); +char *ft_strnstr(const char *b, const char *l, size_t s); +int ft_atoi(const char *str); +void *ft_calloc(size_t count, size_t size); +char *ft_strdup(const char *s1); + +char *ft_substr(char const *s, unsigned int start, size_t len); +char *ft_strjoin(char const *s1, char const *s2); +char *ft_strtrim(char const *s1, char const *set); +char **ft_split(char const *s, char c); +char *ft_itoa(long int n); +char *ft_utoa(unsigned long int n); +char *ft_strmapi(char const *s, char (*f)(unsigned int, char)); +void ft_putchar_fd(char c, int fd); +void ft_putstr_fd(char *s, int fd); +void ft_putendl_fd(char *s, int fd); +void ft_putnbr_fd(int n, int fd); + +typedef struct s_list +{ + void *content; + struct s_list *next; +} t_list; + +t_list *ft_lstnew(void *content); +void ft_lstadd_front(t_list **alst, t_list *n); +int ft_lstsize(t_list *lst); +t_list *ft_lstlast(t_list *lst); +void ft_lstadd_back(t_list **alst, t_list *n); +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 *l, void *(*f)(void*), void (*d)(void*)); + +char *ft_strcat(char *s1, const char *s2); +int ft_strcmp(const char *s1, const char *s2); +char *ft_strcpy(char *dst, const char *src); +char *ft_strncat(char *s1, const char *s2, size_t n); +char *ft_strncpy(char *dst, const char *src, size_t len); +char *ft_strstr(const char *big, const char *little); +void ft_strclr(char *s); +void ft_strdel(char **as); +int ft_strequ(char const *s1, char const *s2); +void ft_striter(char *s, void (*f)(char *)); +void ft_striteri(char *s, void (*f)(unsigned int, char *)); +char *ft_strjoinfree(char *s1, char *s2); +char *ft_strmap(char const *s, char (*f)(char)); +int ft_strnequ(char const *s1, char const *s2, size_t n); +char *ft_strnew(size_t size); +void *ft_memalloc(size_t size); +void ft_memdel(void **ap); +void ft_putchar(char c); +void ft_putendl(char const *str); +void ft_putnbr(int nbr); +void ft_putstr(char const *str); +void ft_putnbrbase(int nbr, char *base); +int ft_atoibase(char *str, char *base); +char *ft_convertbase(char *nbr, char *base_from, char *base_to); +char *ft_convertbase_free(char *nbr, char *b_from, char *b_to); +char **ft_strmultisplit(char *str, char *charset); +int ft_any(char **tab, int (*f)(char*)); +void ft_foreach(int *tab, int length, void (*f)(int)); +int ft_issort(int *tab, int length, int (*f)(int, int)); +int *ft_arraymap(int *tab, int length, int(*f)(int)); +void ft_putnbrendl(int n); +void ft_putnbrendl_fd(int n, int fd); +int ft_get_next_line(const int fd, char **line); +char *ft_concat_free(char *str1, char *str2); +int ft_abs(int n); +int ft_greater(int a, int b); +int ft_smaller(int a, int b); +int ft_sign(int i); + + + + + + +# include // to use va_arg + +/* +** ft_printf.c +*/ + +char *specifier(char *s); +int ft_expand_star(int nbr, char **string); +int ft_put_word(char *s, char *type, int size); +char *convert_with_flags(char *s, va_list ap, char *type, int *size); +int ft_printf(char *string, ...); + +/* +** ft_next_word.c +*/ + +int width_precision(char *s); +int word_length(char *s); +char *next_word(char **s); + +/* +** ft_convert.c +*/ + +char *conv_i(char c, long int i); +char *conv_u(char c, unsigned long int i); +char *ft_convert(va_list ap, char *type, char **s); + +/* +** ft_flag_transform.c +*/ + +char *precision_int(char *print, int precision); +char *ft_precision(char *s, char *print, char *type); +char *width_flags(char *print, char *s, int width, int zero); +char *ft_width(char *s, char *print, int *size, char *type); +char *ft_flag_transform(char *s, char *print, char *type, int *size); + +/* +** ft_flag_transform_bonus.c +*/ + +char *ft_plus(char *s, char *print, char *type); +char *ft_sharp(char *s, char *print, char *type); +char *ft_sharp_again(char *s, char *print, char *type); +char *ft_space(char *s, char *print, char *type, int *size); + + + +#endif diff --git a/libftt/libft.a b/libftt/libft.a new file mode 100644 index 0000000..069d70a Binary files /dev/null and b/libftt/libft.a differ diff --git a/libftt/libft.pdf b/libftt/libft.pdf new file mode 100644 index 0000000..c6489aa Binary files /dev/null and b/libftt/libft.pdf differ diff --git a/libftt/srcs/ft_abs.c b/libftt/srcs/ft_abs.c new file mode 100644 index 0000000..3cdb51f --- /dev/null +++ b/libftt/srcs/ft_abs.c @@ -0,0 +1,8 @@ +#include "libft.h" + +int ft_abs(int n) +{ + if (n < 0) + n *= -1; + return (n); +} diff --git a/libftt/srcs/ft_any.c b/libftt/srcs/ft_any.c new file mode 100644 index 0000000..349e3a9 --- /dev/null +++ b/libftt/srcs/ft_any.c @@ -0,0 +1,26 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_any.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2018/11/16 15:14:49 by hulamy #+# #+# */ +/* Updated: 2018/11/16 15:14:53 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_any(char **tab, int (*f)(char*)) +{ + int i; + + i = -1; + if (!tab) + return (0); + while (tab[++i]) + if (f(tab[i]) == 1) + return (1); + return (0); +} diff --git a/libftt/srcs/ft_arraymap.c b/libftt/srcs/ft_arraymap.c new file mode 100644 index 0000000..267510a --- /dev/null +++ b/libftt/srcs/ft_arraymap.c @@ -0,0 +1,28 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_arraymap.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2018/11/16 15:17:24 by hulamy #+# #+# */ +/* Updated: 2018/11/16 15:17:27 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int *ft_arraymap(int *tab, int length, int (*f)(int)) +{ + int i; + int *newtab; + + i = -1; + if (!tab) + return (NULL); + if (!(newtab = (int*)malloc(sizeof(*newtab) * (length + 1)))) + return (NULL); + while (++i < length) + newtab[i] = (*f)(tab[i]); + return (newtab); +} diff --git a/libftt/srcs/ft_atoi.c b/libftt/srcs/ft_atoi.c new file mode 100644 index 0000000..74da199 --- /dev/null +++ b/libftt/srcs/ft_atoi.c @@ -0,0 +1,39 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_atoi.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2019/11/25 13:54:29 by hulamy #+# #+# */ +/* Updated: 2019/11/25 13:54:35 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_atoi(const char *str) +{ + long long nbr; + int i; + int n; + + i = 0; + n = 1; + nbr = 0; + while ((str[i] == 32) || (str[i] > 8 && str[i] < 14)) + i++; + if (str[i] == '-') + n = -1; + if (str[i] == '+' || str[i] == '-') + i++; + while (str[i] >= '0' && str[i] <= '9') + { + if ((nbr >= 922337203685477580 + && ((str[i] > 8 && n < 0) || (str[i] > 7 && n > 0)))) + return ((n > 0) ? -1 : 0); + else + nbr = nbr * 10 + (str[i++] - '0'); + } + return (nbr * n); +} diff --git a/libftt/srcs/ft_atoibase.c b/libftt/srcs/ft_atoibase.c new file mode 100644 index 0000000..fdb92d1 --- /dev/null +++ b/libftt/srcs/ft_atoibase.c @@ -0,0 +1,75 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_atoibase.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2018/11/16 15:15:31 by hulamy #+# #+# */ +/* Updated: 2018/11/16 15:22:34 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +static int is_valid_base(char *base, int i, int j) +{ + while (base[i]) + { + j = i + 1; + while (base[j]) + { + if (base[i] == base[j]) + return (0); + j++; + } + if (base[i] == '-' || base[i] == '+') + return (0); + i++; + } + if (i >= 2) + return (1); + return (0); +} + +static int skip(int i, char *str, int *n) +{ + while ((str[i] == 32) || (str[i] > 8 && str[i] < 14)) + i++; + if (str[i] == '+' || str[i] == '-') + { + if (str[i] == '-') + *n = -1; + i++; + } + return (i); +} + +int ft_atoibase(char *str, char *base) +{ + int i; + int j; + int length; + int res; + int n; + + length = 0; + res = 0; + n = 1; + if (!is_valid_base(base, 0, 0)) + return (0); + while (base[length]) + length++; + i = skip(0, str, &n); + while (str[i] && str[i] > 32 && str[i] != '-' && str[i] != '+') + { + j = 0; + while (str[i] != base[j] && base[j]) + j++; + if (base[j] == '\0') + return (0); + res = (res * length) + j; + i++; + } + return (res * n); +} diff --git a/libftt/srcs/ft_bzero.c b/libftt/srcs/ft_bzero.c new file mode 100644 index 0000000..f66336a --- /dev/null +++ b/libftt/srcs/ft_bzero.c @@ -0,0 +1,27 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_bzero.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2019/11/25 13:54:43 by hulamy #+# #+# */ +/* Updated: 2019/11/25 13:54:44 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_bzero(void *s, size_t n) +{ + size_t i; + unsigned char *ptr; + + if (n) + { + ptr = (unsigned char *)s; + i = 0; + while (i < n) + ptr[i++] = '\0'; + } +} diff --git a/libftt/srcs/ft_calloc.c b/libftt/srcs/ft_calloc.c new file mode 100644 index 0000000..b84f0ee --- /dev/null +++ b/libftt/srcs/ft_calloc.c @@ -0,0 +1,64 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_calloc.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2019/11/25 13:54:53 by hulamy #+# #+# */ +/* Updated: 2019/12/01 16:04:12 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +/* +** allocate count * size byte of memory and +** return a pointer to the allocated memory +** +** exemple allocation for 5 integers with malloc then calloc : +** a = (int *)malloc(5 * sizeof(int)); //5*4bytes = 20 bytes +** free(a); +** a = (int *)calloc(5, sizeof(int)); +*/ + +/* +** #include +** +** void ft_bzero(void *s, size_t n) +** { +** size_t i; +** unsigned char *ptr; +** +** if (n) +** { +** ptr = (unsigned char *)s; +** i = 0; +** while (i < n) +** ptr[i++] = '\0'; +** } +** } +** +** void *ft_calloc(size_t count, size_t size); +** +** int main(void) +** { +** void *str; +** +** str = ft_calloc(0, 0); +** if (str == ((void *)0)) +** printf("failed\n"); +** free(str); +** return (0); +** } +*/ + +#include "libft.h" + +void *ft_calloc(size_t count, size_t size) +{ + void *tmp; + + if (!(tmp = malloc(count * size))) + return (NULL); + ft_bzero(tmp, count * size); + return (tmp); +} diff --git a/libftt/srcs/ft_concat_free.c b/libftt/srcs/ft_concat_free.c new file mode 100644 index 0000000..d31a4cd --- /dev/null +++ b/libftt/srcs/ft_concat_free.c @@ -0,0 +1,53 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_concat_free.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2020/02/27 18:04:09 by hulamy #+# #+# */ +/* Updated: 2020/02/27 18:06:44 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +/* +** create a new string size of str1 + str2 +** fill it with concated str1 and str2m as "str1str2" +** free the received strings str1 and str2 +** return the new string +*/ + +/* +** #include +** #include "libft.h" +** +** char *ft_concat_free(char *str1, char *str2); +** +** int main(int ac, char **av) +** { +** if (ac != 3) +** return (0); +** printf("%s\n", ft_concat_free(ft_strdup(av[1]), ft_strdup(av[2]))); +** return (0); +** } +*/ + +#include "libft.h" + +char *ft_concat_free(char *str1, char *str2) +{ + char *cat; + int i; + int j; + + cat = ft_memalloc(sizeof(char) * (ft_strlen(str1) + ft_strlen(str2) + 1)); + i = -1; + j = 0; + while (str1[++i]) + cat[i] = str1[i]; + while (str2[j]) + cat[i++] = str2[j++]; + free(str1); + free(str2); + return (cat); +} diff --git a/libftt/srcs/ft_convertbase.c b/libftt/srcs/ft_convertbase.c new file mode 100644 index 0000000..43f6ec4 --- /dev/null +++ b/libftt/srcs/ft_convertbase.c @@ -0,0 +1,196 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_convertbase.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2020/02/26 20:19:54 by hulamy #+# #+# */ +/* Updated: 2020/02/26 20:20:14 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +/* +** take a string that is a number in a certain base +** and convert it in another base +** it works with unsigned long int +** return the new string +*/ + +/* +** #include // for printf +** #include // for atoi +** +** char *ft_convertbase(char *nbr, char *base_from, char *base_to); +** +** int main(int ac, char **av) +** { +** if (ac != 4) +** { +** printf("usage:\nchar *nbr, char *base_from, char *base_to\n"); +** printf("try the max long unsigned int : 18446744073709551615\n"); +** } +** else +** printf("[%s]\n",ft_convertbase(av[1], av[2], av[3])); +** return (0); +** } +*/ + +#include "libft.h" + +/* +** check : +** -if the base has no characters that appear more than one time +** -if the signes '-' and '+' are not part of the set +** -if there are no invisible characters (inferior to 32 or equal to 127) +*/ + +int + is_valid_base(char *base) +{ + int i; + int j; + + i = 0; + while (base[i]) + { + j = i + 1; + while (base[j]) + if (base[i] == base[j++]) + return (0); + if (base[i] == '-' || base[i] == '+' || base[i] < 33 || base[i] == 127) + return (0); + i++; + } + if (i >= 2) + return (1); + return (0); +} + +/* +** check : +** -if base is valid +** -if nbr contain characters +** -if nbr is made of elements of base only +*/ + +int + is_valid_nbr(char *nbr, char *base) +{ + int i; + int j; + + i = 0; + if (!is_valid_base(base)) + return (0); + while (nbr[i]) + { + j = 0; + while (base[j] && nbr[i] != base[j]) + j++; + if (base[j] == '\0') + return (0); + i++; + } + if (i == 0) + return (0); + return (1); +} + +/* +** -transform a nbr written as a string into a decimal nbr +** -it's an unsigned nbr because the negativity is managed elsewhere +** -if the number is bigger than the max unsigned long int it's false +** as it's impossible to verify if a number is bigger than the biggest +** unsigned, we verify the difference before the multiplication +*/ + +unsigned long int + base_to_decimal(char *nbr, char *base, int *error) +{ + unsigned long int decimal; + int i; + int j; + int length; + + decimal = 0; + i = 0; + length = 0; + while (base[length]) + length++; + while (nbr[i]) + { + j = 0; + while (nbr[i] != base[j] && base[j]) + j++; + if ((18446744073709551615U - j) / length < decimal) + return (*error = 1); + decimal = (decimal * length) + j; + i++; + } + return (decimal); +} + +/* +** -it counts the size needed to be allocated +** -if the given nbr was a negative one it add the place for the '-' +** -then convert the nbr from decimal base to destination base +** into the string allocated +*/ + +char + *decimal_to_base(unsigned long int decimal, char *base, int malloc_size) +{ + int base_size; + int neg; + char *result; + unsigned long int nb; + + neg = malloc_size; + base_size = 0; + while (base[base_size]) + base_size++; + nb = decimal; + while (nb /= base_size) + malloc_size++; + result = (char *)malloc(sizeof(char) * (malloc_size + 2)); + result[malloc_size + 1] = '\0'; + if (neg) + result[0] = '-'; + while (malloc_size >= 0) + { + result[malloc_size--] = base[decimal % base_size]; + decimal /= base_size; + } + return (result); +} + +/* +** -main function to convert from one base to another +** -function base_to_decimal has an awfull int *error because it cannot +** return -1 in case of error, since it's an unsigned, and it cannot +** return 0 to check the error since it would be confusing with an actual +** return of 0 if the number to convert is 0 +*/ + +char + *ft_convertbase(char *nbr, char *base_from, char *base_to) +{ + int length; + unsigned long int decimal; + int error; + + error = 0; + length = 0; + if (nbr[0] == '-') + { + nbr++; + length = 1; + } + if (!is_valid_nbr(nbr, base_from) || !is_valid_base(base_to)) + return (NULL); + decimal = base_to_decimal(nbr, base_from, &error); + if (error == 1) + return (NULL); + return (decimal_to_base(decimal, base_to, length)); +} diff --git a/libftt/srcs/ft_convertbase_free.c b/libftt/srcs/ft_convertbase_free.c new file mode 100644 index 0000000..1f2bae7 --- /dev/null +++ b/libftt/srcs/ft_convertbase_free.c @@ -0,0 +1,198 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_convertbase_free.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2020/02/26 20:19:54 by hulamy #+# #+# */ +/* Updated: 2020/02/27 20:23:22 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +/* +** (just like ft_convert, but free the string it receive) +** take a string that is a number in a certain base +** and convert it in another base +** it works with unsigned long int +** return the new string +*/ + +/* +** #include // for printf +** #include // for atoi +** +** char *ft_convertbase_free(char *nbr, char *base_from, char *base_to); +** +** int main(int ac, char **av) +** { +** if (ac != 4) +** { +** printf("usage:\nchar *nbr, char *base_from, char *base_to\n"); +** printf("try the max long unsigned int : 18446744073709551615\n"); +** } +** else +** printf("[%s]\n",ft_convertbase_free(av[1], av[2], av[3])); +** return (0); +** } +*/ + +#include "libft.h" + +/* +** check : +** -if the base has no characters that appear more than one time +** -if the signes '-' and '+' are not part of the set +** -if there are no invisible characters (inferior to 32 or equal to 127) +*/ + +int + is_base_valid(char *base) +{ + int i; + int j; + + i = 0; + while (base[i]) + { + j = i + 1; + while (base[j]) + if (base[i] == base[j++]) + return (0); + if (base[i] == '-' || base[i] == '+' || base[i] < 33 || base[i] == 127) + return (0); + i++; + } + if (i >= 2) + return (1); + return (0); +} + +/* +** check : +** -if base is valid +** -if nbr contain characters +** -if nbr is made of elements of base only +*/ + +int + is_nbr_valid(char *nbr, char *base) +{ + int i; + int j; + + i = 0; + if (!is_base_valid(base)) + return (0); + while (nbr[i]) + { + j = 0; + while (base[j] && nbr[i] != base[j]) + j++; + if (base[j] == '\0') + return (0); + i++; + } + if (i == 0) + return (0); + return (1); +} + +/* +** -transform a nbr written as a string into a decimal nbr +** -it's an unsigned nbr because the negativity is managed elsewhere +** -if the number is bigger than the max unsigned long int it's false +** as it's impossible to verify if a number is bigger than the biggest +** unsigned, we verify the difference before the multiplication +*/ + +unsigned long int + base_2_decimal(char *nbr, char *base, int *error) +{ + unsigned long int decimal; + int i; + int j; + int length; + + decimal = 0; + i = 0; + length = 0; + while (base[length]) + length++; + while (nbr[i]) + { + j = 0; + while (nbr[i] != base[j] && base[j]) + j++; + if ((18446744073709551615U - j) / length < decimal) + return (*error = 1); + decimal = (decimal * length) + j; + i++; + } + return (decimal); +} + +/* +** -it counts the size needed to be allocated +** -if the given nbr was a negative one it add the place for the '-' +** -then convert the nbr from decimal base to destination base +** into the string allocated +*/ + +char + *decimal_2_base(unsigned long int decimal, char *base, int malloc_size) +{ + int base_size; + int neg; + char *result; + unsigned long int nb; + + neg = malloc_size; + base_size = 0; + while (base[base_size]) + base_size++; + nb = decimal; + while (nb /= base_size) + malloc_size++; + result = (char *)malloc(sizeof(char) * (malloc_size + 2)); + result[malloc_size + 1] = '\0'; + if (neg) + result[0] = '-'; + while (malloc_size >= 0) + { + result[malloc_size--] = base[decimal % base_size]; + decimal /= base_size; + } + return (result); +} + +/* +** -main function to convert from one base to another +** -function base_to_decimal has an awfull int *error because it cannot +** return -1 in case of error, since it's an unsigned, and it cannot +** return 0 to check the error since it would be confusing with an actual +** return of 0 if the number to convert is 0 +*/ + +char + *ft_convertbase_free(char *nbr, char *base_from, char *base_to) +{ + int length; + unsigned long int decimal; + int error; + + error = 0; + length = 0; + if (nbr[0] == '-') + { + nbr++; + length = 1; + } + if (!is_nbr_valid(nbr, base_from) || !is_base_valid(base_to)) + return (NULL); + decimal = base_2_decimal(nbr, base_from, &error); + if (error == 1) + return (NULL); + free(nbr); + return (decimal_2_base(decimal, base_to, length)); +} diff --git a/libftt/srcs/ft_foreach.c b/libftt/srcs/ft_foreach.c new file mode 100644 index 0000000..aaf7649 --- /dev/null +++ b/libftt/srcs/ft_foreach.c @@ -0,0 +1,22 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_foreach.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2018/11/16 15:16:10 by hulamy #+# #+# */ +/* Updated: 2018/11/16 15:16:11 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_foreach(int *tab, int length, void (*f)(int)) +{ + int i; + + i = 0; + while (i < length && tab && tab[i]) + (*f)(tab[i++]); +} diff --git a/libftt/srcs/ft_gnl.c b/libftt/srcs/ft_gnl.c new file mode 100644 index 0000000..fdce9c1 --- /dev/null +++ b/libftt/srcs/ft_gnl.c @@ -0,0 +1,136 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* get_next_line.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2019/12/31 17:05:53 by hulamy #+# #+# */ +/* Updated: 2020/02/25 18:48:55 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +/* +** #include //for printf +** #include //for open +** +** int main(int ac, char **av) +** { +** int *fd; +** int i = 0; +** int j = 0; +** int ret; +** char *line = NULL; +** +** fd = (int *)malloc(sizeof(int) * ac); +** while (++i <= ac - 1) +** fd[i - 1] = open(av[i], O_RDONLY); +** i = 0; +** while (j < ac - 1) +** { +** if ((ret = ft_gnl(fd[i], &line)) > 0) +** { +** printf(" [fd%i-%i] %s\n", fd[i], ret, line); +** free(line); +** j = 0; +** } +** else if (ret == -1) +** { +** printf("[fd%i-%i] *ERROR*\n", fd[i], ret); +** free(line); +** j++; +** } +** else if (*line != '\0') +** printf(" [fd%i-%i] %s\n", fd[i], ret, line); +** else +** { +** printf("[fd%i-%i] %s *FINI*\n", fd[i], ret, line); +** free(line); +** j++; +** } +** i++; +** if (i >= ac - 1) +** i = 0; +** } +** free(fd); +** //while (1); +** return (0); +** } +*/ + +int free_lst(t_gnlist **lst, int ret) +{ + t_gnlist *tmp; + + tmp = *lst; + while (tmp->next != *lst) + tmp = tmp->next; + tmp->next = (*lst)->next; + free((*lst)->str); + if (*lst == (*lst)->next) + { + free(*lst); + *lst = NULL; + } + else + { + free(*lst); + *lst = tmp; + } + return (ret); +} + +int multi_fd(int fd, t_gnlist **lst) +{ + t_gnlist *tmp; + + tmp = *lst; + while (*lst && (*lst)->lfd != fd && (*lst)->next != tmp) + *lst = (*lst)->next; + if (!tmp || ((*lst)->next == tmp && (*lst)->lfd != fd)) + { + if (!(tmp = (t_gnlist*)malloc(sizeof(*tmp)))) + return (0); + tmp->lfd = fd; + if (!(tmp->str = ft_strdup(""))) + return (0); + if (*lst) + { + tmp->next = (*lst)->next; + (*lst)->next = tmp; + } + else + tmp->next = tmp; + *lst = tmp; + } + return (1); +} + +int ft_gnl(const int fd, char **line) +{ + char buf[BUFFER_SIZE + 1]; + int ret; + static t_gnlist *lst = NULL; + char *str; + + ret = 1; + if (!(multi_fd(fd, &lst)) || !line || BUFFER_SIZE < 1) + return (free_lst(&lst, -1)); + while (!(str = ft_strchr(lst->str, '\n')) && ret != 0) + { + if ((ret = read(fd, buf, BUFFER_SIZE)) < 0) + return (free_lst(&lst, -1)); + buf[ret] = '\0'; + if (!(lst->str = ft_strjoinfree(lst->str, ft_strdup(buf)))) + return (free_lst(&lst, -1)); + } + if (str != NULL) + str[0] = '\0'; + if (!(*line = ft_strdup(lst->str))) + return (free_lst(&lst, -1)); + if (str != NULL) + return (ft_memmove(lst->str, str + 1, ft_strlen(str + 1) + 1) != NULL); + return (free_lst(&lst, 0)); +} diff --git a/libftt/srcs/ft_greater.c b/libftt/srcs/ft_greater.c new file mode 100644 index 0000000..1c1d526 --- /dev/null +++ b/libftt/srcs/ft_greater.c @@ -0,0 +1,8 @@ +#include "libft.h" + +int ft_greater(int a, int b) +{ + if (a < b) + return (b); + return (a); +} diff --git a/libftt/srcs/ft_isalnum.c b/libftt/srcs/ft_isalnum.c new file mode 100644 index 0000000..dc1bb03 --- /dev/null +++ b/libftt/srcs/ft_isalnum.c @@ -0,0 +1,18 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_isalnum.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2019/11/25 13:55:05 by hulamy #+# #+# */ +/* Updated: 2019/11/25 13:55:06 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_isalnum(int c) +{ + return (ft_isalpha(c) || ft_isdigit(c)); +} diff --git a/libftt/srcs/ft_isalpha.c b/libftt/srcs/ft_isalpha.c new file mode 100644 index 0000000..e0ec883 --- /dev/null +++ b/libftt/srcs/ft_isalpha.c @@ -0,0 +1,18 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_isalpha.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2019/11/25 13:55:15 by hulamy #+# #+# */ +/* Updated: 2019/11/25 13:55:17 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_isalpha(int c) +{ + return ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z')); +} diff --git a/libftt/srcs/ft_isascii.c b/libftt/srcs/ft_isascii.c new file mode 100644 index 0000000..f201880 --- /dev/null +++ b/libftt/srcs/ft_isascii.c @@ -0,0 +1,18 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_isascii.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2019/11/25 13:55:24 by hulamy #+# #+# */ +/* Updated: 2019/11/25 13:55:25 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_isascii(int c) +{ + return (c >= 0 && c <= 127); +} diff --git a/libftt/srcs/ft_isdigit.c b/libftt/srcs/ft_isdigit.c new file mode 100644 index 0000000..69e0809 --- /dev/null +++ b/libftt/srcs/ft_isdigit.c @@ -0,0 +1,18 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_isdigit.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2019/11/25 13:55:32 by hulamy #+# #+# */ +/* Updated: 2019/11/25 13:55:33 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_isdigit(int c) +{ + return (c >= '0' && c <= '9'); +} diff --git a/libftt/srcs/ft_isprint.c b/libftt/srcs/ft_isprint.c new file mode 100644 index 0000000..21395ab --- /dev/null +++ b/libftt/srcs/ft_isprint.c @@ -0,0 +1,18 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_isprint.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2019/11/25 13:55:43 by hulamy #+# #+# */ +/* Updated: 2019/11/25 13:55:44 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_isprint(int c) +{ + return (c >= 32 && c < 127); +} diff --git a/libftt/srcs/ft_issort.c b/libftt/srcs/ft_issort.c new file mode 100644 index 0000000..842195b --- /dev/null +++ b/libftt/srcs/ft_issort.c @@ -0,0 +1,26 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_issort.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2018/11/16 15:18:14 by hulamy #+# #+# */ +/* Updated: 2018/11/16 15:18:15 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_issort(int *tab, int length, int (*f)(int, int)) +{ + int i; + + i = -1; + if (!tab) + return (0); + while (++i < length - 1) + if (f(tab[i], tab[i + 1]) > 0) + return (0); + return (1); +} diff --git a/libftt/srcs/ft_itoa.c b/libftt/srcs/ft_itoa.c new file mode 100644 index 0000000..9819d33 --- /dev/null +++ b/libftt/srcs/ft_itoa.c @@ -0,0 +1,91 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_itoa.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2019/11/25 13:59:01 by hulamy #+# #+# */ +/* Updated: 2020/02/19 15:44:04 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +/* +** take an integer and give a string +*/ + +/* +** #include // for printf +** #include // for atoi +** +** char *ft_itoa(long int n); +** +** int main(int ac, char **av) +** { +** if (ac == 0) +** return (0); +** else if (ac == 2) +** printf("%s\n",ft_itoa(atoi(av[1]))); +** else +** { +** long int i; +** i = 0; +** printf(" %li\n %s\n\n",i,ft_itoa(i)); +** i = 1234567; +** printf(" %li\n %s\n\n",i,ft_itoa(i)); +** i = -1234567; +** printf(" %li\n %s\n\n",i,ft_itoa(i)); +** i = 237683; +** printf(" %li\n %s\n\n",i,ft_itoa(i)); +** i = 2147483647; +** printf("| %li\n| %s\n\n",i,ft_itoa(i)); +** i = i ^ 0; // create the opposite of a signed '0', which +** // is 0 followed by 31 '1', the signed int max +** printf("* %li\n* %s\n\n",i,ft_itoa(i)); +** i = i ^ 0; +** i = 1 << 31; // change the most lefted bit from '0' (positive) +** // to '1' (negative), the signed int min +** printf("* %li\n* %s\n\n",i,ft_itoa(i)); +** i = 2147483646; +** printf(" %li\n %s\n\n",i,ft_itoa(i)); +** i = -2147483648; +** printf("| %li\n| %s\n\n",i,ft_itoa(i)); +** i = -2147483647; +** printf(" %li\n %s\n\n",i,ft_itoa(i)); +** i = 2147483648; +** printf(" %li\n %s\n\n",i,ft_itoa(i)); +** i = -2147483649; +** printf(" %li\n %s\n\n",i,ft_itoa(i)); +** i = 9223372036854775807; +** printf("| %li\n| %s\n\n",i,ft_itoa(i)); +** i = -9223372036854775807; +** printf("| %li\n| %s\n\n",i,ft_itoa(i)); +** } +** return 0; +** } +*/ + +#include "libft.h" + +char *ft_itoa(long int n) +{ + char *str; + int len; + long int cpy; + char rgt; + + cpy = (n < 0) ? (n / 10) * -10 : (n / 10) * 10; + len = (n < 0) ? 2 : 1; + rgt = (n < 0) ? (n % 10) * -1 + '0' : n % 10 + '0'; + while (n /= 10) + len++; + if (!(str = (char *)malloc(sizeof(char) * (len + 1)))) + return (NULL); + str[len] = '\0'; + str[--len] = rgt; + while (cpy /= 10) + str[--len] = cpy % 10 + '0'; + if (len) + str[0] = '-'; + return (str); +} diff --git a/libftt/srcs/ft_lstadd_back.c b/libftt/srcs/ft_lstadd_back.c new file mode 100644 index 0000000..315119b --- /dev/null +++ b/libftt/srcs/ft_lstadd_back.c @@ -0,0 +1,90 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstadd_back.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2019/11/25 14:11:53 by hulamy #+# #+# */ +/* Updated: 2019/11/25 14:36:12 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +/* +** add an element to the end of a list +** or first if list has no element so far +*/ + +/* +** #include +** +** typedef struct s_list +** { +** void *content; +** struct s_list *next; +** } t_list; +** +** t_list *ft_lstnew(void *content) +** { +** t_list *lst; +** +** if (!(lst = (t_list *)malloc(sizeof(*lst)))) +** return (NULL); +** if (!content) +** lst->content = NULL; +** else +** lst->content = content; +** lst->next = NULL; +** return (lst); +** } +** +** void ft_lstadd_back(t_list **alst, t_list *new); +** +** int main(void) +** { +** char tresor; +** char matos; +** char friends; +** t_list *toto; +** t_list *tmp; +** +** tresor = 'a'; +** matos = 'b'; +** friends = 'c'; +** toto = ft_lstnew(&tresor); +** printf("toto->data :%c\n",*(char*)(toto->content)); +** tmp = ft_lstnew(&matos); +** ft_lstadd_back(&toto, tmp); +** printf("----------------------\n"); +** printf("toto->data :%c\n",*(char*)(toto->content)); +** printf("toto->nxt->data :%c\n",*(char*)(toto->next->content)); +** tmp = ft_lstnew(&friends); +** ft_lstadd_back(&toto, tmp); +** printf("----------------------\n"); +** printf("toto->data :%c\n",*(char*)(toto->content)); +** printf("toto->nxt->data :%c\n",*(char*)(toto->next->content)); +** printf("toto->nxt->nxt->data:%c\n",*(char*)(toto->next->next->content)); +** printf("toto->nxt->nxt->nxt :%s\n",(char*)(toto->next->next->next)); +** return (0); +** } +*/ + +#include "libft.h" + +void ft_lstadd_back(t_list **alst, t_list *new) +{ + t_list *tmp; + + if (alst) + { + tmp = *alst; + if (!tmp) + *alst = new; + else + { + while (tmp->next) + tmp = tmp->next; + tmp->next = new; + } + } +} diff --git a/libftt/srcs/ft_lstadd_front.c b/libftt/srcs/ft_lstadd_front.c new file mode 100644 index 0000000..3f90569 --- /dev/null +++ b/libftt/srcs/ft_lstadd_front.c @@ -0,0 +1,94 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstadd_front.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2019/11/25 14:12:02 by hulamy #+# #+# */ +/* Updated: 2019/11/25 14:36:54 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +/* +** add an element to the begining of a list +*/ + +/* +** #include +** +** typedef struct s_list +** { +** void *content; +** struct s_list *next; +** } t_list; +** +** void *ft_memcpy(void *dst, const void *src, size_t n) +** { +** size_t i; +** char *ptr; +** char *ptr2; +** +** ptr = (char *)dst; +** ptr2 = (char *)src; +** i = -1; +** while (++i < n) +** ptr[i] = ptr2[i]; +** return (dst); +** } +** +** t_list *ft_lstnew(void *content) +** { +** t_list *lst; +** +** if (!(lst = (t_list *)malloc(sizeof(*lst)))) +** return (NULL); +** if (!content) +** lst->content = NULL; +** else +** { +** if (!(lst->content = malloc(sizeof(content)))) +** return (NULL); +** ft_memcpy(lst->content, content, sizeof(content)); +** } +** lst->next = NULL; +** return (lst); +** } +** +** void ft_lstadd_front(t_list **alst, t_list *new); +** +** int main(void) +** { +** char tresor; +** char matos; +** char friends; +** t_list *toto; +** t_list *tmp; +** +** tresor = 'a'; +** matos = 'b'; +** friends = 'c'; +** toto = ft_lstnew(&tresor); +** printf("toto->data :%c\n",*(char*)(toto->content)); +** tmp = ft_lstnew(&matos); +** ft_lstadd_front(&toto, tmp); +** printf("----------------------\n"); +** printf("toto->data :%c\n",*(char*)(toto->content)); +** printf("toto->nxt->data :%c\n",*(char*)(toto->next->content)); +** tmp = ft_lstnew(&friends); +** ft_lstadd_front(&toto, tmp); +** printf("----------------------\n"); +** printf("toto->data :%c\n",*(char*)(toto->content)); +** printf("toto->nxt->data :%c\n",*(char*)(toto->next->content)); +** printf("toto->nxt->nxt->dqta:%c\n",*(char*)(toto->next->next->content)); +** return (0); +** } +*/ + +#include "libft.h" + +void ft_lstadd_front(t_list **alst, t_list *new) +{ + new->next = *alst; + *alst = new; +} diff --git a/libftt/srcs/ft_lstclear.c b/libftt/srcs/ft_lstclear.c new file mode 100644 index 0000000..a28d366 --- /dev/null +++ b/libftt/srcs/ft_lstclear.c @@ -0,0 +1,107 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstclear.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2019/11/25 14:13:30 by hulamy #+# #+# */ +/* Updated: 2019/11/28 17:06:48 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +/* +** delete and free an element of the list and all the followings +*/ + +/* +** #include +** +** typedef struct s_list +** { +** void *content; +** struct s_list *next; +** } t_list; +** +** t_list *ft_lstnew(void *content) +** { +** t_list *lst; +** +** if (!(lst = (t_list *)malloc(sizeof(*lst)))) +** return (NULL); +** if (!content) +** lst->content = NULL; +** else +** lst->content = content; +** lst->next = NULL; +** return (lst); +** } +** +** void ft_lstadd_back(t_list **alst, t_list *new) +** { +** t_list *tmp; +** +** if (alst) +** { +** tmp = *alst; +** if (!tmp) +** *alst = new; +** else +** { +** while (tmp->next) +** tmp = tmp->next; +** tmp->next = new; +** } +** new->next = NULL; +** } +** } +** +** void ft_delete(void *element) +** { +** *(char*)element = '\0'; +** } +** +** void ft_lstdelone(t_list *lst, void (*del)(void *)) +** { +** del(lst->content); +** free(lst); +** lst = NULL; +** } +** +** void ft_lstclear(t_list **lst, void (*del)(void *)); +** +** int main(void) +** { +** t_list *toto; +** void (ft_delete)(void*); +** +** printf("sizeof(t_list)%lu\n",sizeof(t_list)); +** toto = ft_lstnew("a"); +** toto->next = ft_lstnew("b"); +** toto->next->next = ft_lstnew("c"); +** printf("toto->data :%c\n",*(char*)(toto->content)); +** printf("toto->nxt->data :%c\n",*(char*)(toto->next->content)); +** printf("toto->nxt->nxt->data:%c\n",*(char*)(toto->next->next->content)); +** printf("toto->nxt->nxt->nxt :%s\n",(char*)(toto->next->next->next)); +** ft_lstclear(&(toto->next), ft_delete); +** printf("----------------------\n"); +** printf("toto->data :%c\n",*(char*)(toto->content)); +** printf("toto->nxt->data :%c\n",*(char*)(toto->next->content)); +** printf("toto->nxt->nxt :%s\n",(char*)(toto->next->next)); +** return (0); +** } +*/ + +#include "libft.h" + +void ft_lstclear(t_list **lst, void (*del)(void *)) +{ + t_list *next; + + while (*lst != NULL) + { + next = (*lst)->next; + ft_lstdelone(*lst, del); + *lst = next; + } +} diff --git a/libftt/srcs/ft_lstdelone.c b/libftt/srcs/ft_lstdelone.c new file mode 100644 index 0000000..0cf925a --- /dev/null +++ b/libftt/srcs/ft_lstdelone.c @@ -0,0 +1,97 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstdelone.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2019/11/25 14:14:03 by hulamy #+# #+# */ +/* Updated: 2019/11/25 14:35:53 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +/* +** free an element and delete its content with del +** next is not free +*/ + +/* +** #include +** +** typedef struct s_list +** { +** void *content; +** struct s_list *next; +** } t_list; +** +** t_list *ft_lstnew(void *content) +** { +** t_list *lst; +** +** if (!(lst = (t_list *)malloc(sizeof(*lst)))) +** return (NULL); +** if (!content) +** lst->content = NULL; +** else +** lst->content = content; +** lst->next = NULL; +** return (lst); +** } +** +** void ft_lstadd_back(t_list **alst, t_list *new) +** { +** t_list *tmp; +** +** if (alst) +** { +** tmp = *alst; +** if (!tmp) +** *alst = new; +** else +** { +** while (tmp->next) +** tmp = tmp->next; +** tmp->next = new; +** } +** new->next = NULL; +** } +** } +** +** void ft_delete(void *element) +** { +** *(char*)element = '\0'; +** } +** +** void ft_lstdelone(t_list *lst, void (*del)(void *)); +** +** int main(void) +** { +** t_list *toto; +** void (ft_delete)(void*); +** +** toto = ft_lstnew("a"); +** toto->next = ft_lstnew("b"); +** toto->next->next = ft_lstnew("c"); +** printf("toto->data :%c\n",*(char*)(toto->content)); +** printf("toto->nxt->data :%c\n",*(char*)(toto->next->content)); +** printf("toto->nxt->nxt->data:%c\n",*(char*)(toto->next->next->content)); +** printf("toto->nxt->nxt->nxt :%s\n",(char*)(toto->next->next->next)); +** ft_lstdelone(toto->next, ft_delete); +** printf("----------------------\n"); +** printf("toto->data :%c\n",*(char*)(toto->content)); +** printf("toto->nxt->data :%c\n",*(char*)(toto->next->content)); +** printf("toto->nxt->nxt->data:%c\n",*(char*)(toto->next->next->content)); +** printf("toto->nxt->nxt->nxt :%s\n",(char*)(toto->next->next->next)); +** return (0); +** } +*/ + +#include "libft.h" + +void ft_lstdelone(t_list *lst, void (*del)(void *)) +{ + if (lst->content && del) + del(lst->content); + free(lst); + lst = NULL; +} diff --git a/libftt/srcs/ft_lstiter.c b/libftt/srcs/ft_lstiter.c new file mode 100644 index 0000000..ee67de6 --- /dev/null +++ b/libftt/srcs/ft_lstiter.c @@ -0,0 +1,85 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstiter.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2019/11/25 14:14:11 by hulamy #+# #+# */ +/* Updated: 2019/12/01 16:03:40 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +/* +** go through all elements of the list and apply the function f to each of them +*/ + +/* +** #include +** +** typedef struct s_list +** { +** void *content; +** struct s_list *next; +** } t_list; +** +** t_list *ft_lstnew(void *content) +** { +** t_list *lst; +** +** if (!(lst = (t_list *)malloc(sizeof(*lst)))) +** return (NULL); +** if (!content) +** lst->content = NULL; +** else +** lst->content = content; +** lst->next = NULL; +** return (lst); +** } +** +** void ft_lstiter(t_list *lst, void (*f)(void*)); +** +** void to_uppercase(void *element) +** { +** // *(char*)(((t_list*)element)->content) -= 32; +** // or : +** t_list *tmp; +** +** tmp = (t_list*)element; +** *(char*)(tmp->content) -= 32; +** } +** +** int main(void) +** { +** t_list *toto; +** void to_uppercase(void*); +** +** toto = ft_lstnew("a"); +** toto->next = ft_lstnew("b"); +** toto->next->next = ft_lstnew("c"); +** printf("toto->data :%c\n",*(char*)(toto->content)); +** printf("toto->nxt->data :%c\n",*(char*)(toto->next->content)); +** printf("toto->nxt->nxt->data:%c\n",*(char*)(toto->next->next->content)); +** printf("toto->nxt->nxt->nxt :%s\n",(char*)(toto->next->next->next)); +** printf("---------------------------\n"); +** ft_lstiter(toto, to_uppercase); +** printf("toto->data :%c\n",*(char*)(toto->content)); +** printf("toto->nxt->data :%c\n",*(char*)(toto->next->content)); +** printf("toto->nxt->nxt->data:%c\n",*(char*)(toto->next->next->content)); +** printf("toto->nxt->nxt->nxt :%s\n",(char*)(toto->next->next->next)); +** return (0); +** } +*/ + +#include "libft.h" + +void ft_lstiter(t_list *lst, void (*f)(void *)) +{ + if (!f) + return ; + while (lst) + { + f(lst->content); + lst = lst->next; + } +} diff --git a/libftt/srcs/ft_lstlast.c b/libftt/srcs/ft_lstlast.c new file mode 100644 index 0000000..e6173f2 --- /dev/null +++ b/libftt/srcs/ft_lstlast.c @@ -0,0 +1,100 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstlast.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2019/11/25 14:14:49 by hulamy #+# #+# */ +/* Updated: 2019/11/28 16:43:18 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +/* +** return a pointer to the last element of a list +*/ + +/* +** #include +** +** typedef struct s_list +** { +** void *content; +** struct s_list *next; +** } t_list; +** +** void *ft_memcpy(void *dst, const void *src, size_t n) +** { +** size_t i; +** char *ptr; +** char *ptr2; +** +** ptr = (char *)dst; +** ptr2 = (char *)src; +** i = -1; +** while (++i < n) +** ptr[i] = ptr2[i]; +** return (dst); +** } +** +** t_list *ft_lstnew(void *content) +** { +** t_list *lst; +** +** if (!(lst = (t_list *)malloc(sizeof(*lst)))) +** return (NULL); +** if (!content) +** lst->content = NULL; +** else +** { +** if (!(lst->content = malloc(sizeof(content)))) +** return (NULL); +** ft_memcpy(lst->content, content, sizeof(content)); +** } +** lst->next = NULL; +** return (lst); +** } +** +** void ft_lstadd_front(t_list **alst, t_list *new) +** { +** new->next = *alst; +** *alst = new; +** } +** +** t_list *ft_lstlast(t_list *lst); +** +** int main(void) +** { +** char tresor; +** t_list *toto; +** t_list *tmp; +** +** tresor = 'a'; +** toto = ft_lstnew(&tresor); +** tresor = 'b'; +** tmp = ft_lstnew(&tresor); +** ft_lstadd_front(&toto, tmp); +** tresor = 'c'; +** tmp = ft_lstnew(&tresor); +** ft_lstadd_front(&toto, tmp); +** printf("toto->data :%c\n",*(char*)(toto->content)); +** printf("toto->nxt->data :%c\n",*(char*)(toto->next->content)); +** printf("toto->nxt->nxt->data:%c\n",*(char*)(toto->next->next->content)); +** tmp = ft_lstlast(toto); +** printf("%c\n",*(char*)(tmp->content)); +** printf("toto->data :%c\n",*(char*)(toto->content)); +** printf("toto->nxt->data :%c\n",*(char*)(toto->next->content)); +** printf("toto->nxt->nxt->data:%c\n",*(char*)(toto->next->next->content)); +** return (0); +** } +*/ + +#include "libft.h" + +t_list *ft_lstlast(t_list *lst) +{ + if (lst) + while (lst->next) + lst = lst->next; + return (lst); +} diff --git a/libftt/srcs/ft_lstmap.c b/libftt/srcs/ft_lstmap.c new file mode 100644 index 0000000..41e7a25 --- /dev/null +++ b/libftt/srcs/ft_lstmap.c @@ -0,0 +1,145 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstmap.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2019/11/25 14:15:42 by hulamy #+# #+# */ +/* Updated: 2019/12/01 16:02:13 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +/* +** iterate trhough linked list and apply to each element a function f +** if necessary the function del is used to delete an element +*/ + +/* +** #include +** #include +** #include +** +** typedef struct s_list +** { +** void *content; +** struct s_list *next; +** } t_list; +** +** t_list *ft_lstnew(void *content) +** { +** t_list *lst; +** +** if (!(lst = (t_list *)malloc(sizeof(*lst)))) +** return (NULL); +** if (!content) +** lst->content = NULL; +** else +** lst->content = content; +** lst->next = NULL; +** return (lst); +** } +** +** void ft_lstadd_back(t_list **alst, t_list *new) +** { +** t_list *tmp; +** +** if (alst) +** { +** tmp = *alst; +** if (!tmp) +** *alst = new; +** else +** { +** while (tmp->next) +** tmp = tmp->next; +** tmp->next = new; +** } +** new->next = NULL; +** } +** } +** +** char *ft_strdup(const char *src) +** { +** int i; +** char *str; +** +** i = 0; +** while (src[i] != '\0') +** i++; +** if (!(str = (char*)malloc(sizeof(*str) * (i + 1)))) +** return (NULL); +** while (i-- >= 0) +** str[i + 1] = src[i + 1]; +** return (str); +** } +** +** void *to_uppercase(void *element) +** { +** char *i; +** +** if (!(i = ft_strdup((char*)element))) +** return (NULL); +** *i -= 32; +** return ((void *)i); +** } +** +** void ft_delete(void *element) +** { +** *(char*)element = '\0'; +** } +** +** t_list *ft_lstmap(t_list *lst, void *(*f)(void *), void (*del)(void *)); +** +** int main(void) +** { +** t_list *toto; +** void *(to_uppercase)(void *); +** void (ft_delete)(void*); +** +** toto = ft_lstnew("aa"); +** toto->next = ft_lstnew("b"); +** toto->next->next = ft_lstnew("c"); +** printf("toto->data :%s\n",(char*)(toto->content)); +** printf("toto->nxt->data :%s\n",(char*)(toto->next->content)); +** printf("toto->nxt->nxt->data:%s\n",(char*)(toto->next->next->content)); +** printf("toto->nxt->nxt->nxt :%s\n",(char*)(toto->next->next->next)); +** toto = ft_lstmap(toto, to_uppercase, ft_delete); +** printf("----------------------\n"); +** printf("toto->data :%s\n",(char*)(toto->content)); +** printf("toto->nxt->data :%s\n",(char*)(toto->next->content)); +** printf("toto->nxt->nxt->data:%s\n",(char*)(toto->next->next->content)); +** printf("toto->nxt->nxt->nxt :%s\n",(char*)(toto->next->next->next)); +** return (0); +** } +*/ + +#include "libft.h" + +t_list *ft_lstmap(t_list *lst, void *(*f)(void *), void (*del)(void *)) +{ + t_list *new; + t_list *tmp; + + if (!lst) + return (NULL); + if (!(tmp = ft_lstnew(f(lst->content)))) + { + del(tmp->content); + free(tmp); + return (NULL); + } + new = tmp; + while (lst->next) + { + lst = lst->next; + if (!(tmp->next = ft_lstnew(f(lst->content)))) + { + del(tmp->next->content); + free(tmp->next); + return (NULL); + } + tmp = tmp->next; + } + return (new); +} diff --git a/libftt/srcs/ft_lstnew.c b/libftt/srcs/ft_lstnew.c new file mode 100644 index 0000000..401f6c9 --- /dev/null +++ b/libftt/srcs/ft_lstnew.c @@ -0,0 +1,59 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstnew.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2019/11/25 14:16:20 by hulamy #+# #+# */ +/* Updated: 2019/11/25 14:29:46 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +/* +** create a new list +*/ + +/* +** #include +** +** typedef struct s_list +** { +** void *content; +** struct s_list *next; +** } t_list; +** +** t_list *ft_lstnew(void *content); +** +** int main(void) +** { +** char tresor; +** t_list *toto; +** +** tresor = 'd'; +** printf("tresor : %c\n",tresor); +** toto = ft_lstnew(&tresor); +** //toto->content was alocated as void* so it need cast +** printf("toto->content : %c\n",*(char*)(toto->content)); +** tresor = 'D'; +** printf("transform tresor : %c\n",tresor); +** printf("and also toto->content: %c\n",*(char*)(toto->content)); +** return (0); +** } +*/ + +#include "libft.h" + +t_list *ft_lstnew(void *content) +{ + t_list *lst; + + if (!(lst = (t_list *)malloc(sizeof(*lst)))) + return (NULL); + if (!content) + lst->content = NULL; + else + lst->content = content; + lst->next = NULL; + return (lst); +} diff --git a/libftt/srcs/ft_lstsize.c b/libftt/srcs/ft_lstsize.c new file mode 100644 index 0000000..5ff5f2d --- /dev/null +++ b/libftt/srcs/ft_lstsize.c @@ -0,0 +1,86 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_lstsize.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2019/11/25 14:31:48 by hulamy #+# #+# */ +/* Updated: 2019/11/25 16:06:41 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +/* +** return the size of the linked list +*/ + +/* +** #include +** +** typedef struct s_list +** { +** void *content; +** struct s_list *next; +** } t_list; +** +** t_list *ft_lstnew(void *content) +** { +** t_list *lst; +** +** if (!(lst = (t_list *)malloc(sizeof(*lst)))) +** return (NULL); +** if (!content) +** lst->content = NULL; +** else +** lst->content = content; +** lst->next = NULL; +** return (lst); +** } +** +** void ft_lstadd_front(t_list **alst, t_list *new) +** { +** new->next = *alst; +** *alst = new; +** } +** +** int ft_lstsize(t_list *lst); +** +** int main(void) +** { +** char tresor; +** t_list *toto; +** t_list *tmp; +** +** tresor = 'a'; +** toto = ft_lstnew(&tresor); +** tresor = 'b'; +** tmp = ft_lstnew(&tresor); +** ft_lstadd_front(&toto, tmp); +** tresor = 'c'; +** tmp = ft_lstnew(&tresor); +** ft_lstadd_front(&toto, tmp); +** printf("toto->data :%c\n",*(char*)(toto->content)); +** printf("toto->nxt->data :%c\n",*(char*)(toto->next->content)); +** printf("toto->nxt->nxt->dqta:%c\n",*(char*)(toto->next->next->content)); +** printf("%i\n",ft_lstsize(toto)); +** printf("toto->data :%c\n",*(char*)(toto->content)); +** printf("toto->nxt->data :%c\n",*(char*)(toto->next->content)); +** printf("toto->nxt->nxt->dqta:%c\n",*(char*)(toto->next->next->content)); +** return (0); +** } +*/ + +#include "libft.h" + +int ft_lstsize(t_list *lst) +{ + int size; + + size = 0; + while (lst) + { + size++; + lst = lst->next; + } + return (size); +} diff --git a/libftt/srcs/ft_memalloc.c b/libftt/srcs/ft_memalloc.c new file mode 100644 index 0000000..072e7f1 --- /dev/null +++ b/libftt/srcs/ft_memalloc.c @@ -0,0 +1,27 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_memalloc.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2019/11/19 15:21:44 by hulamy #+# #+# */ +/* Updated: 2019/11/19 15:23:17 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +/* +** allocate size byte of memory and return a pointer to the allocated memory +*/ + +#include "libft.h" + +void *ft_memalloc(size_t size) +{ + void *tmp; + + if (!size || !(tmp = malloc(size))) + return (NULL); + ft_bzero(tmp, size); + return (tmp); +} diff --git a/libftt/srcs/ft_memccpy.c b/libftt/srcs/ft_memccpy.c new file mode 100644 index 0000000..fee3c2f --- /dev/null +++ b/libftt/srcs/ft_memccpy.c @@ -0,0 +1,36 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_memccpy.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2019/11/25 15:24:51 by hulamy #+# #+# */ +/* Updated: 2019/11/25 15:25:09 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +/* +** copy string until character is found and place cursor in dst +** after last byte copied +*/ + +#include "libft.h" + +void *ft_memccpy(void *dst, const void *src, int c, size_t n) +{ + unsigned char *dest; + unsigned char *sourc; + size_t i; + + i = -1; + dest = (unsigned char *)dst; + sourc = (unsigned char *)src; + while (++i < n) + { + dest[i] = sourc[i]; + if (sourc[i] == (unsigned char)c) + return (dst + i + 1); + } + return (NULL); +} diff --git a/libftt/srcs/ft_memchr.c b/libftt/srcs/ft_memchr.c new file mode 100644 index 0000000..6a1c359 --- /dev/null +++ b/libftt/srcs/ft_memchr.c @@ -0,0 +1,51 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_memchr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2019/11/25 13:55:51 by hulamy #+# #+# */ +/* Updated: 2019/12/12 21:50:32 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +/* +** locate character in string and return its position +*/ + +/* +** #include +** +** void *ft_memchr(const void *s, int c, size_t n); +** +** int main(void) +** { +** const char *str; +** +** char *pouet = "z"; +** char *lolzer = (char *)&pouet[2]; +** lolzer = "aaaaaaaaaa"; +** str = ft_memchr(pouet, 'a', 50); +** if (!str) +** printf("NULL"); +** else +** printf("%s\n", str); +** return (0); +** } +*/ + +#include "libft.h" + +void *ft_memchr(const void *s, int c, size_t n) +{ + unsigned char *sbis; + size_t i; + + sbis = (unsigned char *)s; + i = -1; + while (++i < n) + if (sbis[i] == (unsigned char)c) + return ((void *)sbis + i); + return (NULL); +} diff --git a/libftt/srcs/ft_memcmp.c b/libftt/srcs/ft_memcmp.c new file mode 100644 index 0000000..c05a028 --- /dev/null +++ b/libftt/srcs/ft_memcmp.c @@ -0,0 +1,32 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_memcmp.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2019/11/25 13:56:05 by hulamy #+# #+# */ +/* Updated: 2019/11/25 13:56:07 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +/* +** compare two bytes strings (doesnt recognize a null terminated string) +** and return value of difference between first two different character +*/ + +#include "libft.h" + +int ft_memcmp(const void *s1, const void *s2, size_t n) +{ + unsigned char *frst; + unsigned char *scnd; + size_t i; + + i = 0; + frst = (unsigned char *)s1; + scnd = (unsigned char *)s2; + while (i < n && frst[i] == scnd[i]) + i++; + return ((i == n) ? 0 : frst[i] - scnd[i]); +} diff --git a/libftt/srcs/ft_memcpy.c b/libftt/srcs/ft_memcpy.c new file mode 100644 index 0000000..b9f0b38 --- /dev/null +++ b/libftt/srcs/ft_memcpy.c @@ -0,0 +1,46 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_memcpy.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2019/11/25 13:56:16 by hulamy #+# #+# */ +/* Updated: 2019/12/01 14:54:14 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +/* +** copy n characters from src to dst and return dst +*/ + +/* +** #include +** +** void *ft_memcpy(void *dst, const void *src, size_t n); +** +** int main(int ac, char **av) +** { +** if (ac == 4) +** printf("%s\n", ft_memcpy(av[1], av[2], atoi(av[3]))); +** return (0); +** } +*/ + +#include "libft.h" + +void *ft_memcpy(void *dst, const void *src, size_t n) +{ + int i; + char *ptr; + char *ptr2; + + i = -1; + ptr = (char *)dst; + ptr2 = (char *)src; + if (dst == src) + return (dst); + while (++i < (int)n) + ptr[i] = ptr2[i]; + return (dst); +} diff --git a/libftt/srcs/ft_memdel.c b/libftt/srcs/ft_memdel.c new file mode 100644 index 0000000..f057043 --- /dev/null +++ b/libftt/srcs/ft_memdel.c @@ -0,0 +1,26 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_memdel.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2018/11/14 21:13:26 by hulamy #+# #+# */ +/* Updated: 2019/04/03 15:44:12 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +/* +** free memory +*/ + +#include "libft.h" + +void ft_memdel(void **ap) +{ + if (ap && *ap) + { + free(*ap); + *ap = 0; + } +} diff --git a/libftt/srcs/ft_memmove.c b/libftt/srcs/ft_memmove.c new file mode 100644 index 0000000..d005136 --- /dev/null +++ b/libftt/srcs/ft_memmove.c @@ -0,0 +1,68 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_memmove.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2019/11/25 13:56:25 by hulamy #+# #+# */ +/* Updated: 2019/12/10 23:53:40 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +/* +** copy n characters from src to dst in a non destructive way and return dst +*/ + +/* +** #include +** +** size_t ft_strlen(const char *str) +** { +** size_t i; +** +** i = 0; +** while (str[i]) +** i++; +** return (i); +** } +** +** void *ft_memmove(void *dst, const void *src, size_t len); +** +** //int main(int ac, char **av) +** int main(void) +** { +** char *src = "this is a good nyancat !\r\n"; +** char dst[0xF0]; +** int size = strlen(src); +** +** // if (ac == 4) +** // printf("%s\n", ft_memmove(av[1], av[2], atoi(av[3]))); +** +** ft_memmove(dst, src, size); +** printf("%s", dst); +** return (0); +** } +*/ + +#include "libft.h" + +void *ft_memmove(void *dst, const void *src, size_t len) +{ + size_t i; + char *cpsrc; + char *cpdst; + + i = -1; + cpsrc = (char *)src; + cpdst = (char *)dst; + if (dst == src) + return (dst); + if (cpsrc < cpdst) + while (len--) + cpdst[len] = cpsrc[len]; + else + while (++i < len) + cpdst[i] = cpsrc[i]; + return (dst); +} diff --git a/libftt/srcs/ft_memset.c b/libftt/srcs/ft_memset.c new file mode 100644 index 0000000..10c2d7c --- /dev/null +++ b/libftt/srcs/ft_memset.c @@ -0,0 +1,29 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_memset.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2019/11/25 13:56:37 by hulamy #+# #+# */ +/* Updated: 2019/11/25 13:56:38 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +/* +** copy n time a character in a string and return the string +*/ + +#include "libft.h" + +void *ft_memset(void *b, int c, size_t len) +{ + char *ptr; + size_t i; + + ptr = (char *)b; + i = 0; + while (i < len) + ptr[i++] = c; + return (b); +} diff --git a/libftt/srcs/ft_printf_files/ft_convert.c b/libftt/srcs/ft_printf_files/ft_convert.c new file mode 100644 index 0000000..644a270 --- /dev/null +++ b/libftt/srcs/ft_printf_files/ft_convert.c @@ -0,0 +1,105 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_convert.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2020/03/12 22:30:05 by hulamy #+# #+# */ +/* Updated: 2020/06/30 00:40:49 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +/* +** -convert the next argument into a string according to the following +** correspondances for diuxXcspefgn : +** [char] [hhd, hhi, c] [int] [d i c] +** [short] [hd, hi] [int] +** [int] [d, i] [int] +** [long] [ld, li] [long] [ld li] +** [long long] [lld, lli] [long] +** [unsigned char] [hhu, hhx, hhX] [unsigned int] [u x X p s] +** [unsigned short] [hu, hx, hX] [unsigned int] +** [unsigned int] [u, x, X, p] [unsigned int] +** [unsigned long] [lu, lx, lX] [unsigned long] [lu lx lX] +** [unsigned long long][llu, llx, llX] [unsigned long] +** [char *] [s, hhn] +** [double] [e, le, f, lf, g, lg] +** [wint_t] [lc] +** [wchar_t] [ls] +** [short *] [hn] +** [int *] [n] +** [long *] [ln] +** [long long *] [lln] +** -'h' and 'hh', are traited just like regular size because of +** default promotion, that promote smaller type than int into int +*/ + +char *conv_i(char c, long int i) +{ + char *s; + + if (c == 'c') + { + s = ft_strdup("0"); + s[0] = i; + return (s); + } + if (c == 'd' || c == 'i') + return (ft_itoa(i)); + return (NULL); +} + +char *conv_u(char c, unsigned long int i) +{ + char *s; + + if (c == 's') + return (i == 0 ? ft_strdup("(null)") : ft_strdup((char *)i)); + s = ft_utoa(i); + if (c == 'u') + return (s); + if (c == 'x' || c == 'p') + return (ft_convertbase_free(s, "0123456789", "0123456789abcdef")); + if (c == 'X') + return (ft_convertbase_free(s, "0123456789", "0123456789ABCDEF")); + return (NULL); +} + +/* +** -first a loop to expand all the stars from width and .precision +** they always expand into int type +** it's done first because those are the first next args on the va_list +** -for each kind of specifier there is finally four kinds of conversion : +** int / long int / unsigned int / unsingned long int +** -the conversion 'uxX' associated with 'l' are converted with lu, but +** also are 'p' and 's', without an 'l' flag, that's why there is this little +** trick on line the line for unsigned int : +** -'uxXps' && 'lps' will make it looks for 'uxX' and for 'l' +** (because it will never find a 'p' or a 's' if there are 'uxX' already) +** or for 'p' and again for 'p', or 's' twice similarly +*/ + +char *ft_convert(va_list ap, char *type, char **s) +{ + char *tmp; + + while (ft_strchr(*s, '*')) + if (!(ft_expand_star(va_arg(ap, int), s))) + return (NULL); + if ((tmp = ft_strchrset(type, "dic")) && ft_strchr(type, 'l')) + return (conv_i(tmp[0], va_arg(ap, long int))); + if ((tmp = ft_strchrset(type, "dic"))) + return (conv_i(tmp[0], va_arg(ap, int))); + if ((tmp = ft_strchrset(type, "uxXps")) && ft_strchrset(type, "lps")) + return (conv_u(tmp[0], va_arg(ap, unsigned long int))); + if ((tmp = ft_strchrset(type, "uxX"))) + return (conv_u(tmp[0], va_arg(ap, unsigned int))); + if (ft_strchr(type, '%')) + return (ft_strdup("%")); + if (ft_strchrset(type, "efgn")) + return (NULL); + return (NULL); +} diff --git a/libftt/srcs/ft_printf_files/ft_flag_transform.c b/libftt/srcs/ft_printf_files/ft_flag_transform.c new file mode 100644 index 0000000..21a06fc --- /dev/null +++ b/libftt/srcs/ft_printf_files/ft_flag_transform.c @@ -0,0 +1,199 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_flag_transform.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2020/03/12 22:30:28 by hulamy #+# #+# */ +/* Updated: 2020/03/12 22:30:41 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +/* +** -function that modify the string 'print' according to the precision flag : +** if length(s) < precision, add x '0' bfr nbr, but after '-' if negative +*/ + +char *precision_int(char *print, int precision) +{ + int i; + char *tmp; + + i = ft_strlen(print); + if (print[0] == '-') + precision++; + if (precision > i) + { + if (!(tmp = (char *)malloc(sizeof(char) * (precision + 1)))) + return (NULL); + tmp[precision] = '\0'; + if (print[0] == '-') + tmp[0] = '-'; + while (i) + tmp[--precision] = print[--i]; + if (print[0] == '-') + precision++; + while (precision) + tmp[--precision] = '0'; + if (print[0] == '-') + tmp[0] = '-'; + free(print); + print = tmp; + } + return (print); +} + +/* +** -it first verify if there is a precision point, and if so, it execute a +** serie of action listed below, otherwise return print as it is +** ACTIONS : +** -look for a '.' +** -if followed by numbers, extract an int version of those numbers +** -if the '.' is alone, gives value '0' to the int +** -then removes the '.' and the numbers from the %string +** -if flag '0' is present in %string, removes it (actually turn each occurence +** in a '.') +** -and transform 'print' according to the precision : +** -0 if .precision is 0 && print is "0": print nothing +** -1 if type is s: if length(s) > precision, removes end of 'print' to print +** only x chars, with x = precision +** -2 if type is "diouxX": call fonction 'precision_int' that return : +** if length(s) < precision, add x '0' bfr nbr, but after '-' if negative +** -3 if type is "aAeEfF": not covered +** -4 if type is "gG": not covered +** -5 else: error +*/ + +char *ft_precision(char *s, char *print, char *type) +{ + char *tmp; + int precision; + int i; + + if ((tmp = ft_strchr(s, '.'))) + { + precision = ft_atoi(tmp + 1); + while (*s && ft_strchr("#- +'0", *(++s))) + if (*s == '0') + *s = '/'; + i = 0; + if (precision == 0 && !ft_strcmp(print, "0")) + print[0] = '\0'; + else if (ft_strchr(type, 's')) + { + while (i < precision && print[i]) + i++; + if (print[i]) + print[i] = '\0'; + } + else if (ft_strchrset(type, "diouxX")) + print = precision_int(print, precision); + } + return (print); +} + +/* +** -if flag '-' is present, put extra width as ' ' to right of 'print' +** -if flag '0' is present, put extra width as '0' to left of 'print' +** -else, put extra width as ' ' to left of 'print' +*/ + +char *width_flags(char *print, char *s, int width, int zero) +{ + char *tmp; + char *minus; + int len; + + len = ft_strlen(print) + zero; + if (!(tmp = ft_strnew(width))) + return (NULL); + if (ft_strchr(s, '-')) + { + ft_memmove(tmp, print, len); + ft_memset(tmp + len, ' ', width - len); + } + else + { + ft_memset(tmp, (ft_strchr(s, '0')) ? '0' : ' ', width - len); + ft_memmove(ft_strchr(tmp, '\0') + zero, print, ft_strlen(print)); + if (ft_strchr(s, '0') && (minus = ft_strchrset("+-", tmp))) + { + tmp[0] = (minus[0] == '+') ? '+' : '-'; + minus[0] = '0'; + } + } + free(print); + return (tmp); +} + +/* +** -if there is a minimal width field, calculate it and add it to print +** according to the flags '-' and '0' if present +** -in details : +** 0 if print[0] value 0, as it happens for type c with (char)0, save it for +** later in 'zero' +** 1 loop through s, the string starting by '%' and ending by a converter, +** until it has passed all the flags that are not a potentiel width field +** 2 then if it's the end of s, there is no width and print isn't changed, +** otherwise the int 'size' take the value returned by atoi +** in case print isn't changed, 'size' is the length of 'print' +** 3 then if the size of the width shield is bigger than the size of print +** (plus zero in case print is a (char)0), call 'width_flags' that will +** create a new char* to contain the string to print after transformation +** 4 otherwise 'size' is the length of print + zero +*/ + +char *ft_width(char *s, char *print, int *size, char *type) +{ + char *tmp; + int zero; + + tmp = s; + zero = 0; + if (print[0] == '\0' && ft_strchr(type, 'c')) + zero = 1; + while (*tmp != '\0' && ft_strchr("%#- +'0/", *tmp)) + tmp++; + if (*tmp == '\0' || *tmp == '.') + { + *size = ft_strlen(print) + zero; + return (print); + } + *size = ft_atoi(tmp); + tmp[0] = '\0'; + if ((unsigned int)*size > ft_strlen(print) + zero) + print = width_flags(print, s, *size, zero); + else + *size = ft_strlen(print) + zero; + tmp[0] = '1'; + return (print); +} + +/* +** -go through all the transformation flags needs +** -first the precision +** -then if type is int and nbr is positive, add a + to the left, it's flag '+' +** -third the flag "#" +** -fourth, the width +** -then p +** -the case of 'p' is treated without any subtelness because i don't care +*/ + +char *ft_flag_transform(char *s, char *print, char *type, int *size) +{ + print = ft_precision(s, print, type); + print = ft_plus(s, print, type); + print = ft_sharp(s, print, type); + if (ft_strchr(type, 'p')) + { + print = ft_concat_free(ft_strdup("0x"), print); + *size += 2; + } + print = ft_width(s, print, size, type); + print = ft_sharp_again(s, print, type); + print = ft_space(s, print, type, size); + return (print); +} diff --git a/libftt/srcs/ft_printf_files/ft_flag_transform_bonus.c b/libftt/srcs/ft_printf_files/ft_flag_transform_bonus.c new file mode 100644 index 0000000..f6d773a --- /dev/null +++ b/libftt/srcs/ft_printf_files/ft_flag_transform_bonus.c @@ -0,0 +1,75 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_flag_transform_bonus.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2020/03/12 22:30:50 by hulamy #+# #+# */ +/* Updated: 2020/03/12 22:30:57 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +char *ft_plus(char *s, char *print, char *type) +{ + if (!ft_strchrset(type, "di")) + return (print); + if (ft_strchr(s, '+') && !ft_strchr(print, '-')) + print = ft_concat_free(ft_strdup("+"), print); + return (print); +} + +char *ft_sharp(char *s, char *print, char *type) +{ + if (ft_strchr(s, '#')) + { + if (ft_strchr(type, 'x')) + print = ft_concat_free(ft_strdup("0x"), print); + else + print = ft_concat_free(ft_strdup("0X"), print); + } + return (print); +} + +char *ft_sharp_again(char *s, char *print, char *type) +{ + char *tmp; + + if (!ft_strchr(s, '#')) + return (print); + if (print[0] == '0' && print[1] == '0' && ft_strchrset(type, "xX")) + { + tmp = ft_strchrset("xX", print); + print[1] = tmp[0]; + tmp[0] = '0'; + } + return (print); +} + +char *ft_space(char *s, char *print, char *type, int *size) +{ + int i; + + i = 0; + if (print[0] == ' ' || !ft_strchr(s, ' ') || !ft_strchrset(type, "diuxX")) + return (print); + while (print[i] == ' ') + i++; + if (print[i] == '-' || print[i] == '+') + return (print); + if (ft_strchr(s, '.') || (i == 0 && print[i] != '0')) + { + print = ft_concat_free(ft_strdup(" "), print); + *size += 1; + } + else + print[i] = ' '; + if (ft_strchr(s, '-') && print[*size - 1] == ' ') + { + print[*size] = '\0'; + *size -= 1; + } + return (print); +} diff --git a/libftt/srcs/ft_printf_files/ft_next_word.c b/libftt/srcs/ft_printf_files/ft_next_word.c new file mode 100644 index 0000000..6980aac --- /dev/null +++ b/libftt/srcs/ft_printf_files/ft_next_word.c @@ -0,0 +1,98 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* next_word.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2020/02/10 13:58:30 by hulamy #+# #+# */ +/* Updated: 2020/02/26 18:24:04 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +/* +** -placed outside of "word_length" for lake of space +** -check if there is a '*' or a number +** -usefull as such for the 'width', and after a check +** for a '.' for the 'precision' flag +*/ + +int width_precision(char *s) +{ + int i; + + i = 0; + if (ft_strchr("*", s[i]) != NULL) + i++; + while (ft_strchr("0123456789", s[i]) != NULL) + i++; + return (i); +} + +/* +** -return the length of the next word to print +** -for that it got through the characters expecting +** in the following order : +** [%][flags][width][.precision][length][specifier] +** knowing that 'flags' can repeat themselves +** -a single '%' is treated as a word of length 1 +** (unlike the real printf) +** -it's written : +** i += width_precision(s + i + 1) + 1; +** instead of : +** i++; +** i += width_precision(s + i); +** to save a line (3 with the brackets) +*/ + +int word_length(char *s) +{ + int i; + + i = 1; + if (s[0] == '\0') + return (0); + if (s[0] != '%') + { + while (s[i] != '%' && s[i] != '\0') + i++; + return (i); + } + while (ft_strchr("#0- +'", s[i]) != NULL) + i++; + i += width_precision(s + i); + if (ft_strchr(".", s[i]) != NULL) + i += width_precision(s + i + 1) + 1; + while (ft_strchr("hl", s[i]) != NULL) + i++; + if (ft_strchr("diuxXcspefgn%", s[i]) != NULL) + i++; + return (i); +} + +/* +** -return the next sequence to be print +** (either a string, or a conversion) +** -a single '%' is an error in real printf +** but is treated as a '%' here +*/ + +char *next_word(char **string) +{ + char *s; + char *word; + int i; + + s = *string; + if (*s == '\0') + return (NULL); + if ((i = word_length(s)) < 0) + return (NULL); + word = (char *)malloc(sizeof(char) * (i + 1)); + word[i] = '\0'; + ft_memmove(word, s, i); + *string += i; + return (word); +} diff --git a/libftt/srcs/ft_printf_files/ft_printf.c b/libftt/srcs/ft_printf_files/ft_printf.c new file mode 100644 index 0000000..d96f663 --- /dev/null +++ b/libftt/srcs/ft_printf_files/ft_printf.c @@ -0,0 +1,162 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_printf.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2020/03/12 22:31:29 by hulamy #+# #+# */ +/* Updated: 2020/06/30 00:41:35 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +/* +** SPECIFIER : +** receive a word as a string, check if it start by '%', and return the +** specifier (diuxXspefgn) and the length (h hh l ll) +** -if s is a string, or is a single '%' +** return NULL (to print is as a string) +** -if s is a double '%%', remove one '%', and +** return NULL (to print is as a string) +** -then s is a conversion, go to the length and specifier +** -copy them in 'string' +** -and remove them from s +** -return the length and specifier in a string +*/ + +char *specifier(char *s) +{ + char *string; + int i; + + if (s[0] != '%' || s[1] == '\0') + return (NULL); + if (s[1] == '%') + { + s[1] = '\0'; + return (NULL); + } + i = 1; + while (ft_strchr("#0- +'0123456789.*", s[i]) != NULL) + i++; + string = ft_strdup(s + i); + while (s[i] != '\0') + { + s[i] = '\0'; + i++; + } + return (string); +} + +/* +** -receive 'i' the number in which '*' will expand +** -turn it into a string +** -calculate the total lentgh of the string '%...' for nbr replacing '*' +** -allocate a new string with this length +** -copy the original str with first '*' expanded into it's corresponding nbr +*/ + +int ft_expand_star(int nbr, char **string) +{ + char *s; + char *n; + int i; + int j; + int k; + + n = ft_itoa(nbr); + if (!(s = ft_memalloc(sizeof(char) * (ft_strlen(n) + ft_strlen(*string))))) + return (0); + i = -1; + j = 0; + k = 0; + while ((*string)[++i] != '\0') + { + s[j] = (*string)[i]; + if (s[j] == '*') + while (n[k] != '\0') + s[j++] = n[k++]; + else + j++; + } + free(n); + free(*string); + *string = s; + return (1); +} + +/* +** print the string +** because of lake of space, it also free 'type' +*/ + +int ft_put_word(char *s, char *type, int size) +{ + int i; + + i = 0; + while (i < size) + write(1, &(s[i++]), 1); + free(type); + free(s); + return (i); +} + +/* +** because of lake of space... +** -1 expand the specifier according to its type and its length +** and put in a string 'print' +** -2 transform 'print' according to the flags +*/ + +char *convert_with_flags(char *s, va_list ap, char *type, int *size) +{ + char *print; + + if (!(print = ft_convert(ap, type, &s))) + return (NULL); + if (!(print = ft_flag_transform(s, print, type, size))) + return (NULL); + free(s); + return (print); +} + +/* +** -printf receive a string to print with a variadic number of arguments +** -it will go in a loop through each 'words' +** -a word is either a string containing no '%' or a conversion starting by '%' +** -if it's a string it's printed right away +** -if it's a conversion it will call convert_with_flags for some actions : +** -1 expand the specifier according to its type and its length +** and put in a string 'print' +** -2 transform 'print' according to the flags +*/ + +int ft_printf(char *string, ...) +{ + char *s; + char *type; + int length; + int size; + va_list ap; + + length = 0; + va_start(ap, string); + while ((s = next_word(&string)) != NULL) + { + if ((type = specifier(s)) == NULL) + length += ft_put_word(s, type, ft_strlen(s)); + else + { + size = 0; + if (!(s = convert_with_flags(s, ap, type, &size))) + return (-1); + length += ft_put_word(s, type, size); + } + } + free(s); + va_end(ap); + return (length); +} diff --git a/libftt/srcs/ft_putchar.c b/libftt/srcs/ft_putchar.c new file mode 100644 index 0000000..b0aa9cb --- /dev/null +++ b/libftt/srcs/ft_putchar.c @@ -0,0 +1,18 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_putchar.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2018/11/14 21:14:00 by hulamy #+# #+# */ +/* Updated: 2018/11/14 21:14:01 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_putchar(char c) +{ + write(1, &c, 1); +} diff --git a/libftt/srcs/ft_putchar_fd.c b/libftt/srcs/ft_putchar_fd.c new file mode 100644 index 0000000..a48c1d5 --- /dev/null +++ b/libftt/srcs/ft_putchar_fd.c @@ -0,0 +1,18 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_putchar_fd.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2019/11/25 13:59:40 by hulamy #+# #+# */ +/* Updated: 2019/11/25 13:59:42 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_putchar_fd(char c, int fd) +{ + write(fd, &c, 1); +} diff --git a/libftt/srcs/ft_putendl.c b/libftt/srcs/ft_putendl.c new file mode 100644 index 0000000..c1d9a6a --- /dev/null +++ b/libftt/srcs/ft_putendl.c @@ -0,0 +1,19 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_putendl.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2018/11/14 21:14:32 by hulamy #+# #+# */ +/* Updated: 2018/11/14 21:14:33 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_putendl(char const *s) +{ + ft_putstr(s); + ft_putchar('\n'); +} diff --git a/libftt/srcs/ft_putendl_fd.c b/libftt/srcs/ft_putendl_fd.c new file mode 100644 index 0000000..5a0ef44 --- /dev/null +++ b/libftt/srcs/ft_putendl_fd.c @@ -0,0 +1,23 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_putendl_fd.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2019/11/25 13:59:47 by hulamy #+# #+# */ +/* Updated: 2019/11/25 13:59:48 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +/* +** write the string s on the given file descriptor fd, followed by a newline +*/ + +#include "libft.h" + +void ft_putendl_fd(char *s, int fd) +{ + ft_putstr_fd(s, fd); + ft_putchar_fd('\n', fd); +} diff --git a/libftt/srcs/ft_putnbr.c b/libftt/srcs/ft_putnbr.c new file mode 100644 index 0000000..bb8e2d7 --- /dev/null +++ b/libftt/srcs/ft_putnbr.c @@ -0,0 +1,18 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_putnbr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2018/11/14 21:14:57 by hulamy #+# #+# */ +/* Updated: 2018/11/14 21:14:58 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_putnbr(int n) +{ + ft_putnbr_fd(n, 1); +} diff --git a/libftt/srcs/ft_putnbr_fd.c b/libftt/srcs/ft_putnbr_fd.c new file mode 100644 index 0000000..afc9e85 --- /dev/null +++ b/libftt/srcs/ft_putnbr_fd.c @@ -0,0 +1,28 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_putnbr_fd.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2019/11/25 13:59:56 by hulamy #+# #+# */ +/* Updated: 2019/11/25 13:59:57 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_putnbr_fd(int n, int fd) +{ + long l; + + l = n; + if (l < 0) + { + ft_putchar_fd('-', fd); + l *= -1; + } + if (l >= 10) + ft_putnbr_fd(l / 10, fd); + ft_putchar_fd((l % 10) + '0', fd); +} diff --git a/libftt/srcs/ft_putnbrbase.c b/libftt/srcs/ft_putnbrbase.c new file mode 100644 index 0000000..bf0d627 --- /dev/null +++ b/libftt/srcs/ft_putnbrbase.c @@ -0,0 +1,59 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_putnbrbase.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2018/11/16 15:17:00 by hulamy #+# #+# */ +/* Updated: 2018/11/16 15:23:43 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +static int check(char *base) +{ + int i; + int j; + + i = 0; + while (base[i]) + { + j = i + 1; + while (base[j]) + { + if (base[i] == base[j]) + return (0); + j++; + } + if (base[i] == '-' || base[i] == '+') + return (0); + i++; + } + if (i >= 2) + return (1); + return (0); +} + +void ft_putnbrbase(int nbr, char *base) +{ + int i; + long n; + + i = 0; + n = nbr; + if (check(base)) + { + if (n < 0) + { + ft_putchar('-'); + n = -n; + } + while (base[i]) + i++; + if (n >= i) + ft_putnbrbase(n / i, base); + ft_putchar(base[n % i]); + } +} diff --git a/libftt/srcs/ft_putnbrendl.c b/libftt/srcs/ft_putnbrendl.c new file mode 100644 index 0000000..ddd05f6 --- /dev/null +++ b/libftt/srcs/ft_putnbrendl.c @@ -0,0 +1,18 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_putnbrendl.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2019/02/19 10:38:07 by hulamy #+# #+# */ +/* Updated: 2019/02/19 10:42:46 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_putnbrendl(int n) +{ + ft_putnbrendl_fd(n, 1); +} diff --git a/libftt/srcs/ft_putnbrendl_fd.c b/libftt/srcs/ft_putnbrendl_fd.c new file mode 100644 index 0000000..266dc55 --- /dev/null +++ b/libftt/srcs/ft_putnbrendl_fd.c @@ -0,0 +1,29 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_putnbrendl_fd.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2019/02/19 10:37:58 by hulamy #+# #+# */ +/* Updated: 2019/02/19 10:42:48 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_putnbrendl_fd(int n, int fd) +{ + long l; + + l = n; + if (l < 0) + { + ft_putchar_fd('-', fd); + l *= -1; + } + if (l >= 10) + ft_putnbr_fd(l / 10, fd); + ft_putchar_fd((l % 10) + '0', fd); + ft_putchar_fd('\n', fd); +} diff --git a/libftt/srcs/ft_putstr.c b/libftt/srcs/ft_putstr.c new file mode 100644 index 0000000..78617eb --- /dev/null +++ b/libftt/srcs/ft_putstr.c @@ -0,0 +1,22 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_putstr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2018/11/14 21:15:19 by hulamy #+# #+# */ +/* Updated: 2018/11/14 21:15:19 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +void ft_putstr(char const *s) +{ + int i; + + i = 0; + while (s && s[i]) + ft_putchar(s[i++]); +} diff --git a/libftt/srcs/ft_putstr_fd.c b/libftt/srcs/ft_putstr_fd.c new file mode 100644 index 0000000..cf6ad12 --- /dev/null +++ b/libftt/srcs/ft_putstr_fd.c @@ -0,0 +1,23 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_putstr_fd.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2019/11/25 14:00:04 by hulamy #+# #+# */ +/* Updated: 2019/11/25 14:00:05 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +/* +** write the string s on the given file descritor fd +*/ + +#include "libft.h" + +void ft_putstr_fd(char *s, int fd) +{ + while (s && *s) + ft_putchar_fd(*s++, fd); +} diff --git a/libftt/srcs/ft_sign.c b/libftt/srcs/ft_sign.c new file mode 100644 index 0000000..b665855 --- /dev/null +++ b/libftt/srcs/ft_sign.c @@ -0,0 +1,8 @@ +#include "libft.h" + +int ft_sign(int i) +{ + if (i < 0) + return (-1); + return (1); +} diff --git a/libftt/srcs/ft_smaller.c b/libftt/srcs/ft_smaller.c new file mode 100644 index 0000000..688f466 --- /dev/null +++ b/libftt/srcs/ft_smaller.c @@ -0,0 +1,8 @@ +#include "libft.h" + +int ft_smaller(int a, int b) +{ + if (a > b) + return (b); + return (a); +} diff --git a/libftt/srcs/ft_split.c b/libftt/srcs/ft_split.c new file mode 100644 index 0000000..4a27b9a --- /dev/null +++ b/libftt/srcs/ft_split.c @@ -0,0 +1,137 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_split.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2019/12/12 22:41:54 by hulamy #+# #+# */ +/* Updated: 2019/12/13 01:35:15 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +/* +** return an array of string with each word found in str, with c as separator +*/ + +/* +** #include +** #include +** #include +** +** size_t ft_strlen(const char *str) +** { +** size_t i; +** +** i = 0; +** while (str[i]) +** i++; +** return (i); +** } +** +** char *ft_substr(char const *s, unsigned int start, size_t len) +** { +** char *str; +** size_t i; +** +** if (!s) +** return (NULL); +** if (ft_strlen(s) < start) +** return (""); +** if (!(str = (char *)malloc(sizeof(char) * (len + 1)))) +** return (NULL); +** i = 0; +** while (i < len && s[start]) +** str[i++] = s[start++]; +** str[i] = '\0'; +** return (str); +** } +** +** char **ft_split(char const *s, char c); +** char **ft_strsplit(char const *s, char c); +** +** int main(void) +** { +** char **str; +** int i; +** +** char *s; +** char c; +** +** i = -1; +** s = NULL; +** c = ' '; +** str = ft_split(s, c); +** //if (str) +** //{ +** printf("s : '%s'\n", s); +** printf("*str : '%p'\n", str[0]); +** while (str[++i]) +** printf("str[%i] : '%s'\n", i, str[i]); +** //} +** return (0); +** } +*/ + +#include "libft.h" + +static int count(char const *s, char c) +{ + int i; + int words; + + i = -1; + words = 0; + while (s[++i] != '\0') + if (s[i] != c && ++words) + while (s[i + 1] != '\0' && s[i + 1] != c) + i++; + return (words); +} + +void *ft_free(char **array, int w) +{ + int i; + + i = 0; + while (array[i] != NULL && i < w) + free(array[i++]); + free(array); + return (NULL); +} + +char **empty_s(char **empty) +{ + if (!(empty = (char **)malloc(sizeof(char *) * 1))) + return (NULL); + empty[0] = NULL; + return (empty); +} + +char **ft_split(char const *s, char c) +{ + char **array; + int w; + int len; + + if (!s) + return (empty_s(NULL)); + if (!(array = (char **)malloc(sizeof(char *) * (count(s, c) + 1)))) + return (NULL); + w = 0; + while (*s != '\0') + { + len = 0; + if (*s != c) + { + while (s[len] != '\0' && s[len] != c) + len++; + if (!(array[w++] = ft_substr(s, 0, len))) + return (ft_free(array, w)); + s += len - 1; + } + s++; + } + array[w] = NULL; + return (array); +} diff --git a/libftt/srcs/ft_strcat.c b/libftt/srcs/ft_strcat.c new file mode 100644 index 0000000..d78543c --- /dev/null +++ b/libftt/srcs/ft_strcat.c @@ -0,0 +1,32 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strcat.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2018/11/14 21:15:40 by hulamy #+# #+# */ +/* Updated: 2019/03/25 15:12:58 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +/* +** append src to dest (dest must have sufficient space) and return dest +*/ + +#include "libft.h" + +char *ft_strcat(char *dest, const char *src) +{ + int i; + int j; + + i = 0; + j = 0; + while (dest[i]) + i++; + while (src[j]) + dest[i++] = src[j++]; + dest[i] = '\0'; + return (dest); +} diff --git a/libftt/srcs/ft_strchr.c b/libftt/srcs/ft_strchr.c new file mode 100644 index 0000000..b220565 --- /dev/null +++ b/libftt/srcs/ft_strchr.c @@ -0,0 +1,33 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strchr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2019/11/25 13:56:46 by hulamy #+# #+# */ +/* Updated: 2019/11/25 13:56:47 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +/* +** locate the first occurence of character c in string s +** and return pointer to its location +*/ + +#include "libft.h" + +char *ft_strchr(const char *s, int c) +{ + int i; + int j; + + i = 0; + j = -1; + while (s[i]) + i++; + while (++j < i + 1) + if (s[j] == c) + return ((char *)s + j); + return (NULL); +} diff --git a/libftt/srcs/ft_strchrset.c b/libftt/srcs/ft_strchrset.c new file mode 100644 index 0000000..103e857 --- /dev/null +++ b/libftt/srcs/ft_strchrset.c @@ -0,0 +1,32 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strchrset.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2020/02/16 15:07:11 by hulamy #+# #+# */ +/* Updated: 2020/03/10 15:24:14 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +/* +** if any character of the character set is found in s +** return a pointer to the first found, else return 0 +*/ + +#include "libft.h" + +char *ft_strchrset(const char *s, const char *set) +{ + int i; + + i = 0; + while (set[i] != '\0') + { + if (ft_strchr(s, set[i]) != NULL) + return ((char *)set + i); + i++; + } + return (NULL); +} diff --git a/libftt/srcs/ft_strclr.c b/libftt/srcs/ft_strclr.c new file mode 100644 index 0000000..5e3952c --- /dev/null +++ b/libftt/srcs/ft_strclr.c @@ -0,0 +1,23 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strclr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2018/11/14 21:15:58 by hulamy #+# #+# */ +/* Updated: 2019/03/25 15:17:42 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +/* +** fill string with zeros +*/ + +#include "libft.h" + +void ft_strclr(char *s) +{ + if (s) + ft_bzero(s, ft_strlen(s)); +} diff --git a/libftt/srcs/ft_strcmp.c b/libftt/srcs/ft_strcmp.c new file mode 100644 index 0000000..f6603c3 --- /dev/null +++ b/libftt/srcs/ft_strcmp.c @@ -0,0 +1,28 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strcmp.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2018/11/14 21:16:08 by hulamy #+# #+# */ +/* Updated: 2019/03/25 15:18:30 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +/* +** compare two null terminated strings and return value +** of difference between first two different character +*/ + +#include "libft.h" + +int ft_strcmp(const char *s1, const char *s2) +{ + int i; + + i = 0; + while (s1[i] && s1[i] == s2[i]) + i++; + return ((unsigned char)s1[i] - (unsigned char)s2[i]); +} diff --git a/libftt/srcs/ft_strcpy.c b/libftt/srcs/ft_strcpy.c new file mode 100644 index 0000000..7d2a45b --- /dev/null +++ b/libftt/srcs/ft_strcpy.c @@ -0,0 +1,28 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strcpy.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2018/11/14 21:16:17 by hulamy #+# #+# */ +/* Updated: 2019/03/25 15:19:19 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +/* +** copy string src to dst including '\0' and return dst +*/ + +#include "libft.h" + +char *ft_strcpy(char *dest, const char *src) +{ + int i; + + i = -1; + while (src[++i]) + dest[i] = src[i]; + dest[i] = '\0'; + return (dest); +} diff --git a/libftt/srcs/ft_strdel.c b/libftt/srcs/ft_strdel.c new file mode 100644 index 0000000..82cbc2e --- /dev/null +++ b/libftt/srcs/ft_strdel.c @@ -0,0 +1,26 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strdel.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2018/11/14 21:16:25 by hulamy #+# #+# */ +/* Updated: 2019/03/25 15:19:54 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +/* +** free memory +*/ + +#include "libft.h" + +void ft_strdel(char **as) +{ + if (as && *as) + { + free(*as); + *as = 0; + } +} diff --git a/libftt/srcs/ft_strdup.c b/libftt/srcs/ft_strdup.c new file mode 100644 index 0000000..b917ac9 --- /dev/null +++ b/libftt/srcs/ft_strdup.c @@ -0,0 +1,32 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strdup.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2019/11/25 13:56:54 by hulamy #+# #+# */ +/* Updated: 2019/11/25 13:56:55 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +/* +** save a copy of string src by allocating memory and return pointer to copy +*/ + +#include "libft.h" + +char *ft_strdup(const char *src) +{ + int i; + char *str; + + i = 0; + while (src[i] != '\0') + i++; + if (!(str = (char*)malloc(sizeof(*str) * (i + 1)))) + return (NULL); + while (i-- >= 0) + str[i + 1] = src[i + 1]; + return (str); +} diff --git a/libftt/srcs/ft_strequ.c b/libftt/srcs/ft_strequ.c new file mode 100644 index 0000000..fa4d4e4 --- /dev/null +++ b/libftt/srcs/ft_strequ.c @@ -0,0 +1,24 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strequ.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2018/11/14 21:16:44 by hulamy #+# #+# */ +/* Updated: 2019/03/25 15:21:02 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +/* +** return 0 if strings s1 and s2 are identical and 1 if not +*/ + +#include "libft.h" + +int ft_strequ(char const *s1, char const *s2) +{ + if (!s1 || !s2) + return (0); + return (ft_strcmp(s1, s2) == 0); +} diff --git a/libftt/srcs/ft_striter.c b/libftt/srcs/ft_striter.c new file mode 100644 index 0000000..9d3b21f --- /dev/null +++ b/libftt/srcs/ft_striter.c @@ -0,0 +1,23 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_striter.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2018/11/14 21:16:53 by hulamy #+# #+# */ +/* Updated: 2019/03/25 15:21:14 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +/* +** apply function f to each element of string s +*/ + +#include "libft.h" + +void ft_striter(char *s, void (*f)(char *)) +{ + while (s && *s && f) + f(s++); +} diff --git a/libftt/srcs/ft_striteri.c b/libftt/srcs/ft_striteri.c new file mode 100644 index 0000000..60fd7f6 --- /dev/null +++ b/libftt/srcs/ft_striteri.c @@ -0,0 +1,26 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_striteri.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2018/11/14 21:17:04 by hulamy #+# #+# */ +/* Updated: 2019/03/25 15:21:27 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +/* +** apply function f to each element of string s with index specified +*/ + +#include "libft.h" + +void ft_striteri(char *s, void (*f)(unsigned int, char *)) +{ + int i; + + i = 0; + while (s && *s && f) + f(i++, s++); +} diff --git a/libftt/srcs/ft_strjoin.c b/libftt/srcs/ft_strjoin.c new file mode 100644 index 0000000..0dfad46 --- /dev/null +++ b/libftt/srcs/ft_strjoin.c @@ -0,0 +1,79 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strjoin.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2019/11/25 14:01:26 by hulamy #+# #+# */ +/* Updated: 2019/12/09 21:38:35 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +/* +** create a new string by concatenating the two strings s1 and s2 +*/ + +/* +** #include +** +** size_t ft_strlen(const char *str) +** { +** size_t i; +** +** i = 0; +** while (str[i]) +** i++; +** return (i); +** } +** +** char *ft_strjoin(char const *s1, char const *s2); +** +** int main(int ac, char **av) +** { +** char *s1; +** char *s2; +** char *str; +** +** if (ac == 0) +** return (0); +** else if (ac == 3) +** { +** s1 = strdup(av[1]); +** s2 = strdup(av[2]); +** } +** else +** { +** s1 = malloc(sizeof(char*) * 100); +** s1 = "sdf"; +** s2 = "tref"; +** } +** str = ft_strjoin(s1, s2); +** printf("%s\n", str); +** return (0); +** } +*/ + +#include "libft.h" + +char *ft_strjoin(char const *s1, char const *s2) +{ + char *str; + int len; + int i; + + if (!s1 || !s2) + return (NULL); + len = ft_strlen(s1) + ft_strlen(s2); + if (!(str = (char *)malloc(sizeof(char) * (len + 1)))) + return (NULL); + len = 0; + i = 0; + while (s1[i] != '\0') + str[len++] = s1[i++]; + i = 0; + while (s2[i] != '\0') + str[len++] = s2[i++]; + str[len] = '\0'; + return (str); +} diff --git a/libftt/srcs/ft_strjoinfree.c b/libftt/srcs/ft_strjoinfree.c new file mode 100644 index 0000000..66c8b50 --- /dev/null +++ b/libftt/srcs/ft_strjoinfree.c @@ -0,0 +1,29 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strjoinfree.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2019/03/05 15:05:28 by hulamy #+# #+# */ +/* Updated: 2019/03/25 15:22:28 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +/* +** create a new string by concatenating the two strings s1 and s2 +** then free s1 and s2 +*/ + +#include "libft.h" + +char *ft_strjoinfree(char *s1, char *s2) +{ + char *str; + + if (!(str = ft_strjoin(s1, s2))) + return (NULL); + free(s1); + free(s2); + return (str); +} diff --git a/libftt/srcs/ft_strlcat.c b/libftt/srcs/ft_strlcat.c new file mode 100644 index 0000000..91d14d8 --- /dev/null +++ b/libftt/srcs/ft_strlcat.c @@ -0,0 +1,108 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strlcat.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2019/11/25 13:57:02 by hulamy #+# #+# */ +/* Updated: 2019/11/25 14:23:18 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +/* +** append src to sized dest and return size of final dest +*/ + +/* +** #include +** +** size_t ft_strlcat(char *dest, const char *src, size_t size); +** +** size_t ft_strlcat2(char *dest, char *src, size_t size); +** +** int ft_strlen(char *str) +** { +** int i; +** +** i = 0; +** while (str[i]) +** i++; +** return (i); +** } +** +** int main(int ac, char **av) +** { +** char tmp1[100]; +** char tmp2[100]; +** int i; +** +** i = atoi(av[3]); +** strcpy(tmp1, av[1]); +** strcpy(tmp2, av[2]); +** +** if (ac == 4) +** { +** printf("----strlcat: %zu - %s - %s\n", strlcat(tmp1, tmp2, i), +** tmp1, tmp2); +** +** strcpy(tmp1, av[1]); +** strcpy(tmp2, av[2]); +** +** printf("-ft_strlcat: %zu - %s - %s\n", ft_strlcat(tmp1, tmp2, i), +** tmp1, tmp2); +** +** strcpy(tmp1, av[1]); +** strcpy(tmp2, av[2]); +** +** printf("ft_strlcat2: %zu - %s - %s\n", ft_strlcat2(tmp1, tmp2, i), +** tmp1, tmp2); +** } +** } +** +** size_t ft_strlcat2(char *dest, char *src, size_t size) +** { +** size_t i; +** size_t dest_length; +** size_t src_length; +** +** i = 0; +** dest_length = ft_strlen(dest); +** src_length = ft_strlen(src); +** if (size > dest_length + 1) +** { +** while (i < (size - dest_length - 1)) +** { +** dest[i + dest_length] = src[i]; +** i++; +** } +** dest[dest_length + i] = '\0'; +** } +** if (size >= dest_length) +** return (dest_length + src_length); +** return (src_length + size); +** } +*/ + +#include "libft.h" + +size_t ft_strlcat(char *dest, const char *src, size_t size) +{ + size_t i; + size_t j; + + i = 0; + j = 0; + while (dest[i] && i < size) + i++; + while (src[j]) + { + if (j + i < size - 1 && size) + { + dest[i + j] = src[j]; + dest[i + j + 1] = '\0'; + } + j++; + } + return (i + j); +} diff --git a/libftt/srcs/ft_strlcpy.c b/libftt/srcs/ft_strlcpy.c new file mode 100644 index 0000000..48ef5b8 --- /dev/null +++ b/libftt/srcs/ft_strlcpy.c @@ -0,0 +1,70 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strlcpy.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2019/11/25 13:57:19 by hulamy #+# #+# */ +/* Updated: 2019/12/01 16:12:57 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +/* +** copy size - 1 length of src into dest, +** terminate it with a '\0' +** and return size of src +** this way, if you try to copy a name in a variable with an available size +** of 5 for exemple, if you use ft_strlcpy(variable, name, sizeof(variable)) +** you will know if the name was too long for the variable by looking at the +** return value (which is size of name) +*/ + +/* +** #include +** +** size_t ft_strlcpy(char *dest, const char *src, size_t size); +** +** int main(int argc, char **argv) +** { +** char str[100]; +** int i; +** unsigned int u; +** unsigned int v; +** +** i = atoi(argv[3]); +** strcpy(str, argv[2]); +** if (argc > 3) +** { +** u = strlcpy(argv[2], argv[1], i); +** printf("strlcpy : %s - %s - %d",argv[1], argv[2], i); +** printf(" - return:%d\n",u); +** strcpy(argv[2], str); +** printf("(re-init : %s - %s - %d)\n",argv[1], argv[2], i); +** v = ft_strlcpy(argv[2], argv[1], i); +** printf("ft_strlcpy: %s - %s - %d",argv[1], argv[2], i); +** printf(" - return:%d\n",v); +** } +** return (0); +** } +*/ + +#include "libft.h" + +size_t ft_strlcpy(char *dest, const char *src, size_t size) +{ + size_t i; + size_t j; + + i = 0; + j = 0; + while (src[i] != '\0') + { + if (i + 1 < size) + dest[i] = src[j++]; + i++; + } + if (size > 0) + dest[j] = '\0'; + return (i); +} diff --git a/libftt/srcs/ft_strlen.c b/libftt/srcs/ft_strlen.c new file mode 100644 index 0000000..8af143b --- /dev/null +++ b/libftt/srcs/ft_strlen.c @@ -0,0 +1,27 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strlen.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2019/11/25 13:57:48 by hulamy #+# #+# */ +/* Updated: 2019/11/25 13:57:49 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +/* +** return length of of string +*/ + +#include "libft.h" + +size_t ft_strlen(const char *str) +{ + size_t i; + + i = 0; + while (str[i]) + i++; + return (i); +} diff --git a/libftt/srcs/ft_strmap.c b/libftt/srcs/ft_strmap.c new file mode 100644 index 0000000..ef82f97 --- /dev/null +++ b/libftt/srcs/ft_strmap.c @@ -0,0 +1,32 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strmap.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2018/11/14 21:17:49 by hulamy #+# #+# */ +/* Updated: 2019/03/25 15:23:12 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +/* +** create a new array with the result of function f on every element of s +*/ + +#include "libft.h" + +char *ft_strmap(char const *s, char (*f)(char)) +{ + char *str; + int i; + + if (!s) + return (NULL); + if (!(str = ft_strnew(ft_strlen(s)))) + return (NULL); + i = -1; + while (s[++i]) + str[i] = f(s[i]); + return (str); +} diff --git a/libftt/srcs/ft_strmapi.c b/libftt/srcs/ft_strmapi.c new file mode 100644 index 0000000..7fa1a06 --- /dev/null +++ b/libftt/srcs/ft_strmapi.c @@ -0,0 +1,75 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strmapi.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2019/11/25 14:01:40 by hulamy #+# #+# */ +/* Updated: 2019/12/09 21:44:07 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +/* +** create a new array with the result of function f on every element of +** s by index i +*/ + +/* +** #include +** +** size_t ft_strlen(const char *str) +** { +** size_t i; +** +** i = 0; +** while (str[i]) +** i++; +** return (i); +** } +** char touppercase(unsigned int i, char c) +** { +** if (i < 3 && c >= 'a' && c <= 'z') +** c -= 32; +** return (c); +** } +** +** char *ft_strmapi(char const *s, char (*f)(unsigned int, char)); +** +** int main(int ac, char **av) +** { +** char *str; +** char touppercase(unsigned int, char); +** +** if (ac > 2) +** return (0); +** if (ac == 2) +** str = strdup(av[1]); +** if (ac == 1) +** str = NULL; +** //str = ft_strmapi(str, touppercase); +** str = ft_strmapi(str, NULL); +** printf("%s\n",str); +** return (0); +** } +*/ + +#include "libft.h" + +char *ft_strmapi(char const *s, char (*f)(unsigned int, char)) +{ + char *str; + int i; + int size; + + if (!s || !f) + return (NULL); + size = ft_strlen(s); + if (!(str = (char *)malloc(sizeof(char) * (size + 1)))) + return (NULL); + str[size] = '\0'; + i = -1; + while (s[++i]) + str[i] = f(i, s[i]); + return (str); +} diff --git a/libftt/srcs/ft_strmultisplit.c b/libftt/srcs/ft_strmultisplit.c new file mode 100644 index 0000000..ed2ed98 --- /dev/null +++ b/libftt/srcs/ft_strmultisplit.c @@ -0,0 +1,83 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strmultisplit.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2018/11/16 15:18:29 by hulamy #+# #+# */ +/* Updated: 2019/03/25 15:23:57 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +/* +** return an array of string with each word found in str +** with any character of charset difining a separator +*/ + +#include "libft.h" + +static int ft_is_separator(char c, char *charset, int i) +{ + while (charset[i]) + { + if (c == charset[i]) + return (1); + i++; + } + c = charset[i]; + return (0); +} + +static int ft_count(char *str, int word, char **tab, char *charset) +{ + int i; + int j; + int k; + + k = 0; + i = 0; + while (ft_is_separator(str[k], charset, 0) == 1) + k++; + while (str[k] != '\0' && i != word) + { + j = 0; + while (!ft_is_separator(str[k + j], charset, 0) && str[k + j] != '\0') + { + if (word == -2) + tab[i][j] = str[k + j]; + j++; + } + k += j; + while (ft_is_separator(str[k], charset, 0)) + k++; + i++; + } + if (word == -1) + return (i); + return (j); +} + +char **ft_strmultisplit(char *str, char *charset) +{ + char **tab; + int i; + int j; + int k; + + k = 0; + tab = 0; + i = ft_count(str, -1, tab, charset); + if (!(tab = (char**)malloc(sizeof(tab) * (i + 1)))) + return (NULL); + tab[i] = 0; + while (k < i) + { + j = ft_count(str, k + 1, tab, charset); + tab[k] = (char*)malloc(sizeof(*tab) * (j + 1)); + tab[k][j] = '\0'; + k++; + } + ft_count(str, -2, tab, charset); + return (tab); +} diff --git a/libftt/srcs/ft_strncat.c b/libftt/srcs/ft_strncat.c new file mode 100644 index 0000000..cf52aae --- /dev/null +++ b/libftt/srcs/ft_strncat.c @@ -0,0 +1,32 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strncat.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2018/11/14 21:18:24 by hulamy #+# #+# */ +/* Updated: 2019/03/25 15:24:11 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +/* +** append n character of src to dest and return dest +*/ + +#include "libft.h" + +char *ft_strncat(char *dest, const char *src, size_t nb) +{ + size_t i; + size_t j; + + i = 0; + j = 0; + while (dest[i]) + i++; + while (src[j] && j < nb) + dest[i++] = src[j++]; + dest[i] = '\0'; + return (dest); +} diff --git a/libftt/srcs/ft_strncmp.c b/libftt/srcs/ft_strncmp.c new file mode 100644 index 0000000..7022624 --- /dev/null +++ b/libftt/srcs/ft_strncmp.c @@ -0,0 +1,32 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strncmp.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2019/11/25 13:57:59 by hulamy #+# #+# */ +/* Updated: 2019/11/25 13:58:00 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +/* +** compare size first character of two null terminated strings +** and return value of difference between first two different character +*/ + +#include "libft.h" + +int ft_strncmp(const char *s1, const char *s2, size_t n) +{ + size_t i; + int res; + + i = 0; + res = 0; + while (s1[i] && s1[i] == s2[i] && i < n - 1) + i++; + if (n != 0) + res = (unsigned char)s1[i] - (unsigned char)s2[i]; + return (res); +} diff --git a/libftt/srcs/ft_strncpy.c b/libftt/srcs/ft_strncpy.c new file mode 100644 index 0000000..91ea1b3 --- /dev/null +++ b/libftt/srcs/ft_strncpy.c @@ -0,0 +1,30 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strncpy.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2018/11/14 21:18:44 by hulamy #+# #+# */ +/* Updated: 2019/03/25 15:24:59 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +/* +** copy n characters from string src to dst including '\0' +** if space remain it's filled zith '\0', and return dst +*/ + +#include "libft.h" + +char *ft_strncpy(char *dest, const char *src, size_t n) +{ + size_t i; + + i = -1; + while (++i < n && src[i]) + dest[i] = src[i]; + while (i < n) + dest[i++] = '\0'; + return (dest); +} diff --git a/libftt/srcs/ft_strnequ.c b/libftt/srcs/ft_strnequ.c new file mode 100644 index 0000000..668f3fa --- /dev/null +++ b/libftt/srcs/ft_strnequ.c @@ -0,0 +1,25 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strnequ.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2018/11/14 21:18:55 by hulamy #+# #+# */ +/* Updated: 2019/03/25 15:25:20 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +/* +** return 0 if n first character of strings s1 and s2 are identical +** and 1 if not +*/ + +#include "libft.h" + +int ft_strnequ(char const *s1, char const *s2, size_t n) +{ + if (!s1 || !s2) + return (0); + return (ft_strncmp(s1, s2, n) == 0); +} diff --git a/libftt/srcs/ft_strnew.c b/libftt/srcs/ft_strnew.c new file mode 100644 index 0000000..645feff --- /dev/null +++ b/libftt/srcs/ft_strnew.c @@ -0,0 +1,27 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strnew.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2018/11/14 21:19:08 by hulamy #+# #+# */ +/* Updated: 2019/11/21 17:00:30 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +/* +** create a new string of length size, fill with zero, and return pointer to it +*/ + +#include "libft.h" + +char *ft_strnew(size_t size) +{ + char *str; + + if (!(str = (char *)malloc(sizeof(char) * (size + 1)))) + return (NULL); + ft_bzero(str, size + 1); + return (str); +} diff --git a/libftt/srcs/ft_strnstr.c b/libftt/srcs/ft_strnstr.c new file mode 100644 index 0000000..52ff0d2 --- /dev/null +++ b/libftt/srcs/ft_strnstr.c @@ -0,0 +1,42 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strnstr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2019/11/25 13:58:10 by hulamy #+# #+# */ +/* Updated: 2019/11/25 13:58:11 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +/* +** locate the first occurence of the string little in len first characters +** of big and return a pointer to this occurence if found +*/ + +#include "libft.h" + +char *ft_strnstr(const char *big, const char *little, size_t len) +{ + size_t i; + size_t j; + + j = 0; + i = 0; + if (!ft_strlen(little)) + return ((char *)big); + while (i == 0 && j <= len) + { + while (little[i] == big[j + i] && little[i] && j + i <= len) + i++; + if (little[i]) + { + j++; + if (!big[j] || j >= len) + return (0); + i = 0; + } + } + return ((char *)big + j); +} diff --git a/libftt/srcs/ft_strrchr.c b/libftt/srcs/ft_strrchr.c new file mode 100644 index 0000000..1c8faa8 --- /dev/null +++ b/libftt/srcs/ft_strrchr.c @@ -0,0 +1,32 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strrchr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2019/11/25 13:58:20 by hulamy #+# #+# */ +/* Updated: 2019/11/25 13:58:21 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +/* +** locate the last occurence of character c in string s +** and return pointer to its location +*/ + +#include "libft.h" + +char *ft_strrchr(const char *s, int c) +{ + int i; + + i = 0; + while (s[i]) + i++; + i++; + while (i--) + if (s[i] == c) + return ((char *)s + i); + return (NULL); +} diff --git a/libftt/srcs/ft_strstr.c b/libftt/srcs/ft_strstr.c new file mode 100644 index 0000000..c7a3535 --- /dev/null +++ b/libftt/srcs/ft_strstr.c @@ -0,0 +1,42 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strstr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2018/11/14 21:19:45 by hulamy #+# #+# */ +/* Updated: 2019/03/25 15:26:59 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +/* +** locate the first occurence of the string little in big +** and return a pointer to this occurence if found +*/ + +#include "libft.h" + +char *ft_strstr(const char *str, const char *to_find) +{ + int i; + int j; + + j = 0; + i = 0; + if (!ft_strlen(to_find)) + return ((char *)str); + while (i == 0) + { + while (to_find[i] && to_find[i] == str[j + i]) + i++; + if (to_find[i]) + { + j++; + if (str[j] == '\0' && to_find[i]) + return (0); + i = 0; + } + } + return ((char *)str + j); +} diff --git a/libftt/srcs/ft_strtrim.c b/libftt/srcs/ft_strtrim.c new file mode 100644 index 0000000..0e9ede9 --- /dev/null +++ b/libftt/srcs/ft_strtrim.c @@ -0,0 +1,101 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strtrim.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2019/11/25 14:01:49 by hulamy #+# #+# */ +/* Updated: 2019/12/09 21:46:54 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +/* +** create a copy of s without the firsts and lasts set of characters +*/ + +/* +** #include +** +** char *ft_substr(char const *s, unsigned int start, size_t len) +** { +** char *str; +** size_t i; +** +** if (!s) +** return (NULL); +** if (!(str = (char *)malloc(sizeof(char) * (len + 1)))) +** return (NULL); +** str[len] = '\0'; +** i = 0; +** while (i < len) +** str[i++] = s[start++]; +** return (str); +** } +** +** size_t ft_strlen(const char *str) +** { +** size_t i; +** +** i = 0; +** while (str[i]) +** i++; +** return (i); +** } +** +** char *ft_strchr(const char *s, int c) +** { +** int i; +** int j; +** +** i = 0; +** j = -1; +** while (s[i]) +** i++; +** while (++j < i + 1) +** if (s[j] == c) +** return ((char *)s + j); +** return (NULL); +** } +** +** char *ft_strtrim(char const *s1, char const *set); +** +** int main(int ac, char **av) +** { +** char *s1; +** char *s2; +** +** if (ac == 3) +** { +** s1 = strdup(av[1]); +** s2 = strdup(av[2]); +** } +** if (ac == 1) +** { +** s1 = "fuehf"; +** s2 = NULL; +** } +** printf("%s\n",ft_strtrim(s1, s2)); +** return (0); +** } +*/ + +#include "libft.h" + +char *ft_strtrim(char const *s1, char const *set) +{ + int len; + char *str; + + if (!s1 || !set) + return (NULL); + while (s1[0] && ft_strchr(set, s1[0])) + s1++; + len = ft_strlen(s1) - 1; + while (len >= 0 && ft_strchr(set, s1[len])) + len--; + len++; + if (!(str = ft_substr(s1, 0, len))) + return (NULL); + return (str); +} diff --git a/libftt/srcs/ft_substr.c b/libftt/srcs/ft_substr.c new file mode 100644 index 0000000..4ffd069 --- /dev/null +++ b/libftt/srcs/ft_substr.c @@ -0,0 +1,104 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_substr.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2019/12/01 16:00:10 by hulamy #+# #+# */ +/* Updated: 2019/12/09 22:04:26 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +/* +** create a copy of a portion of s, begining at start and of length len +*/ + +/* +** #include +** #include +** #include +** +** char *ft_substr(char const *s, unsigned int start, size_t len); +** +** char *ft_strdup(const char *src) +** { +** int i; +** char *str; +** +** i = 0; +** while (src[i] != '\0') +** i++; +** if (!(str = (char*)malloc(sizeof(*str) * (i + 1)))) +** return (NULL); +** while (i-- >= 0) +** str[i + 1] = src[i + 1]; +** return (str); +** } +** +** int ft_strncmp(const char *s1, const char *s2, size_t n) +** { +** size_t i; +** int res; +** +** i = 0; +** res = 0; +** while (s1[i] && s1[i] == s2[i] && i < n - 1) +** i++; +** if (n != 0) +** res = (unsigned char)s1[i] - (unsigned char)s2[i]; +** return (res); +** } +** +** size_t ft_strlen(const char *str) +** { +** size_t i; +** +** i = 0; +** while (str[i]) +** i++; +** return (i); +** } +** +** int main(int ac, char **av) +** { +** char *str; +** size_t size; +** int start; +** +** str = "frgehr"; +** start = 2; +** size = 5; +** if (ac == 4) +** { +** str = strdup(av[1]); +** start = atoi(av[2]); +** size = atoi(av[3]); +** } +** char *ret = ft_substr(str, start, size); +** printf("%s, %i, %zu\n", str, start, size); +** printf("%s\n", ret); +** free(ret); +** return (0); +** } +*/ + +#include "libft.h" + +char *ft_substr(char const *s, unsigned int start, size_t len) +{ + char *str; + size_t i; + + if (!s) + return (NULL); + if (ft_strlen(s) < start) + return (ft_strdup("")); + if (!(str = (char *)malloc(sizeof(char) * (len + 1)))) + return (NULL); + i = 0; + while (i < len && s[start]) + str[i++] = s[start++]; + str[i] = '\0'; + return (str); +} diff --git a/libftt/srcs/ft_tolower.c b/libftt/srcs/ft_tolower.c new file mode 100644 index 0000000..2cd5cb6 --- /dev/null +++ b/libftt/srcs/ft_tolower.c @@ -0,0 +1,20 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_tolower.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2019/11/25 13:58:30 by hulamy #+# #+# */ +/* Updated: 2019/11/25 13:58:32 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_tolower(int c) +{ + if (c >= 'A' && c <= 'Z') + return (c + 32); + return (c); +} diff --git a/libftt/srcs/ft_toupper.c b/libftt/srcs/ft_toupper.c new file mode 100644 index 0000000..cc842a5 --- /dev/null +++ b/libftt/srcs/ft_toupper.c @@ -0,0 +1,20 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_toupper.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2019/11/25 13:58:39 by hulamy #+# #+# */ +/* Updated: 2019/11/25 13:58:43 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +int ft_toupper(int c) +{ + if (c >= 'a' && c <= 'z') + return (c - 32); + return (c); +} diff --git a/libftt/srcs/ft_utoa.c b/libftt/srcs/ft_utoa.c new file mode 100644 index 0000000..da845bf --- /dev/null +++ b/libftt/srcs/ft_utoa.c @@ -0,0 +1,74 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_utoa.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: hulamy +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2020/03/12 22:36:50 by hulamy #+# #+# */ +/* Updated: 2020/03/12 22:36:56 by hulamy ### ########.fr */ +/* */ +/* ************************************************************************** */ + +/* +** take an unsigned integer and give a string +*/ + +/* +** #include // for printf +** #include // for atoi +** +** char *ft_utoa(unsigned long int n); +** +** int main(int ac, char **av) +** { +** if (ac == 0) +** return (0); +** else if (ac == 2) +** printf("%s\n",ft_utoa(atoi(av[1]))); +** else +** { +** unsigned long int i; +** i = 0; +** printf(" %lu\n %s\n\n",i,ft_utoa(i)); +** i = 237683; +** printf(" %lu\n %s\n\n",i,ft_utoa(i)); +** i = 1234567; +** printf(" %lu\n %s\n\n",i,ft_utoa(i)); +** i = 12345678; +** printf(" %lu\n %s\n\n",i,ft_utoa(i)); +** i = 2147483646; +** printf(" %lu\n %s\n\n",i,ft_utoa(i)); +** i = 2147483647; +** printf(" %lu\n %s\n\n",i,ft_utoa(i)); +** i = 2147483648; +** printf(" %lu\n %s\n\n",i,ft_utoa(i)); +** i = 2147483649; +** printf(" %lu\n %s\n\n",i,ft_utoa(i)); +** i = 9223372036854775807; +** printf("| %lu\n| %s\n\n",i,ft_utoa(i)); +** } +** return 0; +** } +*/ + +#include "libft.h" + +char *ft_utoa(unsigned long int n) +{ + char *str; + int len; + unsigned long int cpy; + + cpy = n; + len = 1; + while (n /= 10) + len++; + if (!(str = (char *)malloc(sizeof(char) * (len + 1)))) + return (NULL); + str[len] = '\0'; + str[--len] = cpy % 10 + '0'; + while (cpy /= 10) + str[--len] = cpy % 10 + '0'; + return (str); +} diff --git a/libftt/srcs/main_itoa_split_join_mapi_trim_sub.c b/libftt/srcs/main_itoa_split_join_mapi_trim_sub.c new file mode 100644 index 0000000..3eec65b --- /dev/null +++ b/libftt/srcs/main_itoa_split_join_mapi_trim_sub.c @@ -0,0 +1,159 @@ +#include "libft.h" + +#include + +char touppercase(unsigned int i, char c) +{ + if (i < 3 && c >= 'a' && c <= 'z') + c -= 32; + return (c); +} + +void print_ft_itoa(int i) +{ + printf("itoa : %d -> '%s'\n", i, ft_itoa(i)); +} + +void print_ft_split(char *str, char c) +{ + char **tab; + + printf("split : [%s] [%c] -> ", str, c); + tab = ft_split(str, c); + while (tab && *tab != NULL) + printf("[%s]", *(tab++)); + printf("\n"); +} + +void print_ft_strjoin(char *s1, char *s2) +{ + printf("join : '%s' + '%s' -> '%s'\n", s1, s2, ft_strjoin(s1, s2)); +} + +void print_ft_strmapi(char const *s, char (*f)(unsigned int, char)) +{ + printf("mapi : '%s' ", s); + if (f) + printf("'touppercase' -> "); + else + printf("(null) -> "); + printf("'%s'\n", ft_strmapi(s, f)); +} + +void print_ft_substr(char const *s, unsigned int start, size_t len) +{ + printf("substr : [%s](%u,%zu) -> ", s, start, len); + printf("'%s'\n", ft_substr(s, start, len)); +} + +void print_ft_strtrim(char const *s, char const *set) +{ + printf("strtrim: [%s] [%s] -> '%s'\n", s, set, ft_strtrim(s, set)); +} + +void print_ft_putnbr_fd(int n, int fd) +{ + write(1, "putnbr : [", 10); + ft_putnbr_fd(n, 1); + write(1, "] [", 3); + ft_putnbr_fd(fd, 1); + write(1, "] -> '", 6); + ft_putnbr_fd(n, fd); + write(1, "'\n", 2); +} + +int main() +{ + char touppercase(unsigned int, char); + + printf("ITOA :\n"); + + print_ft_itoa(1338); + print_ft_itoa(0); + print_ft_itoa(-1); + print_ft_itoa(1); + print_ft_itoa(-1218927987); + print_ft_itoa(128979827); + print_ft_itoa(2147483647); + print_ft_itoa(-2147483648); + print_ft_itoa('t'); + + printf("\nSPLIT :\n"); + + print_ft_split(" dfs zfe f ez f fez ", ' '); + print_ft_split(NULL, 0); + print_ft_split(NULL, ' '); + print_ft_split("", 0); + print_ft_split("vzevzev fze", 0); + print_ft_split(" ", 0); + print_ft_split("", ' '); + print_ft_split(" ", ' '); + print_ft_split("zlkefj ljef jl", '\0'); + print_ft_split("zd\nazd\nds", '\n'); + print_ft_split(" ", ' '); + + printf("\nJOIN :\n"); + + print_ft_strjoin("alpha", "bravo"); + print_ft_strjoin("", ""); + print_ft_strjoin(NULL, NULL); + print_ft_strjoin("", "fskjfhkj"); + print_ft_strjoin(NULL, ""); + print_ft_strjoin(NULL, "fsdf"); + print_ft_strjoin("", NULL); + print_ft_strjoin("sdffez", NULL); + print_ft_strjoin(" ", " "); + + printf("\nMAPI :\n"); + + print_ft_strmapi("truc", touppercase); + print_ft_strmapi("truc", NULL); + print_ft_strmapi(NULL, touppercase); + print_ft_strmapi(NULL, NULL); + print_ft_strmapi("", touppercase); + print_ft_strmapi(" ", touppercase); + print_ft_strmapi("mlekgmlzkge", touppercase); + print_ft_strmapi("\0", touppercase); + print_ft_strmapi("f f f f", touppercase); + + printf("\nSUB :\n"); + + print_ft_substr("zeff", 3, 4); + print_ft_substr(NULL, 1, 1); + print_ft_substr("srgz", 0, 0); + print_ft_substr("setzettzetzet", -1, -1); + print_ft_substr("ggzrg", -1, 3); + print_ft_substr("", 3, 2); + print_ft_substr("regrehehzhzh", 1, 23); + print_ft_substr("gzrgzgb zeez", 11, 0); + print_ft_substr("gzrgzgb zeez", 1123238713, 0); + print_ft_substr("gzrgzgb zeez", 1123238713, 2873981730); + print_ft_substr("gzrgzgb zeez", 1, 2873981730); + + printf("\nTRIM :\n"); + + print_ft_strtrim(" stmr trim ", "m "); + print_ft_strtrim(" ", " "); + print_ft_strtrim("", ""); + print_ft_strtrim(NULL, ""); + print_ft_strtrim("", NULL); + print_ft_strtrim(NULL, NULL); + print_ft_strtrim("efzfe fzef", ""); + print_ft_strtrim("efzfzelelijz", " "); + print_ft_strtrim(" e f zfzelelijz ", " "); + print_ft_strtrim("cccccccccccccccccccc", "c"); + + printf("\nPUTNBR :\n"); + + print_ft_putnbr_fd(52, 1); + print_ft_putnbr_fd(2147483647, 1); + print_ft_putnbr_fd(-2147483648, 1); + print_ft_putnbr_fd(0, 1); + print_ft_putnbr_fd(-1, 1); + print_ft_putnbr_fd(239847, 1); + print_ft_putnbr_fd(34625725, 1); + print_ft_putnbr_fd(-4564562, 1); + print_ft_putnbr_fd(456, 1); + print_ft_putnbr_fd(-624724536, 1); + return 0; +} diff --git a/srcs/fdf.c b/srcs/fdf.c index 99ab0ad..e3a093c 100644 --- a/srcs/fdf.c +++ b/srcs/fdf.c @@ -25,7 +25,7 @@ t_fdf *init_fdf(t_fdf *fdf) fdf->img_size_x = fdf->win_size_x; fdf->img_size_y = fdf->win_size_y; fdf->rot_x = -30; - fdf->rot_y = -45; + fdf->rot_y = -60; fdf->mov_x = 0; fdf->mov_y = 0; fdf->zoom = -5; @@ -44,14 +44,31 @@ int main(int ac, char **av) { t_fdf *fdf; - if (ac != 1) - return (0); - fdf = malloc(sizeof(t_fdf)); - fdf->map = parse_map(fdf, av); - fdf = init_fdf(fdf); - mlx_hook(fdf->win_ptr, 2, 1L << 0, keypress, fdf); - mlx_hook(fdf->win_ptr, 17, 1L << 17, shut_down, fdf); - mlx_loop(fdf->mlx_ptr); + if (ac == 1) + { + fdf = malloc(sizeof(t_fdf)); + fdf->map = parse_map(fdf, av); + fdf = init_fdf(fdf); + mlx_hook(fdf->win_ptr, 2, 1L << 0, keypress, fdf); + mlx_hook(fdf->win_ptr, 17, 1L << 17, shut_down, fdf); + mlx_loop(fdf->mlx_ptr); + } + if (ac == 2) + { + int fd; + int ret; + char *line; + + ret = 1; + line = NULL; + fd = open(av[1], O_RDONLY); + while (ret > 0) + { + ret = ft_gnl(fd, &line); + ft_printf("%s\n", line); + free(line); + } + } return (0); } diff --git a/srcs/parse.c b/srcs/parse.c index 67c87a1..69310ba 100644 --- a/srcs/parse.c +++ b/srcs/parse.c @@ -1,7 +1,53 @@ #include "fdf.h" +/* +int maint(int ac, char **av) +{ + int *fd; + int i = 0; + int j = 0; + int ret; + char *line = NULL; + + fd = (int *)ft_malloc(sizeof(int) * ac); + while (++i <= ac - 1) + fd[i - 1] = open(av[i], O_RDONLY); + i = 0; + while (j < ac - 1) + { + if ((ret = ft_gnl(fd[i], &line)) > 0) + { + ft_printf(" [fd%i-%i] %s\n", fd[i], ret, line); + free(line); + j = 0; + } + else if (ret == -1) + { + ft_printf("[fd%i-%i] *ERROR*\n", fd[i], ret); + free(line); + j++; + } + else if (*line != '\0') + ft_printf(" [fd%i-%i] %s\n", fd[i], ret, line); + else + { + ft_printf("[fd%i-%i] %s *FINI*\n", fd[i], ret, line); + free(line); + j++; + } + i++; + if (i >= ac - 1) + i = 0; + } + free(fd); + //while (1); + return (0); +} +*/ + int **parse_map(t_fdf *fdf, char **av) { +// int fd; int **map; int i; int j;