intra to gitea
This commit is contained in:
commit
50c15b30e1
|
|
@ -0,0 +1,33 @@
|
|||
# IDE - Visual Studio Code
|
||||
.vscode/*
|
||||
!.vscode/settings.json
|
||||
!.vscode/tasks.json
|
||||
!.vscode/launch.json
|
||||
!.vscode/extensions.json
|
||||
|
||||
# IDE - JetBrains (IntelliJ, PyCharm, WebStorm, etc)
|
||||
.idea/
|
||||
*.iml
|
||||
*.iws
|
||||
.idea_modules/
|
||||
|
||||
# IDE - Eclipse
|
||||
.classpath
|
||||
.project
|
||||
.settings/
|
||||
.metadata/
|
||||
|
||||
# IDE - Sublime Text
|
||||
*.sublime-workspace
|
||||
*.sublime-project
|
||||
|
||||
# IDE - NetBeans
|
||||
nbproject/
|
||||
nbbuild/
|
||||
dist/
|
||||
nbdist/
|
||||
.nb-gradle/
|
||||
|
||||
# Fichiers système
|
||||
.DS_Store
|
||||
Thumbs.db
|
||||
|
|
@ -0,0 +1,97 @@
|
|||
# **************************************************************************** #
|
||||
# #
|
||||
# ::: :::::::: #
|
||||
# Makefile :+: :+: :+: #
|
||||
# +:+ +:+ +:+ #
|
||||
# By: lfirmin lfirmim@student.42.fr> +#+ +:+ +#+ #
|
||||
# +#+#+#+#+#+ +#+ #
|
||||
# Created: 2024/08/12 07:07:31 by lfirmin #+# #+# #
|
||||
# Updated: 2024/08/12 09:15:05 by lfirmin ### ########.fr #
|
||||
# #
|
||||
# **************************************************************************** #
|
||||
|
||||
NAME = so_long
|
||||
LIBFT = libft.a
|
||||
GNL = gnl.a
|
||||
FT_PRINTF_FD = libftprintf.a
|
||||
SRC_FILES = main.c pars_map.c pars_map_2.c pars_map_3.c utils.c utils_2.c utils_3.c utils_4.c
|
||||
INCLUDES_FILES = include/so_long.h
|
||||
SRC_DIR = srcs/
|
||||
SRC = $(addprefix $(SRC_DIR), $(SRC_FILES))
|
||||
OBJ_DIR = obj/
|
||||
OBJ = $(addprefix $(OBJ_DIR), $(SRC_FILES:.c=.o))
|
||||
CC = cc
|
||||
CFLAGS = -Wall -Werror -Wextra -g3
|
||||
INCLUDE = -I include
|
||||
RM = rm -rf
|
||||
MKDIR = mkdir -p
|
||||
|
||||
GREEN = \033[0;32m
|
||||
YELLOW = \033[0;33m
|
||||
CYAN = \033[0;36m
|
||||
RESET = \033[0m
|
||||
BOLD = \033[1m
|
||||
WHITE = \033[0;97m
|
||||
|
||||
LOADING_CHARS = ⠋ ⠙ ⠹ ⠸ ⠼ ⠴ ⠦ ⠧ ⠇ ⠏
|
||||
|
||||
define SO_LONG_ART
|
||||
▗▄▄▖ ▗▄▖ ▗▖ ▗▄▖ ▗▖ ▗▖ ▗▄▄▖
|
||||
▐▌ ▐▌ ▐▌ ▐▌ ▐▌ ▐▌▐▛▚▖▐▌▐▌
|
||||
▝▀▚▖▐▌ ▐▌ ▐▌ ▐▌ ▐▌▐▌ ▝▜▌▐▌▝▜▌
|
||||
▗▄▄▞▘▝▚▄▞▘▄▄▄▄▖▐▙▄▄▖▝▚▄▞▘▐▌ ▐▌▝▚▄▞▘
|
||||
|
||||
|
||||
endef
|
||||
export SO_LONG_ART
|
||||
|
||||
all: print_art $(NAME)
|
||||
|
||||
print_art:
|
||||
@printf "$(YELLOW)%s$(RESET)\n" "$$SO_LONG_ART"
|
||||
|
||||
$(NAME): $(OBJ) $(INCLUDES_FILES)
|
||||
@printf "$(BOLD)$(WHITE)Welcome to the $(GREEN)SO_LONG$(WHITE) compilation process.\nPlease hold on as we prepare your program.\n\n$(RESET)"
|
||||
@make -s -C libft
|
||||
@make -s -C minilibx-linux
|
||||
@make -s -C gnl
|
||||
@make -s -C ft_printf_fd
|
||||
@printf "$(YELLOW)Compiling So_long, Please wait...$(RESET)"
|
||||
@for char in $(LOADING_CHARS); do \
|
||||
printf "\r$(YELLOW)Compiling So_long, Please wait... $$char$(RESET)"; \
|
||||
sleep 0.1; \
|
||||
done
|
||||
@$(CC) $(CFLAGS) $(OBJ) $(INCLUDE) -L minilibx-linux -lmlx -lXext -lX11 -lm -lz libft/$(LIBFT) gnl/$(GNL) ft_printf_fd/$(FT_PRINTF_FD) -o $(NAME)
|
||||
@printf "\r$(GREEN)Great news ! $(WHITE)SO_LONG compiled successfully ! $(RESET)\n\n"
|
||||
@printf "$(BOLD)$(WHITE)Compilation complete !\n$(GREEN)So_long$(WHITE) is ready to use !\n"
|
||||
|
||||
$(OBJ_DIR)%.o: $(SRC_DIR)%.c
|
||||
@$(MKDIR) $(OBJ_DIR)
|
||||
@$(CC) $(CFLAGS) $(INCLUDE) -c $< -o $@
|
||||
|
||||
clean:
|
||||
@make clean -s -C libft
|
||||
@make clean -s -C gnl
|
||||
@make clean -s -C ft_printf_fd
|
||||
@$(RM) $(OBJ_DIR)
|
||||
@printf "$(WHITE)Clean process completed for $(GREEN)So_long.$(RESET)\n"
|
||||
|
||||
clean1:
|
||||
@$(RM) $(OBJ_DIR)
|
||||
@printf "$(WHITE)Clean process completed for $(GREEN)So_long$(RESET)\n"
|
||||
|
||||
fclean: clean1
|
||||
@make fclean -s -C libft
|
||||
@make fclean -s -C gnl
|
||||
@make fclean -s -C ft_printf_fd
|
||||
@$(RM) $(NAME)
|
||||
@$(RM) $(PRINTF)
|
||||
@$(RM) $(LIBFT)
|
||||
@printf "$(WHITE)Full clean process completed for $(GREEN)So_long.$(RESET)\n"
|
||||
|
||||
re: fclean all
|
||||
|
||||
.PHONY: all clean fclean re print_art clean1 norminette
|
||||
|
||||
norminette:
|
||||
norminette srcs/* include/* libft/*.c libft/*.h gnl/*/*.c gnl/*/*.h ft_printf_fd/*.c ft_printf_fd/*.h | grep "Error"
|
||||
|
|
@ -0,0 +1,46 @@
|
|||
/* XPM */
|
||||
static char *result[] = {
|
||||
/* columns rows colors chars-per-pixel */
|
||||
"32 32 8 1 ",
|
||||
" c #686868",
|
||||
". c #747474",
|
||||
"X c gray50",
|
||||
"o c #3DE0E5",
|
||||
"O c #65F5E3",
|
||||
"+ c gray56",
|
||||
"@ c #9EFEEB",
|
||||
"# c #D5FFF6",
|
||||
/* pixels */
|
||||
"++++++++X...X.XXX. . ..X++X..XX",
|
||||
"X+++X+XXXX...XXX... ..XXXXXXXXX",
|
||||
"XX....X...XXX..X++X++X . .X...",
|
||||
"+XXX.XXX...X..XX.X..XXX. X..X+",
|
||||
"XX.. ... ...... @O X..X",
|
||||
"++X.. #@+XX. ..X.XX @#@O+XXX",
|
||||
"X...XX. Oo+XXX @O +XXX.+Ooo+..X",
|
||||
".X++++++++++X @#@Oo+XX++++++.XX.",
|
||||
"....X++. ..XX+Ooo+++++XX++...XX",
|
||||
"X.XXXXX.... X++++X. +XX..XXXX",
|
||||
"X++++X... @Oo .XX.. @O . .++",
|
||||
"XX++XX @##@Oo X.. @#@oX......X",
|
||||
"...X. O@#@@OOooo+++ O@Oo+XXXXXXX",
|
||||
"X.....X+O@OooOo+X...Xoo+XX+++..X",
|
||||
".... X+++++X......++.....XXX.",
|
||||
"XX. . ......... .....XXXXXXX",
|
||||
"X. @#@X..X..X+X @#O XX..X....X",
|
||||
"X @#@OOo+++XXX @@##@Oo XXXXX..XX",
|
||||
"XX+Oooo+.X.XX @O#@O@Ooo++XX++XXX",
|
||||
"XX+++++X. ..X++OooOo++XX+++....",
|
||||
". .XXXX. @@ . +++++XXX..X.. .X",
|
||||
"XXXX... @#Oo+ ..XXXXXX ++XXX.",
|
||||
"XXX..XXX+Oo++++X++XXX. Ooo ..X++",
|
||||
"XXXXXXXXX++++XXXXX @@Ooo ...X",
|
||||
".X..X...XX+XXX.. @##@@OOOoo+ ..",
|
||||
"XXX. . +++XXX O@##@OOOooo+. .",
|
||||
"X++++. O@ XX..XX.O@@Ooo++++X.+++",
|
||||
"+++XX @#Oo+XXX....oOoo+..XX...X+",
|
||||
"XX.X. Ooo++++...XX++++XX++++++++",
|
||||
"X. .X+++++XXX...XXXXXXXXX+X+++X",
|
||||
".XX...XXX.X.. .X+++++X.X.....X.",
|
||||
"XX..XXXXXXXX.....XX++XXXXX..XXXX"
|
||||
};
|
||||
|
|
@ -0,0 +1,215 @@
|
|||
/* XPM */
|
||||
static char *xpm_[] = {
|
||||
/* columns rows colors chars-per-pixel */
|
||||
"32 32 177 2 ",
|
||||
" c #051003",
|
||||
". c #0B110B",
|
||||
"X c #0C1B0C",
|
||||
"o c #10110D",
|
||||
"O c #130E12",
|
||||
"+ c #170F1A",
|
||||
"@ c #0E1214",
|
||||
"# c #0E1C11",
|
||||
"$ c #0E1018",
|
||||
"% c #141214",
|
||||
"& c #141C14",
|
||||
"* c #1B1D16",
|
||||
"= c #171218",
|
||||
"- c #1B141A",
|
||||
"; c #1D1B1C",
|
||||
": c #161518",
|
||||
"> c #350F04",
|
||||
", c #3D140D",
|
||||
"< c #33120F",
|
||||
"1 c #200E1D",
|
||||
"2 c #2F1118",
|
||||
"3 c #201D1E",
|
||||
"4 c #23121E",
|
||||
"5 c #3D1414",
|
||||
"6 c #331019",
|
||||
"7 c #3B1219",
|
||||
"8 c #1E211E",
|
||||
"9 c #161720",
|
||||
"0 c #1D1C22",
|
||||
"q c #1F1625",
|
||||
"w c #231C23",
|
||||
"e c #221628",
|
||||
"r c #271C29",
|
||||
"t c #281C2A",
|
||||
"y c #391426",
|
||||
"u c #3B172A",
|
||||
"i c #3D1A27",
|
||||
"p c #2A1C36",
|
||||
"a c #2A1C3A",
|
||||
"s c #301F37",
|
||||
"d c #3F1933",
|
||||
"f c #3A153E",
|
||||
"g c #3F1B38",
|
||||
"h c #36163C",
|
||||
"j c #1E2224",
|
||||
"k c #1C2D24",
|
||||
"l c #212121",
|
||||
"z c #2A2226",
|
||||
"x c #20212A",
|
||||
"c c #2B232C",
|
||||
"v c #2B282D",
|
||||
"b c #312C2E",
|
||||
"n c #29322E",
|
||||
"m c #2B2234",
|
||||
"M c #252830",
|
||||
"N c #262039",
|
||||
"B c #2A2038",
|
||||
"V c #2B2735",
|
||||
"C c #322632",
|
||||
"Z c #322C32",
|
||||
"A c #382D34",
|
||||
"S c #353134",
|
||||
"D c #303933",
|
||||
"F c #3A353D",
|
||||
"G c #36343B",
|
||||
"H c #431416",
|
||||
"J c #5F1C14",
|
||||
"K c #5C1E1D",
|
||||
"L c #631E15",
|
||||
"P c #5E201D",
|
||||
"I c #6E2416",
|
||||
"U c #63221A",
|
||||
"Y c #6D241A",
|
||||
"T c #69291E",
|
||||
"R c #4C1B26",
|
||||
"E c #4F1729",
|
||||
"W c #471E29",
|
||||
"Q c #4C1C2D",
|
||||
"! c #511E28",
|
||||
"~ c #5B1D22",
|
||||
"^ c #541E3F",
|
||||
"/ c #601F25",
|
||||
"( c #4B242D",
|
||||
") c #57232D",
|
||||
"_ c #5C252B",
|
||||
"` c #5D292E",
|
||||
"' c #4D2536",
|
||||
"] c #612126",
|
||||
"[ c #6B2322",
|
||||
"{ c #662927",
|
||||
"} c #642629",
|
||||
"| c #652A2A",
|
||||
" . c #6B2A29",
|
||||
".. c #712523",
|
||||
"X. c #712E28",
|
||||
"o. c #72302B",
|
||||
"O. c #6F2638",
|
||||
"+. c #602B3D",
|
||||
"@. c #72263C",
|
||||
"#. c #2A1D40",
|
||||
"$. c #3C1641",
|
||||
"%. c #322748",
|
||||
"&. c #3A3442",
|
||||
"*. c #3D3A44",
|
||||
"=. c #3D354C",
|
||||
"-. c #3B3350",
|
||||
";. c #421645",
|
||||
":. c #4E1F56",
|
||||
">. c #521A5E",
|
||||
",. c #413C46",
|
||||
"<. c #5B2859",
|
||||
"1. c #602259",
|
||||
"2. c #6B245F",
|
||||
"3. c #6A2547",
|
||||
"4. c #401E6E",
|
||||
"5. c #581764",
|
||||
"6. c #561C64",
|
||||
"7. c #5E1469",
|
||||
"8. c #5B1D6B",
|
||||
"9. c #641B6E",
|
||||
"0. c #61166D",
|
||||
"q. c #621673",
|
||||
"w. c #701D77",
|
||||
"e. c #731C7C",
|
||||
"r. c #4C2D73",
|
||||
"t. c #502D72",
|
||||
"y. c #533075",
|
||||
"u. c #65286C",
|
||||
"i. c #684040",
|
||||
"p. c #534969",
|
||||
"a. c #5D5668",
|
||||
"s. c #665D68",
|
||||
"d. c #665F70",
|
||||
"f. c #686868",
|
||||
"g. c #6C6367",
|
||||
"h. c #706B6D",
|
||||
"j. c #656071",
|
||||
"k. c #6D6676",
|
||||
"l. c #6C6877",
|
||||
"z. c #6D6778",
|
||||
"x. c #747474",
|
||||
"c. c #7F7F7F",
|
||||
"v. c #83247D",
|
||||
"b. c #7E1E8E",
|
||||
"n. c #583685",
|
||||
"m. c #7F288D",
|
||||
"M. c #783BBF",
|
||||
"N. c #787383",
|
||||
"B. c #6045B5",
|
||||
"V. c #7047B5",
|
||||
"C. c #6752C2",
|
||||
"Z. c #7051D1",
|
||||
"A. c #7E57EC",
|
||||
"S. c #7861E2",
|
||||
"D. c #811E92",
|
||||
"F. c #871D9B",
|
||||
"G. c #812091",
|
||||
"H. c #8B219A",
|
||||
"J. c #9B2895",
|
||||
"K. c #AC3092",
|
||||
"L. c #B23294",
|
||||
"P. c #9A24AA",
|
||||
"I. c #9F26B4",
|
||||
"U. c #A227A1",
|
||||
"Y. c #CE38AB",
|
||||
"T. c #D438AF",
|
||||
"R. c #D13AA7",
|
||||
"E. c #827487",
|
||||
"W. c #8A35D6",
|
||||
"Q. c #B728C5",
|
||||
"!. c #BC29C9",
|
||||
"~. c #BD27D2",
|
||||
"^. c #C227CE",
|
||||
"/. c #C428D5",
|
||||
"(. c #C92AD5",
|
||||
"). c gray56",
|
||||
"_. c gray56",
|
||||
/* pixels */
|
||||
").).).).).).).).c.x.x.x.c.x.c.c.c.x.f.f.x.f.x.x.c.).).c.x.x.c.c.",
|
||||
"c.).).).c.).c.c.c.c.x.x.x.c.c.c.x.x.x.f.f.x.x.c.c.c.c.c.c.c.c.c.",
|
||||
"c.c.x.x.x.x.c.x.x.x.c.c.c.x.x.c.z F p.).).c.f.f.x.f.f.x.c.x.x.x.",
|
||||
").c.c.c.x.c.c.c.x.x.x.c.x.x.v c b z S =.p.c.c.x.f.f.x.c.x.x.c.).",
|
||||
"c.c.x.x.f.f.f.f.x.x.x.x.v b b Z S G m - %.x.x.c.c.c.c.c.c.x.x.c.",
|
||||
").).c.x.x.f.f.x.f.f.0 c A Z C F Z r ; ; z A -.c.x.x.c.c.c.c.c.c.",
|
||||
"c.x.x.x.c.c.x.x.x.c.O + w G V w ; 3 w w c C b #.d.c.x.f.f.x.x.c.",
|
||||
"x.c.).).).).).).c.c.% % O ; w ; w w w w m c * p N.c.c.x.x.c.c.x.",
|
||||
"x.x.x.x.c.).).x.f.f.= % % ; w w * * e % * w ; a z.).).x.x.x.c.c.",
|
||||
"c.x.c.c.c.c.c.x.x.x.- O O * & & p 5.f . ; w 3 B k.c.x.x.c.c.c.c.",
|
||||
"c.).).).).c.x.x.c.Z F C % X h H.F.e.f . ; w ; B a.f.x.f.f.x.).).",
|
||||
"c.c.).).c.c.c.z b S C F D 6./.(.D.7.$. ; l ; B a.x.x.x.x.x.x.c.",
|
||||
"x.x.x.c.x.c.,.O q Z F c # 9./.Q.b.9.;. ; w * p z.c.c.c.c.c.c.c.",
|
||||
"c.x.x.x.x.x.F o O = r ; X 8.^.Q.b.7.$.. ; w ; B l.c.).).).x.x.c.",
|
||||
"x.x.x.x.f.f.&.% % % w w X 9./.!.D.9.f . ; w ; m j.x.x.x.c.c.c.x.",
|
||||
"c.c.c.x.x.f.&.% = - w w X 9.~.P.w.0.f ; l ; B d.c.c.c.c.c.c.c.",
|
||||
"c.c.x.x.c.c.*.% O % 8 3 & >.U.L.v.q.$. ; w ; a d.x.c.x.x.x.x.c.",
|
||||
"c.).).).).).,.% % % w l # 1.Y.R.v.7.;.. ; w ; N k.c.c.c.x.x.c.c.",
|
||||
"c.c.c.).).c.,.% % % w w X 2.T.K.e.q.h . ; 0 - a E.c.c.).).c.c.c.",
|
||||
"c.c.).).).).*.% % - w w # <.J.G.P.m.s . : w W | +.).).).x.x.x.x.",
|
||||
"x.f.x.c.c.c.&.% % % j w & :.I.H.<.v M C W | .{ T | ' x.x.f.x.c.",
|
||||
"c.c.c.c.x.i.- % % % w l & :.u.n k v Q } .| { | ` _ ~ O.c.c.c.x.",
|
||||
"c.c.c.i T o.4 % % % w w ; x j v ( } | | | | ` ) / [ ] @.x.c.).).",
|
||||
"c.c.c.> 7 R - $ % - w 0 9 t ( } | | | | ` ) ] [ [ [ U 3.x.x.x.c.",
|
||||
"x.c.x., 5 5 6 1 $ @ 0 w W } | | | | ` ) ] [ [ [ Y I J V.f.f.x.x.",
|
||||
"c.c.c., 5 5 H H 2 + i .X.| | | ` ) ] [ [ [ [ I L E 4.A.x.f.f.x.",
|
||||
"c.).).y 5 , 5 5 H H 7 R _ | ` ) ] [ [ [ [ Y L E y.S.c.c.x.).).).",
|
||||
").).).x.d y 5 , 5 5 5 7 6 ! ] [ [ [ [ I L E 6.W.x.c.c.x.x.x.c.).",
|
||||
"c.c.x.c.x.h.g u 5 , 5 5 5 K ..[ [ Y U E r.B.c.c.).).).).).).).).",
|
||||
"c.x.f.f.x.c.x.g.d u 5 , 5 P ..Y U Q t.Z.c.c.c.c.c.c.).c.).).).c.",
|
||||
"x.c.c.x.x.x.c.c.c.s.d u < J U E 8.M.).).).).c.x.c.x.x.x.x.x.c.x.",
|
||||
"c.c.x.x.c.c.c.c.c.c.c.c.^ Q n.C.x.c.c.).).c.c.c.c.c.x.x.c.c.c.c."
|
||||
};
|
||||
|
|
@ -0,0 +1,42 @@
|
|||
/* XPM */
|
||||
static char *ea534f601fc548b8ddbc80a1baa83d2dTHcmw34tLSzWZjDk[] = {
|
||||
/* columns rows colors chars-per-pixel */
|
||||
"32 32 4 1 ",
|
||||
" c #686868",
|
||||
". c #747474",
|
||||
"X c gray50",
|
||||
"o c gray56",
|
||||
/* pixels */
|
||||
"ooooooooX...X.XXX. . ..XooX..XX",
|
||||
"XoooXoXXXX...XXX... ..XXXXXXXXX",
|
||||
"XX....X...XXX..XooXooX . .X...",
|
||||
"oXXX.XXX...X..XX.X..XXX. .X..Xo",
|
||||
"XX.. ..... .....XXXXXX..X",
|
||||
"ooX.. . .XX. ....X.XXX..XXXXXX",
|
||||
"X...XX...XXXXXXoooooXXX..X. ..X",
|
||||
".XooooooXXooX..XXooXXXoooXX..XX.",
|
||||
"....Xoo. ..XX..XXoooooXXoo...XX",
|
||||
"X.XXXXX...XX..XXXooXXoooXX..XXXX",
|
||||
"XooooX..XXXXXX..XX....X. . .oo",
|
||||
"XXooXXXXXXX....XX.. . ......X",
|
||||
"...X.XoooooX.Xooooo.....XXXXXXXX",
|
||||
"X.......ooX...XoX... .XXXooo..X",
|
||||
".... . .XX...X..XX.....XXX.",
|
||||
"XXX.. . ........XXXX.....XXXXXXX",
|
||||
"XX..XXX..X..XoooooooX.XX..X....X",
|
||||
"XoooooXXoooXXXoooXX....XXXXX..XX",
|
||||
"XXXooXX..X.XooXXooXX.XoooXXooXXX",
|
||||
"XXooooXXXXX..XooXXXX...XXooo....",
|
||||
". .XXXXX... . ..X..XXX..X.. .X",
|
||||
"XXXX...XX.XX. ..XXXXXooooooXXX.",
|
||||
"XXX..XXXXXoooooXooXXXXXXooX..Xoo",
|
||||
"XXXXXXXXXooooXXXXX..X....XXX...X",
|
||||
".X..X...XXoXXX.. .XXX. . ..",
|
||||
"XXX. .XooooXXX..XXX..X. .... .",
|
||||
"Xoooo.X...XX..XX...ooXXX..XX.ooo",
|
||||
"oooXXX...XXXXX....XXX....XX...Xo",
|
||||
"XX.X..XXooooo...XX..XXXXoooooooo",
|
||||
"X. .X..XooXXX...XXXXXXXXXoXoooX",
|
||||
".XX...XXX.X.. .XoooooX.X.....X.",
|
||||
"XX..XXXXXXXX.....XXooXXXXX..XXXX"
|
||||
};
|
||||
|
|
@ -0,0 +1,216 @@
|
|||
/* XPM */
|
||||
static char *_472f46639e945e19be1c36ef31d5cc9[] = {
|
||||
/* columns rows colors chars-per-pixel */
|
||||
"32 32 178 2 ",
|
||||
" c #3C2205",
|
||||
". c #3E3519",
|
||||
"X c #1D3233",
|
||||
"o c #343529",
|
||||
"O c #222F36",
|
||||
"+ c #293737",
|
||||
"@ c #481A00",
|
||||
"# c #571A01",
|
||||
"$ c #462A0D",
|
||||
"% c #492C0F",
|
||||
"& c #5E2201",
|
||||
"* c #532606",
|
||||
"= c #4D2F12",
|
||||
"- c #402C11",
|
||||
"; c #4C3013",
|
||||
": c #42391E",
|
||||
"> c #453215",
|
||||
", c #523619",
|
||||
"< c #5D3C1D",
|
||||
"1 c #56391B",
|
||||
"2 c #602402",
|
||||
"3 c #622B0A",
|
||||
"4 c #662804",
|
||||
"5 c #762E09",
|
||||
"6 c #72270B",
|
||||
"7 c #7D350E",
|
||||
"8 c #703614",
|
||||
"9 c #713C1D",
|
||||
"0 c #6A3615",
|
||||
"q c #453D21",
|
||||
"w c #593E21",
|
||||
"e c #5D4023",
|
||||
"r c #5E4A35",
|
||||
"t c #4F5037",
|
||||
"y c #644325",
|
||||
"u c #674A2B",
|
||||
"i c #6A4D2E",
|
||||
"p c #654728",
|
||||
"a c #604C36",
|
||||
"s c #6B4E30",
|
||||
"d c #634F3A",
|
||||
"f c #7A4E35",
|
||||
"g c #6C5032",
|
||||
"h c #63503A",
|
||||
"j c #725335",
|
||||
"k c #735639",
|
||||
"l c #7C5438",
|
||||
"z c #76593B",
|
||||
"x c #7E5535",
|
||||
"c c #7B4B2D",
|
||||
"v c #053A52",
|
||||
"b c #2D4142",
|
||||
"n c #314546",
|
||||
"m c #36494A",
|
||||
"M c #394C4D",
|
||||
"N c #144B66",
|
||||
"B c #1E5E7F",
|
||||
"V c #22546D",
|
||||
"C c #295E76",
|
||||
"Z c #2B5F78",
|
||||
"A c #265B73",
|
||||
"S c #006869",
|
||||
"D c #2D6079",
|
||||
"F c #435758",
|
||||
"G c #54585B",
|
||||
"H c #685540",
|
||||
"J c #7C5F41",
|
||||
"K c #715B48",
|
||||
"L c #7E6143",
|
||||
"P c #76624D",
|
||||
"I c #7D6456",
|
||||
"U c #596B6C",
|
||||
"Y c #686868",
|
||||
"T c #747474",
|
||||
"R c gray50",
|
||||
"E c #737564",
|
||||
"W c #843C17",
|
||||
"Q c #884825",
|
||||
"! c #944B24",
|
||||
"~ c #99542D",
|
||||
"^ c #825939",
|
||||
"/ c #80563E",
|
||||
"( c #985A36",
|
||||
") c #A15932",
|
||||
"_ c #AD663E",
|
||||
"` c #8F5F43",
|
||||
"' c #816446",
|
||||
"] c #846749",
|
||||
"[ c #85684A",
|
||||
"{ c #8D6A51",
|
||||
"} c #A66942",
|
||||
"| c #AB6942",
|
||||
" . c #AC7049",
|
||||
".. c #A77453",
|
||||
"X. c #AA7A57",
|
||||
"o. c #B97A55",
|
||||
"O. c #B46D4A",
|
||||
"+. c #867462",
|
||||
"@. c #A57F6B",
|
||||
"#. c #7F827C",
|
||||
"$. c #C3845E",
|
||||
"%. c #C98962",
|
||||
"&. c #C88A65",
|
||||
"*. c #D58F69",
|
||||
"=. c #D3926C",
|
||||
"-. c #DB9369",
|
||||
";. c #DE9B74",
|
||||
":. c #DE9E79",
|
||||
">. c #D79770",
|
||||
",. c #E0A07F",
|
||||
"<. c #004E80",
|
||||
"1. c #055B8E",
|
||||
"2. c #046283",
|
||||
"3. c #12699D",
|
||||
"4. c #1F76AA",
|
||||
"5. c #2177AC",
|
||||
"6. c #257AAD",
|
||||
"7. c #277DB2",
|
||||
"8. c #7C53BF",
|
||||
"9. c #6441C8",
|
||||
"0. c #7C6AE3",
|
||||
"q. c #AE7BAF",
|
||||
"w. c #B37FAF",
|
||||
"e. c #9176D6",
|
||||
"r. c #008E89",
|
||||
"t. c #019C9D",
|
||||
"y. c #029696",
|
||||
"u. c #06928B",
|
||||
"i. c #0C87AE",
|
||||
"p. c #158AAF",
|
||||
"a. c #09B0AB",
|
||||
"s. c #6D8283",
|
||||
"d. c #28AAD2",
|
||||
"f. c #0FCAC6",
|
||||
"g. c #10CBC7",
|
||||
"h. c #10CCC9",
|
||||
"j. c #15D3D0",
|
||||
"k. c #3CC5EE",
|
||||
"l. c #43CDF5",
|
||||
"z. c gray56",
|
||||
"x. c #899E9E",
|
||||
"c. c #929D9E",
|
||||
"v. c #BD94BB",
|
||||
"b. c #B882A8",
|
||||
"n. c #93A3A3",
|
||||
"m. c #ECAB85",
|
||||
"M. c #F4AA80",
|
||||
"N. c #E9B38D",
|
||||
"B. c #FFBA8E",
|
||||
"V. c #EFB299",
|
||||
"C. c #FBB792",
|
||||
"Z. c #F7B995",
|
||||
"A. c #FBBA95",
|
||||
"S. c #F3B59A",
|
||||
"D. c #F7BC9A",
|
||||
"F. c #F8BC9F",
|
||||
"G. c #D59CA1",
|
||||
"H. c #FBC38F",
|
||||
"J. c #FFC294",
|
||||
"K. c #FDC39D",
|
||||
"L. c #FFCA93",
|
||||
"P. c #FFCBA5",
|
||||
"I. c #FFC6A0",
|
||||
"U. c #FFD3AD",
|
||||
"Y. c #FEDBBB",
|
||||
"T. c #AFC3C4",
|
||||
"R. c #B6CACB",
|
||||
"E. c #BDD1D2",
|
||||
"W. c #C1D6D7",
|
||||
"Q. c #C9DCDD",
|
||||
"!. c #E0C0C6",
|
||||
"~. c #FBDFC9",
|
||||
"^. c #FFEED4",
|
||||
"/. c #FFF6DD",
|
||||
"(. c #CEC5EA",
|
||||
"). c #C7C7FA",
|
||||
"_. c #FDF9EF",
|
||||
"`. c #FFFFFE",
|
||||
/* pixels */
|
||||
"z.z.z.z.z.z.z.z.R T T T R T R R R T Y Y T Y T T R z.z.R T T R R ",
|
||||
"R z.z.z.R z.R R R R T T T R R R T T T Y Y T T R R R R R R R R R ",
|
||||
"R R T T T T R T T T R R R T T R z.z.R z.z.R Y Y T Y Y T R T T T ",
|
||||
"z.R R R T R R R T T T R T T R R T R T T R R R T Y Y T R T T R z.",
|
||||
"R R T T Y Y Y Y T T T T T Y Y Y Y Y T T T T T R R R R R R T T R ",
|
||||
"z.z.R T T Y Y T Y Y T R R T Y T T T T R T R R R T T R R R R R R ",
|
||||
"R T T T R R T T T R R R R R R z.z.z.z.z.R R R T T R T Y Y T T R ",
|
||||
"T R z.z.z.z.+.H r a h h a r r r r h h r r r h d K +.P T T R R T ",
|
||||
"T T T T R z.w u u u u u u u u s s s i s s i i i p e w T T T R R ",
|
||||
"R T R R R R % z ] ' ' ' ' ] J s g g g g g g s g y % < T R R R R ",
|
||||
"R z.z.z.z.R ; k L J L L L J s < < < < < < < < < 1 = 0 Y Y T z.z.",
|
||||
"R R z.z.R R = k ' J J J ] 1 x K.Z.A.A.A.A.Z.Z.K.=.& 8 T T T T R ",
|
||||
"T T T R T R = k L L ] [ , { N.A.C.J.J.A.A.J.B.K.>.2 8 R R R R R ",
|
||||
"R T T T T T ; k ] k 1 w X.P.Z.~.v.G.J.S.w.!.Y.=.2 8 z.z.T T R ",
|
||||
"T T T T Y Y = z k j ^ ^ $ ..K.D.`.0.q.L.S.9.)./.*.2 8 T R R R T ",
|
||||
"R R R T T Y = z , ^ P.K.y X.K.D._.e.b.H.V.8.(.^.*.2 8 R R R R R ",
|
||||
"R R T T R R ; % ^ A.%.o.:.A.C.D.F.,.%.=.S.D.K.=.2 8 T T T T R ",
|
||||
"R z.z.z.z.z.3 } o.&.:.=.*.m.P.I.P.%.} } } .m.U.:.2 8 R T T R R ",
|
||||
"R R R z.z.R 4 ! ( ~ ! ! ! ) _ _ | W 5 7 7 5 ~ .~ & 9 z.z.R R R ",
|
||||
"R R z.z.z.z.3 & # * q : : . . . . : q q q q - @ # 9 / z.T T T T ",
|
||||
"T Y T R R R R l 6 t y.y.y.t.t.t.t.t.t.t.t.t.S o Q T R T T Y T R ",
|
||||
"R R R R T T K ..m.$.> u.r.a.h.f.g.g.g.g.f.j.S E ;.I [ z.R R R T ",
|
||||
"R R R T T R & o.K.-.* p.i.d.l.k.k.k.k.k.k.l.2.#.M.# f T T R z.z.",
|
||||
"R R R R R R ( ( O.` O 1.1.3.5.4.7.6.5.4.4.6.<.G _ f @.R T T T R ",
|
||||
"T R T T R T T f # o B V D D Z C v N A Z C D N + c Y Y T Y Y T T ",
|
||||
"R R R T Y Y T R z.F n.x.R.W.W.R.b s.T.W.E.Q.U + Y T T T T Y Y T ",
|
||||
"R z.z.z.z.T R T T + n n m m m m + b m m m M X U T T R R T z.z.z.",
|
||||
"z.z.z.R R R T T T M M M m m m m M M m m m m F c.T R R T T T R z.",
|
||||
"R R T R T T R R z.z.z.z.z.T T T R R T T R R R R z.z.z.z.z.z.z.z.",
|
||||
"R T Y Y T R T T R z.z.R R R T T T R R R R R R R R R z.R z.z.z.R ",
|
||||
"T R R T T T R R R T R T T Y Y T R z.z.z.z.z.R T R T T T T T R T ",
|
||||
"R R T T R R R R R R R R T T T T T R R z.z.R R R R R T T R R R R "
|
||||
};
|
||||
|
|
@ -0,0 +1,43 @@
|
|||
/* XPM */
|
||||
static char *result[] = {
|
||||
/* columns rows colors chars-per-pixel */
|
||||
"32 32 5 1 ",
|
||||
" c #222222",
|
||||
". c gray20",
|
||||
"X c gray34",
|
||||
"o c gray39",
|
||||
"O c #979797",
|
||||
/* pixels */
|
||||
"XX..XX.XXXXXoooXXXXXXX.........X",
|
||||
"X.........XoooooXOOOO....XX..XOO",
|
||||
"...XooOOoOOoOO...oOOooooX. .XX..",
|
||||
"..XooOOoXXoOOoX...oOOoXX. .XX.",
|
||||
"X.... XX....XOOX.....XXoOOoXXXX",
|
||||
". . .... ..XOOX.XXXXXoOOoOOo",
|
||||
"XXX...XXX .oOOXXXX..........XX",
|
||||
"XoooOOooXX. XXoXXXOOoX.....XOXXX",
|
||||
"...OOo... ...XXXX..XoooX...X...",
|
||||
"X. .OOXX...XOX.......ooooXooX.X",
|
||||
"..XXooX......XXX. XXXXOOo.. ..",
|
||||
"XoooOOXo..XooX.... .OOOo..... ",
|
||||
"oooooooXXoXXooXooXXooooOOooOO X",
|
||||
"oOoOOXXoooooOOooXX..XXooooOO....",
|
||||
"OOOXXX.OOXOOOoXX... ..XXX..XXXX",
|
||||
"XooX....XXXXOO. . .XXXooXXooXX",
|
||||
"oooOOXX......XXXXoooOOooooOOOOXo",
|
||||
"OOOOoooX...XXXXoOOoOOooXXOOOoooo",
|
||||
"oXX... ....XooXXOOoX.....oOOOOo",
|
||||
"X... . .XX..XX..XXXXXX...ooooo",
|
||||
".ooOOo..XXoOOo.. ..oooOOooX....",
|
||||
"oOOOo....oOOXXX .XXXOOOooooXX..",
|
||||
" .OOX.. . .XXOOOOoXXXXoOOOOoo.",
|
||||
"..XXXXXX. .XXoooOoooXXoOOOOoX..",
|
||||
"XXX...XXOX.XX...OOOo...XX....XXX",
|
||||
"XX......XXXX......XoX......XXXoo",
|
||||
"ooOOoXXX. .X...XX... .XXooOOXO",
|
||||
"oOOoXOOoOX ..XXX. . ...XXXoOOO",
|
||||
"ooXXX.....XXX......XoOOooX.....X",
|
||||
"XoooXXX..XXX....XXoOOoOOooX..XXX",
|
||||
"OOX.... .oOOOX...Xooo. .....XX",
|
||||
". . . .oOOooOOXXOooooX ..XXoo"
|
||||
};
|
||||
|
|
@ -0,0 +1,61 @@
|
|||
# **************************************************************************** #
|
||||
# #
|
||||
# ::: :::::::: #
|
||||
# Makefile :+: :+: :+: #
|
||||
# +:+ +:+ +:+ #
|
||||
# By: lfirmin lfirmim@student.42.fr> +#+ +:+ +#+ #
|
||||
# +#+#+#+#+#+ +#+ #
|
||||
# Created: 2024/08/12 07:07:31 by lfirmin #+# #+# #
|
||||
# Updated: 2024/08/12 09:15:05 by lfirmin ### ########.fr #
|
||||
# #
|
||||
# **************************************************************************** #
|
||||
|
||||
NAME = libftprintf.a
|
||||
HEADER = ./
|
||||
SRC = ft_putchar.c ft_put_ptr.c ft_conv_ith.c ft_hex_len.c \
|
||||
ft_sorting.c ft_printf.c ft_print_ith.c ft_printchar.c \
|
||||
ft_printstr.c ft_printpercent.c ft_print_unsigned.c \
|
||||
ft_print_nbr.c ft_print_ptr.c ft_adrr_len.c ft_print_null.c \
|
||||
ft_itoa.c ft_unsigned_itoa.c ft_count.c
|
||||
|
||||
CC = cc
|
||||
CFLAGS = -Wall -Wextra -Werror
|
||||
INCLUDE = -I $(HEADER)
|
||||
OBJ_DIR = obj/
|
||||
OBJ = $(addprefix $(OBJ_DIR), $(SRC:.c=.o))
|
||||
|
||||
|
||||
GREEN = \033[0;32m
|
||||
YELLOW = \033[0;33m
|
||||
RESET = \033[0m
|
||||
WHITE = \033[0;97m
|
||||
|
||||
LOADING_CHARS = ⠋ ⠙ ⠹ ⠸ ⠼ ⠴ ⠦ ⠧ ⠇ ⠏
|
||||
|
||||
all: $(NAME)
|
||||
|
||||
$(NAME): $(OBJ)
|
||||
@printf "$(YELLOW)Compiling ft_printf, Please wait...$(RESET)"
|
||||
@for char in $(LOADING_CHARS); do \
|
||||
printf "\r$(YELLOW)Compiling ft_print, Please wait... $$char$(RESET)"; \
|
||||
sleep 0.1; \
|
||||
done
|
||||
@ar rc $(NAME) $(OBJ)``
|
||||
@ranlib $(NAME)
|
||||
@printf "\r$(GREEN)Great news ! $(WHITE)ft_printf compiled successfully ! $(RESET)\n"
|
||||
|
||||
$(OBJ_DIR)%.o: %.c
|
||||
@mkdir -p $(OBJ_DIR)
|
||||
@$(CC) $(CFLAGS) $(INCLUDE) -c $< -o $@
|
||||
|
||||
clean:
|
||||
@rm -rf $(OBJ_DIR)
|
||||
@printf "$(WHITE)Clean process completed for $(GREEN)Ft_printf.$(RESET)\n"
|
||||
|
||||
fclean: clean
|
||||
@rm -f $(NAME)
|
||||
@printf "$(WHITE)Full clean process completed for $(GREEN)Ft_printf.$(RESET)\n"
|
||||
|
||||
re: fclean all
|
||||
|
||||
.PHONY: all clean fclean re
|
||||
|
|
@ -0,0 +1,48 @@
|
|||
# ft_printf_fd
|
||||
|
||||
Your own implementation of the printf function with file descriptor support.
|
||||
|
||||
## 💡 About
|
||||
The ft_printf_fd project is an extension of ft_printf that allows writing to any file descriptor. You will learn about file descriptors, variadic arguments and formatted output conversion. This project enhances the original printf functionality by adding the ability to choose the output destination.
|
||||
|
||||
## 🛠️ Supported Conversions
|
||||
The function handles the following conversions:
|
||||
* `%c` - Single character
|
||||
* `%s` - String
|
||||
* `%p` - Pointer address
|
||||
* `%d` - Decimal (base 10) integer
|
||||
* `%i` - Integer in base 10
|
||||
* `%u` - Unsigned decimal (base 10) integer
|
||||
* `%x` - Hexadecimal (base 16) integer lowercase
|
||||
* `%X` - Hexadecimal (base 16) integer uppercase
|
||||
* `%%` - Percentage sign
|
||||
|
||||
## 📋 Usage
|
||||
```c
|
||||
#include "ft_printf_fd.h"
|
||||
|
||||
int main(void)
|
||||
{
|
||||
// Write to stdout (fd 1)
|
||||
ft_printf_fd(1, "Hello %s!\n", "world");
|
||||
|
||||
// Write to stderr (fd 2)
|
||||
ft_printf_fd(2, "Error: %d\n", 42);
|
||||
|
||||
// Write to a file
|
||||
int fd = open("output.txt", O_WRONLY | O_CREAT, 0644);
|
||||
ft_printf_fd(fd, "Number: %d\n", 42);
|
||||
close(fd);
|
||||
|
||||
return (0);
|
||||
}
|
||||
```
|
||||
|
||||
## ⚠️ Function Prototype
|
||||
```c
|
||||
int ft_printf_fd(int fd, const char *format, ...);
|
||||
```
|
||||
Returns the number of characters printed (excluding the null byte used to end output to strings).
|
||||
|
||||
## 📊 Expected Output
|
||||
The function should work exactly like the original printf, handling all the specified conversions correctly, but writing to the specified file descriptor instead of stdout.
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* ft_adrr_len.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: lfirmin <lfirmin@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/06/19 05:16:57 by lfirmin #+# #+# */
|
||||
/* Updated: 2024/06/19 07:50:34 by lfirmin ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
#include "ftprintf.h"
|
||||
|
||||
int ft_adrr_len(unsigned long long nbr)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (nbr == 0)
|
||||
return (1);
|
||||
i = 0;
|
||||
while (nbr != 0)
|
||||
{
|
||||
i++;
|
||||
nbr = nbr / 16;
|
||||
}
|
||||
return (i);
|
||||
}
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* ft_conv_ith.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: lfirmin <lfirmin@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/06/19 04:46:47 by lfirmin #+# #+# */
|
||||
/* Updated: 2024/06/19 07:46:23 by lfirmin ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
#include "ftprintf.h"
|
||||
|
||||
void ft_conv_ith(int fd, unsigned int nbr, const char str)
|
||||
{
|
||||
if (nbr >= 16)
|
||||
{
|
||||
ft_conv_ith(fd, (nbr / 16), str);
|
||||
nbr = nbr % 16;
|
||||
}
|
||||
if (nbr <= 9)
|
||||
ft_putchar(fd, nbr + '0');
|
||||
else
|
||||
{
|
||||
if (str == 'x')
|
||||
ft_putchar(fd, nbr - 10 + 'a');
|
||||
else if (str == 'X')
|
||||
ft_putchar(fd, nbr - 10 + 'A');
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* ft_count.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: lfirmin <lfirmin@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/06/19 04:52:36 by lfirmin #+# #+# */
|
||||
/* Updated: 2024/06/19 07:47:07 by lfirmin ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
#include "ftprintf.h"
|
||||
|
||||
size_t ft_count(long long int n)
|
||||
{
|
||||
size_t c;
|
||||
|
||||
c = 0;
|
||||
if (n <= 0)
|
||||
c = 1;
|
||||
while (n != 0)
|
||||
{
|
||||
n = n / 10;
|
||||
c++;
|
||||
}
|
||||
return (c);
|
||||
}
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* ft_hex_len.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: lfirmin <lfirmin@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/06/19 04:45:50 by lfirmin #+# #+# */
|
||||
/* Updated: 2024/06/19 07:49:59 by lfirmin ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
#include "ftprintf.h"
|
||||
|
||||
int ft_hex_len(unsigned int nbr)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (nbr == 0)
|
||||
return (1);
|
||||
i = 0;
|
||||
while (nbr != 0)
|
||||
{
|
||||
i++;
|
||||
nbr = nbr / 16;
|
||||
}
|
||||
return (i);
|
||||
}
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* ft_itoa.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: lfirmin <lfirmin@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/06/19 04:51:58 by lfirmin #+# #+# */
|
||||
/* Updated: 2024/06/19 04:53:33 by lfirmin ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
#include "ftprintf.h"
|
||||
|
||||
char *ft_itoa(int n)
|
||||
{
|
||||
char *str;
|
||||
size_t size;
|
||||
long int num;
|
||||
|
||||
num = n;
|
||||
size = ft_count(num);
|
||||
str = (char *)malloc(size + 1);
|
||||
if (!str)
|
||||
return (NULL);
|
||||
str[size] = '\0';
|
||||
if (num < 0)
|
||||
num = -num;
|
||||
while (size--)
|
||||
{
|
||||
str[size] = num % 10 + '0';
|
||||
num = num / 10;
|
||||
if (n < 0 && size == 0)
|
||||
str[size] = '-';
|
||||
}
|
||||
return (str);
|
||||
}
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* ft_print_ith.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: lfirmin <lfirmin@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/06/19 04:44:27 by lfirmin #+# #+# */
|
||||
/* Updated: 2024/06/19 04:49:51 by lfirmin ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
#include "ftprintf.h"
|
||||
|
||||
int ft_print_ith(int fd, unsigned int nbr, const char str)
|
||||
{
|
||||
if (nbr == 0)
|
||||
return (write(fd, "0", 1));
|
||||
ft_conv_ith(fd, nbr, str);
|
||||
return (ft_hex_len(nbr));
|
||||
}
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* ft_print_nbr.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: lfirmin <lfirmin@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/06/19 04:44:27 by lfirmin #+# #+# */
|
||||
/* Updated: 2024/06/19 04:52:47 by lfirmin ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
#include "ftprintf.h"
|
||||
|
||||
int ft_print_nbr(int fd, int nb)
|
||||
{
|
||||
int len;
|
||||
char *str;
|
||||
|
||||
str = ft_itoa(nb);
|
||||
len = ft_printstr(fd, str);
|
||||
free (str);
|
||||
return (len);
|
||||
}
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* ft_print_null.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: lfirmin <lfirmin@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/06/19 07:01:50 by lfirmin #+# #+# */
|
||||
/* Updated: 2024/06/19 07:46:39 by lfirmin ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
#include "ftprintf.h"
|
||||
|
||||
int ft_print_null(int fd)
|
||||
{
|
||||
write(fd, "(null)", 6);
|
||||
return (6);
|
||||
}
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* ft_print_ptr.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: lfirmin <lfirmin@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/06/19 04:44:27 by lfirmin #+# #+# */
|
||||
/* Updated: 2024/06/19 07:51:10 by lfirmin ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
#include "ftprintf.h"
|
||||
|
||||
int ft_print_ptr(int fd, unsigned long long ptr)
|
||||
{
|
||||
int print_length;
|
||||
|
||||
if (ptr == 0)
|
||||
{
|
||||
write(fd, "(nil)", 5);
|
||||
return (5);
|
||||
}
|
||||
print_length = 2;
|
||||
write(fd, "0x", 2);
|
||||
{
|
||||
ft_put_ptr(fd, ptr);
|
||||
print_length = print_length + ft_adrr_len(ptr);
|
||||
}
|
||||
return (print_length);
|
||||
}
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* ft_print_unsigned.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: lfirmin <lfirmin@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/06/19 04:50:53 by lfirmin #+# #+# */
|
||||
/* Updated: 2024/06/19 07:51:31 by lfirmin ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
#include "ftprintf.h"
|
||||
|
||||
int ft_print_unsigned(int fd, unsigned int nb)
|
||||
{
|
||||
int len;
|
||||
char *str;
|
||||
|
||||
str = ft_unsigned_itoa(nb);
|
||||
len = ft_printstr(fd, str);
|
||||
free (str);
|
||||
return (len);
|
||||
}
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* ft_printchar.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: lfirmin <lfirmin@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/06/19 04:56:02 by lfirmin #+# #+# */
|
||||
/* Updated: 2024/06/19 04:56:25 by lfirmin ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
#include "ftprintf.h"
|
||||
|
||||
int ft_printchar(int fd, int c)
|
||||
{
|
||||
write (fd, &c, 1);
|
||||
return (1);
|
||||
}
|
||||
|
|
@ -0,0 +1,39 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* ft_printf.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: lfirmin <lfirmin@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/06/19 04:44:27 by lfirmin #+# #+# */
|
||||
/* Updated: 2024/06/19 04:55:41 by lfirmin ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
#include "ftprintf.h"
|
||||
|
||||
int ft_printf_fd(int fd, const char *str, ...)
|
||||
{
|
||||
int i;
|
||||
va_list list;
|
||||
int count;
|
||||
|
||||
i = 0;
|
||||
count = 0;
|
||||
va_start(list, str);
|
||||
while (str[i])
|
||||
{
|
||||
if (str[i] == '%')
|
||||
{
|
||||
count += ft_sorting(list, str[i + 1], fd);
|
||||
i++;
|
||||
}
|
||||
else
|
||||
{
|
||||
write (fd, &str[i], 1);
|
||||
count++;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
va_end(list);
|
||||
return (count);
|
||||
}
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* ft_printpercent.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: lfirmin <lfirmin@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/06/19 04:47:38 by lfirmin #+# #+# */
|
||||
/* Updated: 2024/06/19 07:50:08 by lfirmin ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
#include "ftprintf.h"
|
||||
|
||||
int ft_printpercent(int fd)
|
||||
{
|
||||
ft_putchar(fd, '%');
|
||||
return (1);
|
||||
}
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* ft_printstr.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: lfirmin <lfirmin@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/06/19 04:55:08 by lfirmin #+# #+# */
|
||||
/* Updated: 2024/06/19 07:46:05 by lfirmin ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
#include "ftprintf.h"
|
||||
|
||||
int ft_printstr(int fd, char *s)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (!s)
|
||||
return (ft_print_null(fd));
|
||||
i = 0;
|
||||
while (s[i])
|
||||
{
|
||||
write (fd, &s[i], 1);
|
||||
i++;
|
||||
}
|
||||
return (i);
|
||||
}
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* ft_put_ptr.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: lfirmin <lfirmin@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/06/19 04:54:06 by lfirmin #+# #+# */
|
||||
/* Updated: 2024/06/19 07:46:52 by lfirmin ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
#include "ftprintf.h"
|
||||
|
||||
void ft_put_ptr(int fd, unsigned long long num)
|
||||
{
|
||||
if (num >= 16)
|
||||
{
|
||||
ft_put_ptr(fd, num / 16);
|
||||
ft_put_ptr(fd, num % 16);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (num <= 9)
|
||||
ft_putchar(fd, num + '0');
|
||||
else
|
||||
ft_putchar(fd, num - 10 + 'a');
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* ft_putchar.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: lfirmin <lfirmin@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/06/19 04:45:04 by lfirmin #+# #+# */
|
||||
/* Updated: 2024/06/19 04:49:11 by lfirmin ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
#include "ftprintf.h"
|
||||
|
||||
void ft_putchar(int fd, char c)
|
||||
{
|
||||
write(fd, &c, 1);
|
||||
}
|
||||
|
|
@ -0,0 +1,34 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* ft_sorting.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: lfirmin <lfirmin@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/06/19 04:56:45 by lfirmin #+# #+# */
|
||||
/* Updated: 2024/06/19 07:51:17 by lfirmin ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
#include "ftprintf.h"
|
||||
|
||||
int ft_sorting(va_list list, const char str, int fd)
|
||||
{
|
||||
int count;
|
||||
|
||||
count = 0;
|
||||
if (str == 'c')
|
||||
count += ft_printchar(fd, va_arg(list, int));
|
||||
else if (str == 's')
|
||||
count += ft_printstr(fd, va_arg(list, char *));
|
||||
else if (str == 'p')
|
||||
count += ft_print_ptr(fd, va_arg(list, unsigned long long));
|
||||
else if (str == 'd' || str == 'i')
|
||||
count += ft_print_nbr(fd, va_arg(list, int));
|
||||
else if (str == 'u')
|
||||
count += ft_print_unsigned(fd, va_arg(list, unsigned int));
|
||||
else if (str == 'x' || str == 'X')
|
||||
count += ft_print_ith(fd, va_arg(list, unsigned int), str);
|
||||
else if (str == '%')
|
||||
count += ft_printpercent(fd);
|
||||
return (count);
|
||||
}
|
||||
|
|
@ -0,0 +1,34 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* ft_unsigned_itoa.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: lfirmin <lfirmin@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/06/19 04:51:27 by lfirmin #+# #+# */
|
||||
/* Updated: 2024/06/19 07:45:46 by lfirmin ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
#include "ftprintf.h"
|
||||
|
||||
char *ft_unsigned_itoa(unsigned int n)
|
||||
{
|
||||
char *str;
|
||||
size_t size;
|
||||
long int num;
|
||||
|
||||
num = n;
|
||||
size = ft_count(num);
|
||||
str = (char *)malloc(size + 1);
|
||||
if (!str)
|
||||
return (NULL);
|
||||
str[size] = '\0';
|
||||
if (num < 0)
|
||||
num = -num;
|
||||
while (size--)
|
||||
{
|
||||
str[size] = num % 10 + '0';
|
||||
num = num / 10;
|
||||
}
|
||||
return (str);
|
||||
}
|
||||
|
|
@ -0,0 +1,43 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* ftprintf.h :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: lfirmin <lfirmin@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/06/19 04:44:27 by lfirmin #+# #+# */
|
||||
/* Updated: 2024/06/19 07:49:08 by lfirmin ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#ifndef FTPRINTF_H
|
||||
# define FTPRINTF_H
|
||||
|
||||
# include <stdarg.h>
|
||||
# include <unistd.h>
|
||||
# include <stdio.h>
|
||||
# include "stdlib.h"
|
||||
|
||||
void ft_putchar(int fd, char c);
|
||||
void ft_put_ptr(int fd, unsigned long long num);
|
||||
void ft_conv_ith(int fd, unsigned int nbr, const char str);
|
||||
|
||||
int ft_hex_len(unsigned int nbr);
|
||||
int ft_sorting(va_list list, const char str, int fd);
|
||||
int ft_printf_fd(int fd, const char *str, ...);
|
||||
int ft_print_ith(int fd, unsigned int nbr, const char str);
|
||||
int ft_printchar(int fd, int c);
|
||||
int ft_printstr(int fd, char *s);
|
||||
int ft_printpercent(int fd);
|
||||
int ft_print_unsigned(int fd, unsigned int nb);
|
||||
int ft_print_nbr(int fd, int nb);
|
||||
int ft_print_ptr(int fd, unsigned long long ptr);
|
||||
int ft_adrr_len(unsigned long long nbr);
|
||||
int ft_print_null(int fd);
|
||||
|
||||
char *ft_itoa(int n);
|
||||
char *ft_unsigned_itoa(unsigned int n);
|
||||
|
||||
size_t ft_count(long long int n);
|
||||
|
||||
#endif
|
||||
|
|
@ -0,0 +1,61 @@
|
|||
# **************************************************************************** #
|
||||
# #
|
||||
# ::: :::::::: #
|
||||
# Makefile :+: :+: :+: #
|
||||
# +:+ +:+ +:+ #
|
||||
# By: lfirmin lfirmim@student.42.fr> +#+ +:+ +#+ #
|
||||
# +#+#+#+#+#+ +#+ #
|
||||
# Created: 2024/08/12 07:07:31 by lfirmin #+# #+# #
|
||||
# Updated: 2024/08/12 09:15:05 by lfirmin ### ########.fr #
|
||||
# #
|
||||
# **************************************************************************** #
|
||||
|
||||
NAME = gnl.a
|
||||
SRCS_DIR = srcs/
|
||||
INCS_DIR = includes/
|
||||
OBJ_DIR = obj/
|
||||
|
||||
SRC = get_next_line.c get_next_line_utils.c
|
||||
|
||||
CC = cc
|
||||
CFLAGS = -Wall -Wextra -Werror
|
||||
INCLUDE = -I $(INCS_DIR)
|
||||
SRCS = $(addprefix $(SRCS_DIR), $(SRC))
|
||||
OBJ = $(addprefix $(OBJ_DIR), $(SRC:.c=.o))
|
||||
|
||||
# Colors
|
||||
GREEN = \033[0;32m
|
||||
YELLOW = \033[0;33m
|
||||
RESET = \033[0m
|
||||
WHITE = \033[0;97m
|
||||
|
||||
# Loading animation
|
||||
LOADING_CHARS = ⠋ ⠙ ⠹ ⠸ ⠼ ⠴ ⠦ ⠧ ⠇ ⠏
|
||||
|
||||
all: $(NAME)
|
||||
|
||||
$(NAME): $(OBJ)
|
||||
@printf "$(YELLOW)Compiling get_next_line, Please wait...$(RESET)"
|
||||
@for char in $(LOADING_CHARS); do \
|
||||
printf "\r$(YELLOW)Compiling get_next_line, Please wait... $$char$(RESET)"; \
|
||||
sleep 0.1; \
|
||||
done
|
||||
@ar rc $(NAME) $(OBJ)
|
||||
@ranlib $(NAME)
|
||||
@printf "\r$(GREEN)fine ! $(WHITE)get_next_line compiled successfully ! $(RESET)\n"
|
||||
|
||||
$(OBJ_DIR)%.o: $(SRCS_DIR)%.c
|
||||
@mkdir -p $(OBJ_DIR)
|
||||
@$(CC) $(CFLAGS) $(INCLUDE) -c $< -o $@
|
||||
|
||||
clean:
|
||||
@rm -rf $(OBJ_DIR)
|
||||
@printf "$(WHITE)Clean process completed for $(GREEN)get_next_line.$(RESET)\n"
|
||||
|
||||
fclean: clean
|
||||
@rm -f $(NAME)
|
||||
@printf "$(WHITE)Full clean process completed for $(GREEN)get_next_line.$(RESET)\n"
|
||||
|
||||
re: fclean all
|
||||
|
||||
.PHONY: all clean fclean re
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* get_next_line.h :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: abelghou <abelghou@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/07/21 19:32:47 by abelghou #+# #+# */
|
||||
/* Updated: 2024/07/23 20:47:15 by abelghou ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#ifndef GET_NEXT_LINE_H
|
||||
# define GET_NEXT_LINE_H
|
||||
|
||||
# ifndef BUFFER_SIZE
|
||||
# define BUFFER_SIZE 10
|
||||
# endif
|
||||
|
||||
# include <stdlib.h>
|
||||
# include <unistd.h>
|
||||
# include <stdio.h>
|
||||
# include <fcntl.h>
|
||||
|
||||
char *ft_substr(char const *s, unsigned int start, size_t len);
|
||||
int ft_strlen_g(const char *str);
|
||||
char *ft_strchr(const char *s, int i);
|
||||
char *ft_strdup_g(const char *s);
|
||||
char *ft_strjoin(char const *s1, char const *s2);
|
||||
char *get_next_line(int fd);
|
||||
|
||||
#endif
|
||||
|
|
@ -0,0 +1,41 @@
|
|||
# get_next_line
|
||||
|
||||
A function that reads a line from a file descriptor.
|
||||
|
||||
## 💡 About
|
||||
The get_next_line project is a programming function that reads a line ending with a newline character from a file descriptor. When calling the function in a loop, it will then allow you to read the text file pointed to by the file descriptor, one line at a time until the end of the file.
|
||||
|
||||
## 🛠️ Function Prototype
|
||||
```c
|
||||
char *get_next_line(int fd);
|
||||
```
|
||||
## 📋 Usage
|
||||
```c
|
||||
#include "get_next_line.h"
|
||||
#include <fcntl.h>
|
||||
|
||||
int main(void)
|
||||
{
|
||||
int fd;
|
||||
char *line;
|
||||
|
||||
fd = open("test.txt", O_RDONLY);
|
||||
while ((line = get_next_line(fd)) != NULL)
|
||||
{
|
||||
printf("%s", line);
|
||||
free(line);
|
||||
}
|
||||
close(fd);
|
||||
return (0);
|
||||
}
|
||||
```
|
||||
|
||||
## ⚠️ Return Value
|
||||
* The line that was read when successful
|
||||
* NULL if there is nothing else to read or if an error occurred
|
||||
|
||||
## 📊 Expected Behavior
|
||||
* Repeated calls to get_next_line() should let you read the text file pointed to by the file descriptor, one line at a time
|
||||
* The function should return the line that was read
|
||||
* If there is nothing else to read or if an error occurred, it should return NULL
|
||||
* The returned line should include the terminating \n character, except if the end of file was reached and does not end with a \n character
|
||||
|
|
@ -0,0 +1,102 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* get_next_line.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: abelghou <abelghou@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/07/17 21:31:24 by abelghou #+# #+# */
|
||||
/* Updated: 2024/07/24 18:17:55 by abelghou ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "../include/get_next_line.h"
|
||||
|
||||
static char *sort_and_store(int fd, char *buf, char *backup)
|
||||
{
|
||||
int read_line;
|
||||
char *char_temp;
|
||||
|
||||
read_line = 1;
|
||||
while (read_line != 0)
|
||||
{
|
||||
read_line = read(fd, buf, BUFFER_SIZE);
|
||||
if (read_line == -1)
|
||||
return (0);
|
||||
else if (read_line == 0)
|
||||
break ;
|
||||
buf[read_line] = '\0';
|
||||
if (!backup)
|
||||
backup = ft_strdup_g("");
|
||||
if (!backup)
|
||||
return (NULL);
|
||||
char_temp = backup;
|
||||
backup = ft_strjoin(char_temp, buf);
|
||||
free(char_temp);
|
||||
char_temp = NULL;
|
||||
if (ft_strchr (buf, '\n'))
|
||||
break ;
|
||||
}
|
||||
return (backup);
|
||||
}
|
||||
|
||||
static char *extract(char *line)
|
||||
{
|
||||
size_t count;
|
||||
char *backup;
|
||||
|
||||
count = 0;
|
||||
while (line[count] != '\n' && line[count] != '\0')
|
||||
count++;
|
||||
if (line[count] == '\0' || line[1] == '\0')
|
||||
return (0);
|
||||
backup = ft_substr(line, count + 1, ft_strlen_g(line) - count);
|
||||
if (!backup)
|
||||
return (NULL);
|
||||
if (*backup == '\0')
|
||||
{
|
||||
free (backup);
|
||||
backup = NULL;
|
||||
}
|
||||
line[count + 1] = '\0';
|
||||
return (backup);
|
||||
}
|
||||
|
||||
char *get_next_line(int fd)
|
||||
{
|
||||
char *line;
|
||||
char *buf;
|
||||
char *temp;
|
||||
static char *backup;
|
||||
|
||||
if (fd < 0 || BUFFER_SIZE <= 0)
|
||||
return (free(backup), backup = NULL, NULL);
|
||||
buf = (char *)malloc(sizeof(char) * (BUFFER_SIZE + 1));
|
||||
if (!buf)
|
||||
return (free(backup), backup = NULL, NULL);
|
||||
line = sort_and_store(fd, buf, backup);
|
||||
free(buf);
|
||||
buf = NULL;
|
||||
if (!line)
|
||||
return (free(backup), backup = NULL, NULL);
|
||||
backup = extract(line);
|
||||
temp = ft_strdup_g(line);
|
||||
free(line);
|
||||
if (!temp)
|
||||
return (free(backup), backup = NULL, NULL);
|
||||
return (temp);
|
||||
}
|
||||
|
||||
// int main()
|
||||
// {
|
||||
// int fd;
|
||||
// char *line;
|
||||
// fd = open("fd.txt", O_RDONLY);
|
||||
// while((line = get_next_line(fd)) != NULL)
|
||||
// {
|
||||
// printf("%s", line);
|
||||
// free(line);
|
||||
// }
|
||||
// line = get_next_line(fd);
|
||||
// close(fd);
|
||||
// }
|
||||
|
|
@ -0,0 +1,106 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* get_next_line_utils.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: abelghou <abelghou@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/07/21 19:34:18 by abelghou #+# #+# */
|
||||
/* Updated: 2024/07/23 20:06:41 by abelghou ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "../include/get_next_line.h"
|
||||
|
||||
char *ft_substr(char const *s, unsigned int start, size_t len)
|
||||
{
|
||||
size_t i;
|
||||
size_t j;
|
||||
char *str;
|
||||
|
||||
str = (char *)malloc(sizeof(*s) * (len + 1));
|
||||
if (str == 0)
|
||||
return (NULL);
|
||||
i = 0;
|
||||
j = 0;
|
||||
while (s[i])
|
||||
{
|
||||
if (i >= start && j < len)
|
||||
{
|
||||
str[j] = s[i];
|
||||
j++;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
str[j] = '\0';
|
||||
return (str);
|
||||
}
|
||||
|
||||
int ft_strlen_g(const char *str)
|
||||
{
|
||||
int i;
|
||||
|
||||
i = 0;
|
||||
while (str[i])
|
||||
i++;
|
||||
return (i);
|
||||
}
|
||||
|
||||
char *ft_strchr(const char *s, int i)
|
||||
{
|
||||
while (*s)
|
||||
{
|
||||
if (*s == i)
|
||||
return ((char *)s);
|
||||
s++;
|
||||
}
|
||||
if (i == '\0')
|
||||
return ((char *)s);
|
||||
return (0);
|
||||
}
|
||||
|
||||
char *ft_strdup_g(const char *s)
|
||||
{
|
||||
int i;
|
||||
int j;
|
||||
char *str;
|
||||
|
||||
i = 0;
|
||||
j = ft_strlen_g(s);
|
||||
str = (char *)malloc(sizeof(*str) * (j + 1));
|
||||
if (!str)
|
||||
return (NULL);
|
||||
while (i < j)
|
||||
{
|
||||
str[i] = s[i];
|
||||
i++;
|
||||
}
|
||||
str[i] = '\0';
|
||||
return (str);
|
||||
}
|
||||
|
||||
char *ft_strjoin(char const *s1, char const *s2)
|
||||
{
|
||||
int i;
|
||||
int j;
|
||||
char *str;
|
||||
|
||||
i = 0;
|
||||
j = 0;
|
||||
str = (char *)malloc(sizeof(char) * (ft_strlen_g(s1) \
|
||||
+ ft_strlen_g(s2) + 1));
|
||||
if (str == NULL)
|
||||
return (NULL);
|
||||
while (s1[i] != '\0')
|
||||
{
|
||||
str[i] = s1[i];
|
||||
i++;
|
||||
}
|
||||
while (s2[j] != '\0')
|
||||
{
|
||||
str[i + j] = s2[j];
|
||||
j++;
|
||||
}
|
||||
str[i + j] = '\0';
|
||||
return (str);
|
||||
}
|
||||
|
|
@ -0,0 +1,108 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* so_long.h :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: lfirmin <lfirmin@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/11/12 11:00:04 by lfirmin #+# #+# */
|
||||
/* Updated: 2024/11/17 13:53:20 by lfirmin ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* so_long.h :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: lfirmin <lfirmin@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/03/17 10:00:00 by lfirmin #+# #+# */
|
||||
/* Updated: 2024/03/17 10:00:00 by lfirmin ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#ifndef SO_LONG_H
|
||||
# define SO_LONG_H
|
||||
|
||||
# define KEY_ESC 65307
|
||||
# define KEY_W 119
|
||||
# define KEY_A 97
|
||||
# define KEY_S 115
|
||||
# define KEY_D 100
|
||||
# define KEY_UP 65362
|
||||
# define KEY_LEFT 65361
|
||||
# define KEY_DOWN 65364
|
||||
# define KEY_RIGHT 65363
|
||||
|
||||
# include "../minilibx-linux/mlx.h"
|
||||
# include "../gnl/include/get_next_line.h"
|
||||
# include "../libft/libft.h"
|
||||
# include "../ft_printf_fd/ftprintf.h"
|
||||
# include <stdio.h>
|
||||
|
||||
typedef struct s_data
|
||||
{
|
||||
char **map;
|
||||
int colect;
|
||||
int e;
|
||||
int p;
|
||||
} t_data;
|
||||
|
||||
typedef struct s_game
|
||||
{
|
||||
void *mlx;
|
||||
void *win;
|
||||
void *img_floor;
|
||||
void *img_wall;
|
||||
void *img_player;
|
||||
void *img_collect;
|
||||
void *img_exit;
|
||||
int player_x;
|
||||
int player_y;
|
||||
int moves;
|
||||
int collectibles;
|
||||
char **map;
|
||||
int map_width;
|
||||
int map_height;
|
||||
int exit_x;
|
||||
int exit_y;
|
||||
t_data *data;
|
||||
} t_game;
|
||||
|
||||
/* Utils functions */
|
||||
t_data *init_data(void);
|
||||
void clean_data(t_data *data);
|
||||
int init_game(t_game *game);
|
||||
int find_player_pos(t_game *game);
|
||||
void draw_map(t_game *game);
|
||||
int close_game(t_game *game);
|
||||
void move_player(t_game *game, int new_x, int new_y);
|
||||
int is_valid_move(t_game *game, int x, int y);
|
||||
int key_hook(int keycode, t_game *game);
|
||||
void find_exit_pos(t_game *game);
|
||||
void draw_tile(t_game *game, char current, int x, int y);
|
||||
int init_images(t_game *game);
|
||||
int init_window(t_game *game);
|
||||
int check_player(t_game *game, int x, int y, int *found);
|
||||
void init_struct(t_game *game);
|
||||
|
||||
/* Map parsing functions */
|
||||
int get_map(char *filename, t_data *data);
|
||||
int ft_count_lines(char *file);
|
||||
int check_close(t_data *data);
|
||||
int check_rectangle(t_data *data);
|
||||
int check_playable(t_data *data);
|
||||
char **copy_map(char **original);
|
||||
int play_check(char **map, int x, int y);
|
||||
void free_map(char **map);
|
||||
int is_playable(t_data *data, int x, int y);
|
||||
int check_first_last_lines(t_data *data, int i);
|
||||
int pars_map(t_data *data, char *file);
|
||||
int have_require_item(t_data *data);
|
||||
char *add_newline_if_needed(char *line);
|
||||
int check_char(t_data *data);
|
||||
int is_ber(char *file);
|
||||
int get_map_2(int i, int nb_lines, t_data *data, int fd); /* in utils_4 */
|
||||
|
||||
#endif
|
||||
|
|
@ -0,0 +1,65 @@
|
|||
# **************************************************************************** #
|
||||
# #
|
||||
# ::: :::::::: #
|
||||
# makefile :+: :+: :+: #
|
||||
# +:+ +:+ +:+ #
|
||||
# By: lfirmin <marvin@42.fr> +#+ +:+ +#+ #
|
||||
# +#+#+#+#+#+ +#+ #
|
||||
# Created: 2024/05/19 12:59:31 by lfirmin #+# #+# #
|
||||
# Updated: 2024/05/22 15:18:38 by lfirmin ### ########.fr #
|
||||
# #
|
||||
# **************************************************************************** #
|
||||
|
||||
NAME = libft.a
|
||||
HEADER = ./
|
||||
SRC = ft_isalnum.c ft_isprint.c ft_memcmp.c ft_putchar_fd.c ft_split.c \
|
||||
ft_strlcat.c ft_strncmp.c ft_substr.c ft_atoi.c ft_isalpha.c \
|
||||
ft_itoa.c ft_memcpy.c ft_putendl_fd.c ft_strchr.c ft_strlcpy.c \
|
||||
ft_strnstr.c ft_tolower.c ft_bzero.c ft_isascii.c ft_strtrim.c \
|
||||
ft_memmove.c ft_putnbr_fd.c ft_strdup.c ft_strlen.c ft_strrchr.c \
|
||||
ft_toupper.c ft_calloc.c ft_isdigit.c ft_memchr.c ft_memset.c \
|
||||
ft_putstr_fd.c ft_strjoin.c ft_strmapi.c ft_striteri.c \
|
||||
ft_lstnew_bonus.c ft_lstadd_front_bonus.c ft_lstsize_bonus.c \
|
||||
ft_lstlast_bonus.c ft_lstadd_back_bonus.c ft_lstdelone_bonus.c \
|
||||
ft_lstclear_bonus.c ft_lstiter_bonus.c ft_lstmap_bonus.c ft_strcmp.c \
|
||||
ft_atoll.c ft_print_array.c ft_strcat.c
|
||||
CC = cc
|
||||
CFLAGS = -Wall -Wextra -Werror -g3
|
||||
INCLUDE = -I $(HEADER)
|
||||
OBJ_DIR = obj/
|
||||
OBJ = $(addprefix $(OBJ_DIR), $(SRC:.c=.o))
|
||||
|
||||
GREEN = \033[0;32m
|
||||
YELLOW = \033[0;33m
|
||||
RESET = \033[0m
|
||||
WHITE = \033[0;97m
|
||||
|
||||
LOADING_CHARS = ⠋ ⠙ ⠹ ⠸ ⠼ ⠴ ⠦ ⠧ ⠇ ⠏
|
||||
|
||||
all: $(NAME)
|
||||
|
||||
$(NAME): $(OBJ)
|
||||
@printf "$(YELLOW)Compiling libft, Please wait...$(RESET)"
|
||||
@for char in $(LOADING_CHARS); do \
|
||||
printf "\r$(YELLOW)Compiling libft, Please wait... $$char$(RESET)"; \
|
||||
sleep 0.1; \
|
||||
done
|
||||
@ar rc $(NAME) $(OBJ)
|
||||
@ranlib $(NAME)
|
||||
@printf "\r$(GREEN)Great news ! $(WHITE)Libft compiled successfully ! $(RESET)\n"
|
||||
|
||||
$(OBJ_DIR)%.o: %.c
|
||||
@mkdir -p $(OBJ_DIR)
|
||||
@$(CC) $(CFLAGS) $(INCLUDE) -c $< -o $@
|
||||
|
||||
clean:
|
||||
@rm -rf $(OBJ_DIR)
|
||||
@printf "$(WHITE)Clean process completed for $(GREEN)Libft.$(RESET)\n"
|
||||
|
||||
fclean: clean
|
||||
@rm -f $(NAME)
|
||||
@printf "$(WHITE)Full clean process completed for $(GREEN)Libft.$(RESET)\n"
|
||||
|
||||
re: fclean all
|
||||
|
||||
.PHONY: all clean fclean re
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* ft_atoi.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: lfirmin <marvin@42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/05/21 10:09:46 by lfirmin #+# #+# */
|
||||
/* Updated: 2024/06/03 21:02:02 by lfirmin ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
#include "libft.h"
|
||||
|
||||
int ft_atoi(const char *str)
|
||||
{
|
||||
int i;
|
||||
int s;
|
||||
int m;
|
||||
|
||||
i = 0;
|
||||
s = 0;
|
||||
m = 0;
|
||||
while ((str[i] <= 13 && str[i] >= 9) || str[i] == 32)
|
||||
i++;
|
||||
while (str[i] == '-' || str[i] == '+')
|
||||
{
|
||||
s++;
|
||||
if (s >= 2)
|
||||
return (0);
|
||||
if (str[i] == '-')
|
||||
m++;
|
||||
i++;
|
||||
}
|
||||
s = 0;
|
||||
while (str[i] >= 48 && str[i] <= 57)
|
||||
s = s * 10 + (str[i++] - 48);
|
||||
if (m % 2 == 1)
|
||||
s = s * -1;
|
||||
return (s);
|
||||
}
|
||||
|
|
@ -0,0 +1,38 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* ft_atoll.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: lfirmin <lfirmin@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/11/03 17:25:06 by lfirmin #+# #+# */
|
||||
/* Updated: 2024/11/03 17:25:33 by lfirmin ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "libft.h"
|
||||
|
||||
long long ft_atoll(const char *str)
|
||||
{
|
||||
long long result;
|
||||
int sign;
|
||||
|
||||
result = 0;
|
||||
sign = 1;
|
||||
while (*str == ' ' || (*str >= 9 && *str <= 13))
|
||||
str++;
|
||||
if (*str == '-' || *str == '+')
|
||||
{
|
||||
if (*str == '-')
|
||||
sign = -1;
|
||||
str++;
|
||||
}
|
||||
while (*str >= '0' && *str <= '9')
|
||||
{
|
||||
if (result > INT_MAX || result < INT_MIN)
|
||||
return (2147483648);
|
||||
result = result * 10 + (*str - '0');
|
||||
str++;
|
||||
}
|
||||
return (result * sign);
|
||||
}
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* ft_bzero.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: lfirmin <marvin@42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/05/21 00:20:00 by lfirmin #+# #+# */
|
||||
/* Updated: 2024/05/30 19:49:23 by lfirmin ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
#include "libft.h"
|
||||
|
||||
void *ft_bzero(void *b, size_t len)
|
||||
{
|
||||
size_t i;
|
||||
unsigned char *r;
|
||||
|
||||
r = (unsigned char *)b;
|
||||
i = 0;
|
||||
while (i < len)
|
||||
r[i++] = '\0';
|
||||
return (b);
|
||||
}
|
||||
|
|
@ -0,0 +1,31 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* ft_calloc.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: lfirmin <marvin@42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/05/21 11:14:02 by lfirmin #+# #+# */
|
||||
/* Updated: 2024/06/03 18:15:05 by lfirmin ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
#include "libft.h"
|
||||
|
||||
void *ft_calloc(size_t c, size_t s)
|
||||
{
|
||||
void *ptr;
|
||||
long long int tmp1;
|
||||
long long int tmp2;
|
||||
|
||||
tmp1 = (long long int)c;
|
||||
tmp2 = (long long int)s;
|
||||
if ((c > 4294967295 || s > 4294967295) && (tmp1 < 0 && tmp2 < 0))
|
||||
return (NULL);
|
||||
if (tmp1 * tmp2 < 0)
|
||||
return (NULL);
|
||||
ptr = malloc(c * s);
|
||||
if (!ptr)
|
||||
return (NULL);
|
||||
ft_bzero(ptr, c * s);
|
||||
return (ptr);
|
||||
}
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* ft_isalnum.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: lfirmin <lfirmin@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/05/20 02:29:49 by lfirmin #+# #+# */
|
||||
/* Updated: 2024/05/22 09:59:44 by lfirmin ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
#include "libft.h"
|
||||
|
||||
int ft_isalnum(int c)
|
||||
{
|
||||
if ((c >= 97 && c <= 122) || (c >= 48 && c <= 57) || (c >= 65 && c <= 90))
|
||||
return (1);
|
||||
return (0);
|
||||
}
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* ft_isalpha.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: lfirmin <lfirmin@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/05/20 01:55:52 by lfirmin #+# #+# */
|
||||
/* Updated: 2024/05/22 09:59:44 by lfirmin ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
#include "libft.h"
|
||||
|
||||
int ft_isalpha(int c)
|
||||
{
|
||||
if ((c >= 97 && c <= 122) || (c >= 65 && c <= 90))
|
||||
return (1);
|
||||
return (0);
|
||||
}
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* ft_isascii.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: lfirmin <lfirmin@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/05/20 02:36:17 by lfirmin #+# #+# */
|
||||
/* Updated: 2024/05/22 09:59:44 by lfirmin ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
#include "libft.h"
|
||||
|
||||
int ft_isascii(int c)
|
||||
{
|
||||
if (c >= 0 && c <= 127)
|
||||
return (1);
|
||||
return (0);
|
||||
}
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* ft_isdigit.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: lfirmin <lfirmin@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/05/20 02:31:51 by lfirmin #+# #+# */
|
||||
/* Updated: 2024/05/22 09:59:44 by lfirmin ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
#include "libft.h"
|
||||
|
||||
int ft_isdigit(int c)
|
||||
{
|
||||
if (c >= 48 && c <= 57)
|
||||
return (1);
|
||||
return (0);
|
||||
}
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* ft_isprint.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: lfirmin <lfirmin@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/05/20 02:38:24 by lfirmin #+# #+# */
|
||||
/* Updated: 2024/05/23 06:21:54 by lfirmin ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
#include "libft.h"
|
||||
|
||||
int ft_isprint(int c)
|
||||
{
|
||||
if (((c >= 0 && c <= 31) || c >= 127 || c == EOF))
|
||||
return (0);
|
||||
return (1);
|
||||
}
|
||||
|
|
@ -0,0 +1,51 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* ft_itoa.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: lfirmin <lfirmin@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/05/24 12:59:00 by lfirmin #+# #+# */
|
||||
/* Updated: 2024/05/29 10:31:36 by lfirmin ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
#include "libft.h"
|
||||
|
||||
static size_t ft_count(long int n)
|
||||
{
|
||||
size_t c;
|
||||
|
||||
c = 0;
|
||||
if (n <= 0)
|
||||
c = 1;
|
||||
while (n != 0)
|
||||
{
|
||||
n = n / 10;
|
||||
c++;
|
||||
}
|
||||
return (c);
|
||||
}
|
||||
|
||||
char *ft_itoa(int n)
|
||||
{
|
||||
char *str;
|
||||
size_t size;
|
||||
long int num;
|
||||
|
||||
num = n;
|
||||
size = ft_count(num);
|
||||
str = (char *)malloc(size + 1);
|
||||
if (!str)
|
||||
return (NULL);
|
||||
str[size] = '\0';
|
||||
if (num < 0)
|
||||
num = -num;
|
||||
while (size--)
|
||||
{
|
||||
str[size] = num % 10 + '0';
|
||||
num = num / 10;
|
||||
if (n < 0 && size == 0)
|
||||
str[size] = '-';
|
||||
}
|
||||
return (str);
|
||||
}
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* ft_lstadd_back.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: lfirmin <lfirmin@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/06/01 02:01:18 by lfirmin #+# #+# */
|
||||
/* Updated: 2024/06/03 15:59:33 by lfirmin ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
#include "libft.h"
|
||||
|
||||
void ft_lstadd_back(t_list **lst, t_list *new)
|
||||
{
|
||||
t_list *last;
|
||||
|
||||
if (!new)
|
||||
return ;
|
||||
if (!lst || !*lst)
|
||||
{
|
||||
*lst = new;
|
||||
return ;
|
||||
}
|
||||
last = ft_lstlast(*lst);
|
||||
last->next = new;
|
||||
}
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* ft_lstadd_front.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: lfirmin <lfirmin@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/05/31 20:34:57 by lfirmin #+# #+# */
|
||||
/* Updated: 2024/05/31 20:41:34 by lfirmin ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
#include "libft.h"
|
||||
|
||||
void ft_lstadd_front(t_list **lst, t_list *new)
|
||||
{
|
||||
if (lst && new)
|
||||
{
|
||||
new->next = *lst;
|
||||
*lst = new;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* ft_lstclear.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: lfirmin <lfirmin@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/06/01 20:46:07 by lfirmin #+# #+# */
|
||||
/* Updated: 2024/06/01 20:51:07 by lfirmin ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
#include "libft.h"
|
||||
|
||||
void ft_lstclear(t_list **lst, void (*del)(void*))
|
||||
{
|
||||
t_list *t;
|
||||
|
||||
if (lst)
|
||||
{
|
||||
while (*lst)
|
||||
{
|
||||
t = (*lst)->next;
|
||||
ft_lstdelone(*lst, del);
|
||||
(*lst) = t;
|
||||
}
|
||||
(*lst) = NULL;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* ft_lstdelone.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: lfirmin <lfirmin@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/06/01 20:32:56 by lfirmin #+# #+# */
|
||||
/* Updated: 2024/06/01 20:32:56 by lfirmin ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
#include "libft.h"
|
||||
|
||||
void ft_lstdelone(t_list *lst, void (*del)(void*))
|
||||
{
|
||||
if (!lst || !del)
|
||||
return ;
|
||||
del(lst->content);
|
||||
free(lst);
|
||||
}
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* ft_lstiter.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: lfirmin <lfirmin@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/06/01 21:05:12 by lfirmin #+# #+# */
|
||||
/* Updated: 2024/06/01 21:05:12 by lfirmin ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
#include "libft.h"
|
||||
|
||||
void ft_lstiter(t_list *lst, void (*f)(void *))
|
||||
{
|
||||
if (!lst || !f)
|
||||
return ;
|
||||
while (lst)
|
||||
{
|
||||
f(lst->content);
|
||||
lst = lst->next;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* ft_lstlast.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: lfirmin <lfirmin@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/06/01 01:52:09 by lfirmin #+# #+# */
|
||||
/* Updated: 2024/06/01 01:57:22 by lfirmin ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
#include "libft.h"
|
||||
|
||||
t_list *ft_lstlast(t_list *lst)
|
||||
{
|
||||
while (lst)
|
||||
{
|
||||
if (!lst->next)
|
||||
return (lst);
|
||||
lst = lst->next;
|
||||
}
|
||||
return (lst);
|
||||
}
|
||||
|
|
@ -0,0 +1,41 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* ft_lstmap.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: lfirmin <lfirmin@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/06/02 18:21:09 by lfirmin #+# #+# */
|
||||
/* Updated: 2024/06/03 15:53:13 by lfirmin ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
#include "libft.h"
|
||||
|
||||
t_list *ft_lstmap(t_list *lst, void *(*f)(void *), void (*del)(void *))
|
||||
{
|
||||
t_list *new;
|
||||
t_list *save;
|
||||
|
||||
if (!lst || !del || !f)
|
||||
return (NULL);
|
||||
new = ft_lstnew(lst->content);
|
||||
if (!new)
|
||||
return (NULL);
|
||||
new->content = f(new->content);
|
||||
save = new;
|
||||
lst = lst->next;
|
||||
while (lst)
|
||||
{
|
||||
new->next = ft_lstnew(lst->content);
|
||||
if (!new->next)
|
||||
{
|
||||
ft_lstclear(&save, del);
|
||||
return (NULL);
|
||||
}
|
||||
new->next->content = f(new->next->content);
|
||||
new = new->next;
|
||||
lst = lst->next;
|
||||
}
|
||||
new->next = NULL;
|
||||
return (save);
|
||||
}
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* ft_lstnew.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: lfirmin <lfirmin@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/05/31 18:41:23 by lfirmin #+# #+# */
|
||||
/* Updated: 2024/05/31 20:33:26 by lfirmin ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
#include "libft.h"
|
||||
|
||||
t_list *ft_lstnew(void *content)
|
||||
{
|
||||
t_list *new;
|
||||
|
||||
new = (t_list *)malloc(sizeof(*new));
|
||||
if (!new)
|
||||
return (NULL);
|
||||
new->content = content;
|
||||
new->next = NULL;
|
||||
return (new);
|
||||
}
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* ft_lstsize.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: lfirmin <lfirmin@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/05/31 22:00:49 by lfirmin #+# #+# */
|
||||
/* Updated: 2024/05/31 22:12:17 by lfirmin ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
#include "libft.h"
|
||||
|
||||
int ft_lstsize(t_list *lst)
|
||||
{
|
||||
int i;
|
||||
t_list *count;
|
||||
|
||||
count = lst;
|
||||
i = 0;
|
||||
while (count)
|
||||
{
|
||||
count = count->next;
|
||||
i++;
|
||||
}
|
||||
return (i);
|
||||
}
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* ft_memchr.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: lfirmin <marvin@42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/05/21 07:40:39 by lfirmin #+# #+# */
|
||||
/* Updated: 2024/05/22 09:59:44 by lfirmin ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
#include "libft.h"
|
||||
|
||||
void *ft_memchr(const void *s, int c, size_t n)
|
||||
{
|
||||
unsigned char *str;
|
||||
|
||||
str = (unsigned char *)s;
|
||||
while (n--)
|
||||
{
|
||||
if (*str == (unsigned char)c)
|
||||
return (str);
|
||||
str++;
|
||||
}
|
||||
return (NULL);
|
||||
}
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* ft_memcmp.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: lfirmin <marvin@42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/05/21 07:57:58 by lfirmin #+# #+# */
|
||||
/* Updated: 2024/05/22 11:34:35 by lfirmin ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
#include "libft.h"
|
||||
|
||||
int ft_memcmp(const void *ptr1, const void *ptr2, size_t num)
|
||||
{
|
||||
unsigned char *pt1;
|
||||
unsigned char *pt2;
|
||||
size_t i;
|
||||
|
||||
pt1 = (unsigned char *)ptr1;
|
||||
pt2 = (unsigned char *)ptr2;
|
||||
i = 0;
|
||||
while (i < num)
|
||||
{
|
||||
if (pt1[i] != pt2[i])
|
||||
return (pt1[i] - pt2[i]);
|
||||
i++;
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
|
|
@ -0,0 +1,31 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* ft_memcpy.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: lfirmin <marvin@42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/05/21 01:08:31 by lfirmin #+# #+# */
|
||||
/* Updated: 2024/05/30 18:46:00 by lfirmin ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
#include "libft.h"
|
||||
|
||||
void *ft_memcpy(void *dest, const void *src, size_t len)
|
||||
{
|
||||
size_t i;
|
||||
unsigned char *r;
|
||||
unsigned char *s;
|
||||
|
||||
i = 0;
|
||||
r = (unsigned char *)dest;
|
||||
s = (unsigned char *)src;
|
||||
if (dest == (void *)0 && src == (void *)0)
|
||||
return (dest);
|
||||
while (i < len)
|
||||
{
|
||||
r[i] = s[i];
|
||||
i++;
|
||||
}
|
||||
return (dest);
|
||||
}
|
||||
|
|
@ -0,0 +1,39 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* ft_memmov.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: lfirmin <marvin@42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/05/21 01:26:13 by lfirmin #+# #+# */
|
||||
/* Updated: 2024/05/22 09:59:44 by lfirmin ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
#include "libft.h"
|
||||
|
||||
void *ft_memmove(void *s1, const void *s2, size_t len)
|
||||
{
|
||||
unsigned char *dest;
|
||||
unsigned char *src;
|
||||
unsigned int i;
|
||||
|
||||
dest = (unsigned char *)s1;
|
||||
src = (unsigned char *)s2;
|
||||
i = 0;
|
||||
if (dest == NULL && src == NULL)
|
||||
return (NULL);
|
||||
if (dest < src)
|
||||
{
|
||||
while (i < len)
|
||||
{
|
||||
dest[i] = src[i];
|
||||
i++;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
while (0 < len--)
|
||||
dest[len] = src[len];
|
||||
}
|
||||
return (dest);
|
||||
}
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* ft_memset.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: lfirmin <lfirmin@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/05/20 02:42:40 by lfirmin #+# #+# */
|
||||
/* Updated: 2024/05/22 09:59:44 by lfirmin ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
#include "libft.h"
|
||||
|
||||
void *ft_memset(void *b, int c, size_t len)
|
||||
{
|
||||
size_t i;
|
||||
unsigned char *r;
|
||||
|
||||
i = 0;
|
||||
r = (unsigned char *)b;
|
||||
while (i < len)
|
||||
r[i++] = (unsigned char)c;
|
||||
return (b);
|
||||
}
|
||||
|
|
@ -0,0 +1,39 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* ft_print_array.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: lfirmin <lfirmin@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/11/05 02:29:54 by lfirmin #+# #+# */
|
||||
/* Updated: 2024/11/05 02:29:54 by lfirmin ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
#include "libft.h"
|
||||
|
||||
void put_str(char *str)
|
||||
{
|
||||
if (!str)
|
||||
return ;
|
||||
while (*str)
|
||||
write(1, str++, 1);
|
||||
}
|
||||
|
||||
void ft_print_str_array(char **array)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (array == NULL)
|
||||
{
|
||||
put_str("Tableau invalide\n");
|
||||
return ;
|
||||
}
|
||||
i = 0;
|
||||
put_str("Contenu du tableau:\n");
|
||||
while (array[i])
|
||||
{
|
||||
put_str(array[i]);
|
||||
write(1, "\n", 1);
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* ft_putchar_fd.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: lfirmin <lfirmin@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/05/29 11:17:45 by lfirmin #+# #+# */
|
||||
/* Updated: 2024/05/29 11:20:42 by lfirmin ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
#include "libft.h"
|
||||
|
||||
void ft_putchar_fd(char c, int fd)
|
||||
{
|
||||
write(fd, &c, 1);
|
||||
}
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* ft_putendl_fd.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: lfirmin <lfirmin@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/05/29 11:35:44 by lfirmin #+# #+# */
|
||||
/* Updated: 2024/05/29 11:38:36 by lfirmin ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
#include "libft.h"
|
||||
|
||||
void ft_putendl_fd(char *s, int fd)
|
||||
{
|
||||
ft_putstr_fd(s, fd);
|
||||
ft_putchar_fd('\n', fd);
|
||||
}
|
||||
|
|
@ -0,0 +1,31 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* ft_putnbr_fd.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: lfirmin <lfirmin@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/05/29 11:42:38 by lfirmin #+# #+# */
|
||||
/* Updated: 2024/05/29 11:56:04 by lfirmin ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
#include "libft.h"
|
||||
|
||||
void ft_putnbr_fd(int n, int fd)
|
||||
{
|
||||
long int nb;
|
||||
|
||||
nb = n;
|
||||
if (nb < 0)
|
||||
{
|
||||
nb = -nb;
|
||||
ft_putchar_fd('-', fd);
|
||||
}
|
||||
if (nb >= 10)
|
||||
{
|
||||
ft_putnbr_fd(nb / 10, fd);
|
||||
ft_putnbr_fd(nb % 10, fd);
|
||||
}
|
||||
else
|
||||
ft_putchar_fd(nb + '0', fd);
|
||||
}
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* ft_putstr_fd.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: lfirmin <lfirmin@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/05/29 11:27:05 by lfirmin #+# #+# */
|
||||
/* Updated: 2024/05/29 11:33:18 by lfirmin ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
#include "libft.h"
|
||||
|
||||
void ft_putstr_fd(char *s, int fd)
|
||||
{
|
||||
int i;
|
||||
|
||||
i = 0;
|
||||
while (s[i])
|
||||
{
|
||||
ft_putchar_fd(s[i], fd);
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,59 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* ft_split.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: lfirmin <lfirmin@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/05/22 05:56:37 by lfirmin #+# #+# */
|
||||
/* Updated: 2024/06/04 12:08:51 by lfirmin ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
#include "libft.h"
|
||||
|
||||
static size_t ft_countword(char const *s, char c)
|
||||
{
|
||||
size_t count;
|
||||
|
||||
if (!*s)
|
||||
return (0);
|
||||
count = 0;
|
||||
while (*s)
|
||||
{
|
||||
while (*s == c)
|
||||
s++;
|
||||
if (*s)
|
||||
count++;
|
||||
while (*s != c && *s)
|
||||
s++;
|
||||
}
|
||||
return (count);
|
||||
}
|
||||
|
||||
char **ft_split(char const *s, char c)
|
||||
{
|
||||
char **lst;
|
||||
size_t word_len;
|
||||
int i;
|
||||
|
||||
lst = (char **)malloc((ft_countword(s, c) + 1) * sizeof(char *));
|
||||
if (!s || !lst)
|
||||
return (0);
|
||||
i = 0;
|
||||
while (*s)
|
||||
{
|
||||
while (*s == c && *s)
|
||||
s++;
|
||||
if (*s)
|
||||
{
|
||||
if (!ft_strchr(s, c))
|
||||
word_len = ft_strlen(s);
|
||||
else
|
||||
word_len = ft_strchr(s, c) - s;
|
||||
lst[i++] = ft_substr(s, 0, word_len);
|
||||
s += word_len;
|
||||
}
|
||||
}
|
||||
lst[i] = NULL;
|
||||
return (lst);
|
||||
}
|
||||
|
|
@ -0,0 +1,82 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* ft_strcat.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: lfirmin <lfirmin@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/11/05 02:21:14 by lfirmin #+# #+# */
|
||||
/* Updated: 2024/11/05 08:19:47 by lfirmin ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
#include "libft.h"
|
||||
|
||||
int should_add_space(char *dest, char *src)
|
||||
{
|
||||
size_t dest_len;
|
||||
size_t src_len;
|
||||
|
||||
dest_len = ft_strlen(dest);
|
||||
src_len = ft_strlen(src);
|
||||
if (dest_len > 0 && src_len > 0)
|
||||
{
|
||||
if (dest[dest_len - 1] != ' ' && src[0] != ' ')
|
||||
return (1);
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
|
||||
char *create_new_str(char *dest, char *src, int add_space)
|
||||
{
|
||||
size_t dest_len;
|
||||
size_t src_len;
|
||||
char *new_str;
|
||||
|
||||
dest_len = ft_strlen(dest);
|
||||
src_len = ft_strlen(src);
|
||||
if (add_space == 1)
|
||||
new_str = malloc(sizeof(char) * (dest_len + src_len + 2));
|
||||
else
|
||||
new_str = malloc(sizeof(char) * (dest_len + src_len + 1));
|
||||
if (!new_str)
|
||||
return (NULL);
|
||||
return (new_str);
|
||||
}
|
||||
|
||||
void fill_new_str(char *new_str, char *dest, char *src, int add_space)
|
||||
{
|
||||
size_t dest_len;
|
||||
size_t src_len;
|
||||
|
||||
dest_len = ft_strlen(dest);
|
||||
src_len = ft_strlen(src);
|
||||
if (add_space == 1)
|
||||
{
|
||||
ft_memset(new_str, 0, dest_len + src_len + 2);
|
||||
ft_strlcpy(new_str, dest, dest_len + 1);
|
||||
new_str[dest_len] = ' ';
|
||||
ft_strlcpy(new_str + dest_len + 1, src, src_len + 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
ft_memset(new_str, 0, dest_len + src_len + 1);
|
||||
ft_strlcpy(new_str, dest, dest_len + 1);
|
||||
ft_strlcpy(new_str + dest_len, src, src_len + 1);
|
||||
}
|
||||
}
|
||||
|
||||
char *ft_strcat(char *dest, char *src)
|
||||
{
|
||||
char *new_str;
|
||||
int add_space;
|
||||
|
||||
if (!dest || !src)
|
||||
return (NULL);
|
||||
add_space = should_add_space(dest, src);
|
||||
new_str = create_new_str(dest, src, add_space);
|
||||
if (!new_str)
|
||||
return (NULL);
|
||||
fill_new_str(new_str, dest, src, add_space);
|
||||
free(dest);
|
||||
return (new_str);
|
||||
}
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* ft_strchr.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: lfirmin <marvin@42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/05/21 06:46:40 by lfirmin #+# #+# */
|
||||
/* Updated: 2024/05/24 08:51:25 by lfirmin ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
#include "libft.h"
|
||||
|
||||
char *ft_strchr(char const *str, int c)
|
||||
{
|
||||
while (*str)
|
||||
{
|
||||
if (*str == (char)c)
|
||||
return ((char *)str);
|
||||
str++;
|
||||
}
|
||||
if (*str == (char)c)
|
||||
return ((char *)str);
|
||||
else
|
||||
return (NULL);
|
||||
}
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* ft_strcmp.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: lfirmin <lfirmin@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/10/19 21:01:26 by lfirmin #+# #+# */
|
||||
/* Updated: 2024/10/19 21:01:26 by lfirmin ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
#include "libft.h"
|
||||
|
||||
int ft_strcmp(char *s1, char *s2)
|
||||
{
|
||||
int i;
|
||||
|
||||
i = 0;
|
||||
while (s1[i] == s2[i] && s1[i] != '\0' && s2[i] != '\0')
|
||||
i++;
|
||||
return (s1[i] - s2[i]);
|
||||
}
|
||||
|
|
@ -0,0 +1,34 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* ft_strdup.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: lfirmin <marvin@42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/05/15 05:28:24 by lfirmin #+# #+# */
|
||||
/* Updated: 2024/05/22 09:59:44 by lfirmin ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
#include "libft.h"
|
||||
|
||||
char *ft_strdup(const char *src)
|
||||
{
|
||||
char *dest;
|
||||
int i;
|
||||
int size;
|
||||
|
||||
size = 0;
|
||||
while (src[size] != '\0')
|
||||
size++;
|
||||
dest = malloc(sizeof(char) * (size + 1));
|
||||
if (dest == NULL)
|
||||
return (NULL);
|
||||
i = 0;
|
||||
while (i != size)
|
||||
{
|
||||
dest[i] = src[i];
|
||||
i++;
|
||||
}
|
||||
dest[i] = '\0';
|
||||
return (dest);
|
||||
}
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* ft_striteri.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: lfirmin <lfirmin@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/05/29 10:54:40 by lfirmin #+# #+# */
|
||||
/* Updated: 2024/05/29 11:12:05 by lfirmin ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
#include "libft.h"
|
||||
|
||||
void ft_striteri(char *s, void (*f)(unsigned int, char*))
|
||||
{
|
||||
int i;
|
||||
|
||||
i = 0;
|
||||
if (s)
|
||||
{
|
||||
while (s[i])
|
||||
{
|
||||
f(i, &s[i]);
|
||||
++i;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,34 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* ft_strjoin.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: lfirmin <lfirmin@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/05/22 01:00:14 by lfirmin #+# #+# */
|
||||
/* Updated: 2024/05/24 08:49:06 by lfirmin ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
#include "libft.h"
|
||||
|
||||
char *ft_strjoin(const char *s1, const char *s2)
|
||||
{
|
||||
char *res;
|
||||
int i;
|
||||
int j;
|
||||
|
||||
i = 0;
|
||||
j = 0;
|
||||
if (s1 == NULL && s2 == NULL)
|
||||
return (NULL);
|
||||
res = (char *) malloc((ft_strlen(s1) + ft_strlen(s2) + 1) * sizeof(char));
|
||||
if (!res)
|
||||
return (NULL);
|
||||
while (s1[i])
|
||||
res[j++] = s1[i++];
|
||||
i = 0;
|
||||
while (s2[i])
|
||||
res[j++] = s2[i++];
|
||||
res[j] = 0;
|
||||
return (res);
|
||||
}
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* ft_strlcat.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: lfirmin <marvin@42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/05/21 03:55:25 by lfirmin #+# #+# */
|
||||
/* Updated: 2024/05/22 09:59:44 by lfirmin ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
#include "libft.h"
|
||||
|
||||
size_t ft_strlcat(char *dst, const char *src, size_t size)
|
||||
{
|
||||
size_t i;
|
||||
size_t r;
|
||||
size_t s;
|
||||
|
||||
i = 0;
|
||||
r = ft_strlen(dst);
|
||||
s = ft_strlen(src);
|
||||
if (size <= r)
|
||||
return (s + size);
|
||||
while (r + i < size - 1 && src[i] != '\0')
|
||||
{
|
||||
dst[r + i] = src[i];
|
||||
i++;
|
||||
}
|
||||
dst[r + i] = '\0';
|
||||
return (r + s);
|
||||
}
|
||||
|
|
@ -0,0 +1,34 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* ft_strlcpy.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: lfirmin <marvin@42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/05/21 02:18:17 by lfirmin #+# #+# */
|
||||
/* Updated: 2024/05/30 18:36:18 by lfirmin ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
#include "libft.h"
|
||||
|
||||
size_t ft_strlcpy(char *dst, const char *src, size_t dsts)
|
||||
{
|
||||
size_t srcs;
|
||||
size_t i;
|
||||
|
||||
ft_strlen(src);
|
||||
if (!src || !dst)
|
||||
return (0);
|
||||
srcs = ft_strlen(src);
|
||||
i = 0;
|
||||
if (dsts != 0)
|
||||
{
|
||||
while (src[i] != '\0' && i < (dsts - 1))
|
||||
{
|
||||
dst[i] = src[i];
|
||||
i++;
|
||||
}
|
||||
dst[i] = '\0';
|
||||
}
|
||||
return (srcs);
|
||||
}
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* ft_strlen.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: lfirmin <lfirmin@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/05/19 23:16:45 by lfirmin #+# #+# */
|
||||
/* Updated: 2024/05/23 07:36:59 by lfirmin ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
#include "libft.h"
|
||||
|
||||
size_t ft_strlen(const char *s)
|
||||
{
|
||||
int i;
|
||||
|
||||
i = 0;
|
||||
while (s[i])
|
||||
i++;
|
||||
return ((size_t)i);
|
||||
}
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* ft_strmapi.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: lfirmin <lfirmin@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/05/28 15:10:42 by lfirmin #+# #+# */
|
||||
/* Updated: 2024/05/28 17:00:27 by lfirmin ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
#include "libft.h"
|
||||
|
||||
char *ft_strmapi(char const *s, char (*f)(unsigned int, char))
|
||||
{
|
||||
char *str;
|
||||
int i;
|
||||
|
||||
if (!s)
|
||||
return (NULL);
|
||||
str = (char *)malloc(ft_strlen(s) + 1);
|
||||
if (!str)
|
||||
return (NULL);
|
||||
i = 0;
|
||||
while (s[i])
|
||||
{
|
||||
str[i] = f(i, s[i]);
|
||||
++i;
|
||||
}
|
||||
str[i] = '\0';
|
||||
return (str);
|
||||
}
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* ft_strncmp.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: lfirmin <marvin@42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/05/21 06:55:09 by lfirmin #+# #+# */
|
||||
/* Updated: 2024/05/24 08:47:59 by lfirmin ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
#include "libft.h"
|
||||
|
||||
int ft_strncmp(const char *s1, const char *s2, unsigned int n)
|
||||
{
|
||||
unsigned int i;
|
||||
unsigned char c1;
|
||||
unsigned char c2;
|
||||
|
||||
i = 0;
|
||||
if (n == 0)
|
||||
return (0);
|
||||
while (i < n)
|
||||
{
|
||||
c1 = (unsigned char)s1[i];
|
||||
c2 = (unsigned char)s2[i];
|
||||
if (c1 != c2 || c1 == '\0' || c2 == '\0')
|
||||
return (c1 - c2);
|
||||
i++;
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* ft_strnstr.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: lfirmin <marvin@42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/05/21 08:22:59 by lfirmin #+# #+# */
|
||||
/* Updated: 2024/05/22 09:59:44 by lfirmin ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
#include "libft.h"
|
||||
|
||||
char *ft_strnstr(const char *hay, const char *need, size_t len)
|
||||
{
|
||||
size_t i;
|
||||
size_t n;
|
||||
|
||||
i = 0;
|
||||
if (need[0] == '\0')
|
||||
return ((char *)hay);
|
||||
while (hay[i] != '\0')
|
||||
{
|
||||
n = 0;
|
||||
while (hay[i + n] == need[n] && (i + n) < len)
|
||||
{
|
||||
if (hay[i + n] == '\0' && need[n] == '\0')
|
||||
return ((char *)&hay[i]);
|
||||
n++;
|
||||
}
|
||||
if (need[n] == '\0')
|
||||
return ((char *)hay + i);
|
||||
i++;
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* ft_strrchr.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: lfirmin <marvin@42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/05/21 06:42:38 by lfirmin #+# #+# */
|
||||
/* Updated: 2024/05/30 18:30:00 by lfirmin ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
#include "libft.h"
|
||||
|
||||
char *ft_strrchr(const char *str, int c)
|
||||
{
|
||||
int i;
|
||||
int last_occurrence;
|
||||
|
||||
ft_strlen(str);
|
||||
i = 0;
|
||||
last_occurrence = -1;
|
||||
if (str == NULL)
|
||||
return (NULL);
|
||||
while (str[i])
|
||||
{
|
||||
if (str[i] == (char)c)
|
||||
last_occurrence = i;
|
||||
i++;
|
||||
}
|
||||
if ((char)c == '\0')
|
||||
return ((char *)&str[i]);
|
||||
if (last_occurrence != -1)
|
||||
return ((char *)&str[last_occurrence]);
|
||||
return (NULL);
|
||||
}
|
||||
|
|
@ -0,0 +1,68 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* ft_strtrim.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: lfirmin <lfirmin@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/05/23 21:32:01 by lfirmin #+# #+# */
|
||||
/* Updated: 2024/05/31 02:04:11 by lfirmin ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "libft.h"
|
||||
|
||||
static int is_in_set(char c, const char *set)
|
||||
{
|
||||
while (*set)
|
||||
{
|
||||
if (c == *set)
|
||||
{
|
||||
return (1);
|
||||
}
|
||||
set++;
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
|
||||
static char *ft_strncpy(char *dest, const char *src, unsigned int n)
|
||||
{
|
||||
unsigned int i;
|
||||
|
||||
i = 0;
|
||||
while (src[i] != '\0' && i < n)
|
||||
{
|
||||
dest[i] = src[i];
|
||||
++i;
|
||||
}
|
||||
while (i < n)
|
||||
{
|
||||
dest[i] = '\0';
|
||||
i++;
|
||||
}
|
||||
return (dest);
|
||||
}
|
||||
|
||||
char *ft_strtrim(const char *s1, const char *set)
|
||||
{
|
||||
size_t s;
|
||||
size_t e;
|
||||
size_t len;
|
||||
char *str;
|
||||
|
||||
if (!s1 || !set)
|
||||
return (NULL);
|
||||
s = 0;
|
||||
while (s1[s] && is_in_set(s1[s], set))
|
||||
s++;
|
||||
e = ft_strlen(s1);
|
||||
while (e > s && is_in_set(s1[e - 1], set))
|
||||
e--;
|
||||
len = e - s;
|
||||
str = (char *)malloc(sizeof(char) * (len + 1));
|
||||
if (!str)
|
||||
return (NULL);
|
||||
ft_strncpy(str, s1 + s, len);
|
||||
str[len] = '\0';
|
||||
return (str);
|
||||
}
|
||||
|
|
@ -0,0 +1,34 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* ft_substr.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: lfirmin <lfirmin@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/05/22 00:15:54 by lfirmin #+# #+# */
|
||||
/* Updated: 2024/05/24 08:28:01 by lfirmin ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
#include "libft.h"
|
||||
|
||||
char *ft_substr(char const *s, unsigned int start, size_t len)
|
||||
{
|
||||
char *sub;
|
||||
size_t i;
|
||||
|
||||
if ((ft_strlen(s) - start) < len)
|
||||
len = ft_strlen(s) - start;
|
||||
if (ft_strlen(s) < start)
|
||||
return (ft_strdup(""));
|
||||
i = 0;
|
||||
sub = (char *) malloc(len + 1);
|
||||
if (!sub)
|
||||
return (NULL);
|
||||
while (len > 0)
|
||||
{
|
||||
sub[i++] = s[start++];
|
||||
len--;
|
||||
}
|
||||
sub[i] = '\0';
|
||||
return (sub);
|
||||
}
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* ft_tolower.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: lfirmin <marvin@42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/05/21 04:50:40 by lfirmin #+# #+# */
|
||||
/* Updated: 2024/05/22 11:09:36 by lfirmin ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
#include "libft.h"
|
||||
|
||||
int ft_tolower(int c)
|
||||
{
|
||||
if (c >= 65 && c <= 90)
|
||||
return (c + 32);
|
||||
return (c);
|
||||
}
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* ft_toupper.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: lfirmin <marvin@42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/05/21 04:50:40 by lfirmin #+# #+# */
|
||||
/* Updated: 2024/05/22 09:59:44 by lfirmin ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
#include "libft.h"
|
||||
|
||||
int ft_toupper(int c)
|
||||
{
|
||||
if (c >= 97 && c <= 122)
|
||||
return (c - 32);
|
||||
return (c);
|
||||
}
|
||||
|
|
@ -0,0 +1,82 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* libft.h :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: lfirmin <marvin@42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2024/05/21 11:19:08 by lfirmin #+# #+# */
|
||||
/* Updated: 2024/06/02 21:12:47 by lfirmin ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
#ifndef LIBFT_H
|
||||
# define LIBFT_H
|
||||
|
||||
# include <stdlib.h>
|
||||
# include <string.h>
|
||||
# include <stddef.h>
|
||||
# include <stdio.h>
|
||||
# include <unistd.h>
|
||||
# include <limits.h>
|
||||
|
||||
typedef struct s_list
|
||||
{
|
||||
void *content;
|
||||
struct s_list *next;
|
||||
} t_list;
|
||||
|
||||
int ft_isalnum(int c);
|
||||
int ft_isalpha(int c);
|
||||
int ft_isascii(int c);
|
||||
int ft_isdigit(int c);
|
||||
int ft_isprint(int c);
|
||||
int ft_atoi(const char *str);
|
||||
int ft_memcmp(const void *ptr1, const void *ptr2, size_t num);
|
||||
int ft_strncmp(const char *s1, const char *s2, unsigned int n);
|
||||
int ft_toupper(int c);
|
||||
int ft_tolower(int c);
|
||||
int ft_lstsize(t_list *lst);
|
||||
int ft_strcmp(char *s1, char *s2);
|
||||
long long ft_atoll(const char *str);
|
||||
|
||||
size_t ft_strlen(const char *s);
|
||||
size_t ft_strlcat(char *dst, const char *src, size_t size);
|
||||
size_t ft_strlcpy(char *dst, const char *src, size_t dsts);
|
||||
|
||||
void *ft_bzero(void *s, size_t n);
|
||||
void *ft_calloc(size_t count, size_t n);
|
||||
void *ft_memchr(const void *s, int c, size_t n);
|
||||
void *ft_memcpy(void *dest, const void *src, size_t len);
|
||||
void *ft_memset(void *b, int c, size_t len);
|
||||
void *ft_memmove(void *s1, const void *s2, size_t len);
|
||||
void *ft_memset(void *str, int c, size_t n);
|
||||
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);
|
||||
void ft_striteri(char *s, void (*f)(unsigned int, char*));
|
||||
void ft_lstadd_front(t_list **lst, t_list *new);
|
||||
void ft_lstadd_back(t_list **lst, t_list *new);
|
||||
void ft_lstdelone(t_list *lst, void (*del)(void*));
|
||||
void ft_lstclear(t_list **lst, void (*del)(void*));
|
||||
void ft_print_str_array(char **array);
|
||||
void ft_lstiter(t_list *lst, void (*f)(void *));
|
||||
t_list *ft_lstmap(t_list *lst, void *(*f)(void *), \
|
||||
void (*del)(void *));
|
||||
|
||||
char *ft_strchr(char const *str, int c);
|
||||
char *ft_strdup(const char *src);
|
||||
char *ft_strjoin(const char *s1, const char *s2);
|
||||
char *ft_strnstr(const char *hay, const char *need, size_t len);
|
||||
char *ft_strrchr(const char *str, int c);
|
||||
char *ft_strtrim(char const *s1, char const *set);
|
||||
char *ft_substr(char const *s, unsigned int start, size_t len);
|
||||
char **ft_split(char const *s, char c);
|
||||
char *ft_strmapi(char const *s, char (*f)(unsigned int, char));
|
||||
char *ft_itoa(int n);
|
||||
char *ft_strcat(char *dest, char *src);
|
||||
|
||||
t_list *ft_lstnew(void *content);
|
||||
t_list *ft_lstlast(t_list *lst);
|
||||
|
||||
#endif
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
1111111111111111111
|
||||
10P0000C0000C0000E1
|
||||
1111111111111111111
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
1111111111111111111
|
||||
10P0000C0000C0000E1
|
||||
1111111110111111111
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
1111111111111111111
|
||||
10P0000C0000C0010E1
|
||||
1111111111111111111
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
1111111111111111111
|
||||
10P0000C0000C0E0111
|
||||
11111111111111111
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
1111111111111111111111111111111111111111
|
||||
1001010001000001000100000000000000000001
|
||||
100001000000C010000010000101010100000001
|
||||
100010000100C000000001001000010000000111
|
||||
1000001010000110000100000110101000010011
|
||||
10C0000000000000001010101000100010000011
|
||||
10C1001001000010010000100000100001000101
|
||||
1100000010000000110000101011000000C00001
|
||||
1000100000000000010010000000000000000001
|
||||
1000000100000001000000011010000000000001
|
||||
1000100110001000000010010010000C00000001
|
||||
1000100000010010000010000000101000000001
|
||||
1000100000001111011010100001110001100001
|
||||
1000000000011010100000011000000000000101
|
||||
10110C0100011000000000000000000011101001
|
||||
10100000C1000100000000000010010010000001
|
||||
10000000001000000111010110000001000000P1
|
||||
10000000000010011001000C0000110010001011
|
||||
10000000000010011001000C0000110010001011
|
||||
10000000000010011001000C0000110010001011
|
||||
10000000000010011001000C0000110010001011
|
||||
10000000000010011001000C0000110010001011
|
||||
1000000C00000100000000110001010001000001
|
||||
1001010000000001C00001000001010100010001
|
||||
1010000000000010110000110000000111000001
|
||||
10000000000010011001000C0000110010001011
|
||||
10000000000010011001000C0000110010001011
|
||||
10000000000010011001000C0000110010001011
|
||||
1110100001001000100100000001001010000101
|
||||
110010001100000CC000001010100E1000000001
|
||||
11000000000000000000000110100C0100010001
|
||||
1000000000100000010001000000000000000001
|
||||
1100100000000000000010001000000100110011
|
||||
1101100000100010000000010100100000001001
|
||||
10000C0000000100000111100100010000000001
|
||||
1111111111111111111111111111111111111111
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
111111111111
|
||||
10C00C000001
|
||||
10P00000C001
|
||||
100110011001
|
||||
100110011001
|
||||
10CC00CCC0C1
|
||||
10C001100001
|
||||
100C1111C001
|
||||
10C01C0100E1
|
||||
10C00C000001
|
||||
111111111111
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
1111111111111111111111111111111111111111
|
||||
1E00000000000001111111000C000000000C0001
|
||||
1011110111110101000000011111111111111101
|
||||
1010010100010101011111100000000000000101
|
||||
1010010111110101010000101011111111110101
|
||||
1010000000000101000110101010000000010101
|
||||
101111111111010101011C101010111111010101
|
||||
1000000000010101010110101010100001010101
|
||||
1011111111110101010110101C10101101010101
|
||||
101000CCC0000101010110101010101101010101
|
||||
1010111111111101010110101010101101010101
|
||||
10100000000000010101101010101C11C1010101
|
||||
1011111111111111010110101010101101010101
|
||||
1000000000000000010110101010101101010101
|
||||
1111111111111111110110101010101101010101
|
||||
100000C0000CCC00000000101000000000000101
|
||||
1111111111111111111110101111111111111101
|
||||
1P00000000000000000000100000000CCCCCCCC1
|
||||
1111111111111111111111111111111111111111
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
1111111111111111111111111111111111111111
|
||||
1000000000000000000000001000000000000001
|
||||
100000000000000000C000001000C00010000001
|
||||
1000000000000000000000001000000010000001
|
||||
100000000P0000000000000000C00000100000E1
|
||||
1111111111111111111111111111111111111111
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
1111111111111111111
|
||||
10P0000C0000C0000E1
|
||||
1111111111111111111
|
||||
|
|
@ -0,0 +1,88 @@
|
|||
name: Build
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ master ]
|
||||
pull_request:
|
||||
branches: [ master ]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
|
||||
runs-on: ${{ matrix.os }}
|
||||
env:
|
||||
DISPLAY: ":99"
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
os: [ubuntu-latest, macos-latest]
|
||||
|
||||
timeout-minutes: 20
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Install mlx dependencies
|
||||
run: |
|
||||
set -x
|
||||
if [ "$RUNNER_OS" == "Linux" ]; then
|
||||
sudo apt-get update -qq
|
||||
sudo apt-get install -y -qq gcc make xorg libxext-dev libbsd-dev
|
||||
elif [ "$RUNNER_OS" == "macOS" ]; then
|
||||
brew install xquartz
|
||||
echo "/usr/X11/bin" >> $GITHUB_PATH
|
||||
else
|
||||
echo "$RUNNER_OS not supported"
|
||||
exit 1
|
||||
fi
|
||||
- name: Setup x11 headless testing environment
|
||||
run: |
|
||||
set -x
|
||||
if [ "$RUNNER_OS" == "Linux" ]; then
|
||||
sudo apt-get install xvfb xdotool valgrind
|
||||
Xvfb $DISPLAY -screen 0 1280x1024x24 &
|
||||
elif [ "$RUNNER_OS" == "macOS" ]; then
|
||||
brew install xdotool
|
||||
defaults write org.x.X11 enable_test_extensions -boolean true
|
||||
sudo Xvfb $DISPLAY -screen 0 1280x1024x24 &
|
||||
else
|
||||
echo "$RUNNER_OS not supported"
|
||||
exit 1
|
||||
fi
|
||||
- name: Run ./configure
|
||||
run: ./configure
|
||||
|
||||
- name: make check Linux
|
||||
if: matrix.os == 'ubuntu-latest'
|
||||
run: make -f Makefile.gen check
|
||||
- name: make check MacOS
|
||||
continue-on-error: true
|
||||
if: matrix.os == 'macos-latest'
|
||||
run: make -f Makefile.gen check
|
||||
# Didn't find a way to simulate inputs on Macos. libxdo seem to no longer work on macos.
|
||||
# It can be partially fixed writing proper unit-tests, thus avoiding the need of libxdo.
|
||||
|
||||
- name: Check leaks from binary "test/mlx-test"
|
||||
run: |
|
||||
cd test
|
||||
if [ "$RUNNER_OS" == "Linux" ]; then
|
||||
echo "Info: Still reachable doesn't matter. Valgrind will return success on thoses reports.
|
||||
It is fine, we searching for lost pointers. Valgrind will return exit status 42 if any block is lost."
|
||||
valgrind --leak-check=full --show-leak-kinds=definite,indirect,possible --errors-for-leak-kinds=definite,indirect,possible --error-exitcode=42 ./mlx-test > /dev/null &
|
||||
PID=$!
|
||||
sleep 30
|
||||
xdotool search --name Title3 windowfocus key Escape
|
||||
xdotool search --name Title2 windowfocus key Escape
|
||||
wait $PID
|
||||
elif [ "$RUNNER_OS" == "macOS" ]; then
|
||||
MallocStackLoggingNoCompact=1
|
||||
./mlx-test &
|
||||
sleep 30
|
||||
leaks mlx-test
|
||||
pkill mlx-test
|
||||
fi
|
||||
|
||||
- name: Norminette, just for fun
|
||||
continue-on-error: true
|
||||
run: |
|
||||
pip3 install Norminette
|
||||
norminette *.c *.h
|
||||
norminette --version
|
||||
|
|
@ -0,0 +1,67 @@
|
|||
## Mlx related
|
||||
Makefile.gen
|
||||
/test/mlx-test
|
||||
|
||||
## Editor
|
||||
.vscode/*
|
||||
*~
|
||||
\#*\#
|
||||
|
||||
## Other
|
||||
.DS_STORE
|
||||
|
||||
|
||||
|
||||
## Template from https://github.com/github/gitignore
|
||||
# Prerequisites
|
||||
*.d
|
||||
|
||||
# Object files
|
||||
*.o
|
||||
*.ko
|
||||
*.obj
|
||||
*.elf
|
||||
|
||||
# Linker output
|
||||
*.ilk
|
||||
*.map
|
||||
*.exp
|
||||
|
||||
# Precompiled Headers
|
||||
*.gch
|
||||
*.pch
|
||||
|
||||
# Libraries
|
||||
*.lib
|
||||
*.a
|
||||
*.la
|
||||
*.lo
|
||||
|
||||
# Shared objects (inc. Windows DLLs)
|
||||
*.dll
|
||||
*.so
|
||||
*.so.*
|
||||
*.dylib
|
||||
|
||||
# Executables
|
||||
*.exe
|
||||
*.out
|
||||
*.app
|
||||
*.i*86
|
||||
*.x86_64
|
||||
*.hex
|
||||
|
||||
# Debug files
|
||||
*.dSYM/
|
||||
*.su
|
||||
*.idb
|
||||
*.pdb
|
||||
|
||||
# Kernel Module Compile Results
|
||||
*.mod*
|
||||
*.cmd
|
||||
.tmp_versions/
|
||||
modules.order
|
||||
Module.symvers
|
||||
Mkfile.old
|
||||
dkms.conf
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
BSD 2-Clause License
|
||||
|
||||
Copyright (c) 2021, Ecole 42
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright notice, this
|
||||
list of conditions and the following disclaimer.
|
||||
|
||||
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
##
|
||||
## Makefile for MiniLibX in /home/boulon/work/c/raytraceur/minilibx
|
||||
##
|
||||
## Made by Olivier Crouzet
|
||||
## Login <ol@epitech.net>
|
||||
##
|
||||
## Started on Tue Oct 5 15:56:43 2004 Olivier Crouzet
|
||||
## Last update Tue May 15 15:44:41 2007 Olivier Crouzet
|
||||
##
|
||||
|
||||
## Please use configure script
|
||||
|
||||
|
||||
all : do_configure
|
||||
|
||||
do_configure :
|
||||
./configure
|
||||
|
||||
clean :
|
||||
./configure clean
|
||||
|
||||
re : clean all
|
||||
|
|
@ -0,0 +1,66 @@
|
|||
##
|
||||
## Makefile for MiniLibX in /home/boulon/work/c/raytraceur/minilibx
|
||||
##
|
||||
## Made by Olivier Crouzet
|
||||
## Login <ol@epitech.net>
|
||||
##
|
||||
## Started on Tue Oct 5 15:56:43 2004 Olivier Crouzet
|
||||
## Last update Tue May 15 15:41:20 2007 Olivier Crouzet
|
||||
##
|
||||
|
||||
## Please use configure script
|
||||
|
||||
|
||||
INC =%%%%
|
||||
|
||||
UNAME = $(shell uname)
|
||||
CC = gcc
|
||||
ifeq ($(UNAME),FreeBSD)
|
||||
CC = clang
|
||||
endif
|
||||
|
||||
NAME = libmlx.a
|
||||
NAME_UNAME = libmlx_$(UNAME).a
|
||||
|
||||
SRC = mlx_init.c mlx_new_window.c mlx_pixel_put.c mlx_loop.c \
|
||||
mlx_mouse_hook.c mlx_key_hook.c mlx_expose_hook.c mlx_loop_hook.c \
|
||||
mlx_int_anti_resize_win.c mlx_int_do_nothing.c \
|
||||
mlx_int_wait_first_expose.c mlx_int_get_visual.c \
|
||||
mlx_flush_event.c mlx_string_put.c mlx_set_font.c \
|
||||
mlx_new_image.c mlx_get_data_addr.c \
|
||||
mlx_put_image_to_window.c mlx_get_color_value.c mlx_clear_window.c \
|
||||
mlx_xpm.c mlx_int_str_to_wordtab.c mlx_destroy_window.c \
|
||||
mlx_int_param_event.c mlx_int_set_win_event_mask.c mlx_hook.c \
|
||||
mlx_rgb.c mlx_destroy_image.c mlx_mouse.c mlx_screen_size.c \
|
||||
mlx_destroy_display.c
|
||||
|
||||
OBJ_DIR = obj
|
||||
OBJ = $(addprefix $(OBJ_DIR)/,$(SRC:%.c=%.o))
|
||||
CFLAGS = -O3 -I$(INC)
|
||||
|
||||
all : $(NAME)
|
||||
|
||||
$(OBJ_DIR)/%.o: %.c
|
||||
@mkdir -p $(OBJ_DIR)
|
||||
$(CC) $(CFLAGS) $(IFLAGS) -c $< -o $@
|
||||
|
||||
$(NAME) : $(OBJ)
|
||||
ar -r $(NAME) $(OBJ)
|
||||
ranlib $(NAME)
|
||||
cp $(NAME) $(NAME_UNAME)
|
||||
|
||||
check: all
|
||||
@test/run_tests.sh
|
||||
|
||||
show:
|
||||
@printf "NAME : $(NAME)\n"
|
||||
@printf "NAME_UNAME : $(NAME_UNAME)\n"
|
||||
@printf "CC : $(CC)\n"
|
||||
@printf "CFLAGS : $(CFLAGS)\n"
|
||||
@printf "SRC :\n $(SRC)\n"
|
||||
@printf "OBJ :\n $(OBJ)\n"
|
||||
|
||||
clean :
|
||||
rm -rf $(OBJ_DIR)/ $(NAME) $(NAME_UNAME) *~ core *.core
|
||||
|
||||
.PHONY: all check show clean
|
||||
|
|
@ -0,0 +1,55 @@
|
|||
[](https://github.com/42Paris/minilibx-linux/actions/workflows/ci.yml)
|
||||
|
||||
This is the MinilibX, a simple X-Window (X11R6) programming API
|
||||
in C, designed for students, suitable for X-beginners.
|
||||
|
||||
|
||||
Contents
|
||||
|
||||
- source code in C to create the mlx library
|
||||
- man pages (in man/ directory)
|
||||
- a test program (in test/ directory) is built
|
||||
with the library
|
||||
- a public include file mlx.h
|
||||
- a tiny configure script to generate an appropriate Makefile.gen
|
||||
|
||||
Requirements for Linux
|
||||
|
||||
- MinilibX only support TrueColor visual type (8,15,16,24 or 32 bits depth)
|
||||
- gcc
|
||||
- make
|
||||
- X11 include files (package xorg)
|
||||
- XShm extension must be present (package libxext-dev)
|
||||
- Utility functions from BSD systems - development files (package libbsd-dev)
|
||||
- **e.g. _sudo apt-get install gcc make xorg libxext-dev libbsd-dev_ (Debian/Ubuntu)**
|
||||
|
||||
Requirements for MacOS
|
||||
- [Xquartz](https://www.xquartz.org/)
|
||||
|
||||
```bash
|
||||
➜ ~ Brew install Xquartz
|
||||
➜ ~ reboot
|
||||
➜ ~ xeyes # run an hello world X11 app
|
||||
```
|
||||
|
||||
MlX Color Opacity / Transparency / Alpha (32 bits depth)
|
||||
- 0xFF (fully transparent) or 0x00 (fully opaque)
|
||||
|
||||
Compile MinilibX
|
||||
|
||||
- run ./configure or make
|
||||
both will make a few tests, create Makefile.gen
|
||||
and then automatically run make on this generated Makefile.gen .
|
||||
libmlx.a and libmlx_$(HOSTTYPE).a are created.
|
||||
test/mlx-test binary is also created.
|
||||
|
||||
|
||||
Install MinilibX
|
||||
|
||||
- no installation script is provided. You may want to install
|
||||
- libmlx.a and/or libmlx_$(HOSTTYPE).a in /usr/X11/lib or /usr/local/lib
|
||||
- mlx.h in /usr/X11/include or /usr/local/include
|
||||
- man/man3/mlx*.1 in /usr/X11/man/man3 or /usr/local/man/man3
|
||||
|
||||
|
||||
Olivier CROUZET - 2014-01-06 -
|
||||
|
|
@ -0,0 +1,126 @@
|
|||
#!/usr/bin/env sh
|
||||
|
||||
set -e
|
||||
|
||||
BOLD="\033[1m"
|
||||
RESET="\033[0m"
|
||||
LIGHT_RED="\033[91m"
|
||||
LIGHT_GREEN="\033[92m"
|
||||
LIGHT_CYAN="\033[96m"
|
||||
|
||||
logging(){
|
||||
local type=$1; shift
|
||||
printf "${LIGHT_CYAN}${BOLD}configure${RESET} [%b] : %b\n" "$type" "$*"
|
||||
}
|
||||
log_info(){
|
||||
logging "${LIGHT_GREEN}info${RESET}" "$@"
|
||||
}
|
||||
log_error(){
|
||||
logging "${LIGHT_RED}error${RESET}" "$@" >&2
|
||||
}
|
||||
|
||||
# find and print x11 header path
|
||||
get_xlib_include_path(){
|
||||
local result=""
|
||||
|
||||
for inc in \
|
||||
/usr/X11/include \
|
||||
/usr/X11R6/include \
|
||||
/usr/X11R5/include \
|
||||
/usr/X11R4/include \
|
||||
\
|
||||
/usr/include \
|
||||
/usr/include/X11 \
|
||||
/usr/include/X11R6 \
|
||||
/usr/include/X11R5 \
|
||||
/usr/include/X11R4 \
|
||||
\
|
||||
/usr/local/X11/include \
|
||||
/usr/local/X11R6/include \
|
||||
/usr/local/X11R5/include \
|
||||
/usr/local/X11R4/include \
|
||||
\
|
||||
/usr/local/include/X11 \
|
||||
/usr/local/include/X11R6 \
|
||||
/usr/local/include/X11R5 \
|
||||
/usr/local/include/X11R4 \
|
||||
\
|
||||
/usr/X386/include \
|
||||
/usr/x386/include \
|
||||
/usr/XFree86/include/X11 \
|
||||
\
|
||||
/usr/local/include \
|
||||
/usr/athena/include \
|
||||
/usr/local/x11r5/include \
|
||||
/usr/lpp/Xamples/include \
|
||||
\
|
||||
/usr/openwin/include \
|
||||
/usr/openwin/share/include
|
||||
do
|
||||
if [ -f "$inc/X11/Xlib.h" -a -f "$inc/X11/extensions/XShm.h" ]; then
|
||||
result=$inc
|
||||
break
|
||||
fi
|
||||
done
|
||||
echo $result
|
||||
}
|
||||
|
||||
show_help(){
|
||||
cat <<EOF
|
||||
Usage :
|
||||
$0 Auto-configure and make MinilibX
|
||||
$0 clean Execute the clean rule of both Makefile.gen
|
||||
EOF
|
||||
}
|
||||
|
||||
clean(){
|
||||
log_info 'Execute "make clean" from "makefile.gen"'
|
||||
${MAKE} -f Makefile.gen clean
|
||||
log_info 'Execute "make clean" from "test/makefile.gen"'
|
||||
${MAKE} -f Makefile.gen -C test/ --no-print-directory clean
|
||||
}
|
||||
|
||||
parse_args(){
|
||||
case "$1" in
|
||||
--help | -h)
|
||||
show_help
|
||||
exit 0;;
|
||||
clean)
|
||||
clean
|
||||
exit 0;;
|
||||
"") return;;
|
||||
*)
|
||||
log_error "unknown command \"$1\"\nRun \"./configure --help\" for usage."
|
||||
exit 1;;
|
||||
esac
|
||||
}
|
||||
|
||||
main(){
|
||||
local xlib_inc="$(get_xlib_include_path)"
|
||||
|
||||
case $(uname) in
|
||||
FreeBSD) MAKE=gmake ;;
|
||||
*) MAKE=make ;;
|
||||
esac
|
||||
|
||||
parse_args "$@"
|
||||
if [ -z "$xlib_inc" ]; then
|
||||
log_error "Can't find a suitable X11 include directory."
|
||||
exit 1
|
||||
fi
|
||||
log_info "Found X11 include path directory: $xlib_inc"
|
||||
|
||||
log_info 'Generate "makefile.gen" from template "makefile.mk"'
|
||||
echo "INC=$xlib_inc" > Makefile.gen
|
||||
cat Makefile.mk | grep -v %%%% >> Makefile.gen
|
||||
log_info 'Generate "test/makefile.gen" from template "test/makefile.mk"'
|
||||
echo "INC=$xlib_inc" > test/Makefile.gen
|
||||
cat test/Makefile.mk | grep -v %%%% >> test/Makefile.gen
|
||||
|
||||
log_info 'Execute "make all" from file "makefile.gen"'
|
||||
${MAKE} -f Makefile.gen all
|
||||
log_info 'Execute "make all" from file "test/makefile.gen"'
|
||||
(cd test ; ${MAKE} -f Makefile.gen all )
|
||||
}
|
||||
|
||||
main "$@"
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue