From d57afcccc656c20d62495a824bffbaea55362ae1 Mon Sep 17 00:00:00 2001 From: Zy Date: Tue, 8 Oct 2024 19:42:01 +0200 Subject: [PATCH] part: implement mlx_xpm_to_image() (TODO *) TODO: - implement mlx_xpm_file_to_image() - clean unused mlx files (all in the same file and static) - norminette --- include/mlx_image.h | 8 +- source/firsk.xpm | 295 ++++++++++++ source/main.cpp | 90 +++- source/mlx_int.h | 80 ++++ source/mlx_int_str_to_wordtab.c | 111 +++++ source/mlx_rgb.c | 764 ++++++++++++++++++++++++++++++++ source/mlx_xpm.c | 312 +++++++++++++ 7 files changed, 1656 insertions(+), 4 deletions(-) create mode 100644 source/firsk.xpm create mode 100644 source/mlx_int.h create mode 100644 source/mlx_int_str_to_wordtab.c create mode 100644 source/mlx_rgb.c create mode 100644 source/mlx_xpm.c diff --git a/include/mlx_image.h b/include/mlx_image.h index 545920f..4649481 100644 --- a/include/mlx_image.h +++ b/include/mlx_image.h @@ -67,12 +67,14 @@ char *mlx_get_data_addr(t_image img_ptr, int *bits_per_pixel, int mlx_put_image_to_window(t_mlx mlx_ptr, t_win win_ptr, t_image img_ptr, int x, int y); -// ??? -t_image _mlx_xpm_to_image(void *mlx_ptr, char **xpm_data, +// ??? TODO docs +// width & height CAN be null (check please :3) +t_image mlx_xpm_to_image(t_mlx mlx_ptr, const char **xpm_data, int *width, int *height); // ??? -t_image _mlx_xpm_file_to_image(void *mlx_ptr, char *filename, +// width & height CAN be null (check please :3) +t_image _mlx_xpm_file_to_image(t_mlx mlx_ptr, char *filename, int *width, int *height); /// @brief Destroy an image. diff --git a/source/firsk.xpm b/source/firsk.xpm new file mode 100644 index 0000000..fc3ac4d --- /dev/null +++ b/source/firsk.xpm @@ -0,0 +1,295 @@ +/* XPM */ +static const char *firsk[] = { +/* columns rows colors chars-per-pixel */ +"150 150 139 2 ", +" c #000000", +". c #0C0400", +"X c #0A0A00", +"o c #03020B", +"O c #130600", +"+ c #1C0006", +"@ c #160800", +"# c #1B0A00", +"$ c #131300", +"% c #1B1B00", +"& c #010713", +"* c #0C0013", +"= c #000815", +"- c #000A1B", +"; c #10001B", +": c #240007", +"> c #230C00", +", c #2A0F00", +"< c #270008", +"1 c #2C0009", +"2 c #2E1000", +"3 c #331200", +"4 c #3B1500", +"5 c #232300", +"6 c #2C2C00", +"7 c #373700", +"8 c #3C3C00", +"9 c #000D21", +"0 c #030E2B", +"q c #11072D", +"w c #190028", +"e c #00112D", +"r c #1B0232", +"t c #1B063A", +"y c #011435", +"u c #00163B", +"i c #43000D", +"p c #4A000F", +"a c #421700", +"s c #461900", +"d c #4B1A00", +"f c #501C00", +"g c #4A0011", +"h c #540011", +"j c #5C0012", +"k c #610013", +"l c #6B0015", +"z c #750017", +"x c #444400", +"c c #4C4C00", +"v c #545400", +"b c #5A5A00", +"n c #646400", +"m c #6B6B00", +"M c #757500", +"N c #7C7C00", +"B c #130D40", +"V c #001A44", +"C c #001C4A", +"Z c #0A1C5B", +"A c #1B1054", +"S c #2A0045", +"D c #340055", +"F c #34045F", +"G c #38005C", +"H c #002156", +"J c #002258", +"K c #34096B", +"L c #022665", +"P c #0C2068", +"I c #002869", +"U c #002D75", +"Y c #450071", +"T c #84001A", +"R c #8D001C", +"E c #A50021", +"W c #838300", +"Q c #8C8C00", +"! c #929200", +"~ c #9B9B00", +"^ c #A3A300", +"/ c #A9A900", +"( c #B3B300", +") c #BBBB00", +"_ c #C5C500", +"` c #CECE00", +"' c #D5D500", +"] c #D8D800", +"[ c #E0E000", +"{ c #EBEB00", +"} c #F5F500", +"| c yellow", +" . c #003285", +".. c #00358E", +"X. c #003894", +"o. c #003B9A", +"O. c #3C18A0", +"+. c #013DA2", +"@. c #5A039B", +"#. c #61009F", +"$. c #5E0AB2", +"%. c #6A00AD", +"&. c #6704B3", +"*. c #6F00B4", +"=. c #0040AA", +"-. c #3339EA", +";. c #7E00CE", +":. c #6414D9", +">. c #6C1EFF", +",. c #7A15FF", +"<. c #731AFF", +"1. c #412DE1", +"2. c #542DFF", +"3. c #4735FF", +"4. c #4E31FF", +"5. c #4139FF", +"6. c #5030FF", +"7. c #6125FF", +"8. c #6821FF", +"9. c #004CC6", +"0. c #0052D7", +"q. c #0055E0", +"w. c #0754EB", +"e. c #005DF5", +"r. c #045FFF", +"t. c #095BFF", +"y. c #1752FF", +"u. c #1B51FF", +"i. c #2D45FF", +"p. c #204DFF", +"a. c #0061FF", +"s. c #8B00E2", +"d. c #850FFF", +"f. c #8D0BFF", +"g. c #9700F5", +"h. c #9406FF", +"j. c #9C00FF", +"k. c #8210FF", +"l. c white", +/* pixels */ +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" . O # # 2 2 2 , # . . # ", +" X O 2 a f f f f f f f f f f f f f a # ", +" . 2 d d f f f f f f f f f f f f f f f f d 4 O ", +" . , d f d f f f f f f f f f f f f f f f f f f f d , . ", +" > d f f f f f f f f f f f f f f f f f f f f f f f f f 4 . ", +" 3 f f f f f f f f f f f f f f f f f f f f f f f f f f f f d . ", +" . 3 f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f s ", +" , d f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f , ", +" . d f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f d O ", +" 3 f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f 4 ", +" O f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f O ", +" 2 f f f f f f d f f d f f f f f f f f f f f f f f f f f f f f f f f f f f 4 ", +" O f f f f f f d > . O , f f f f f f f f f f f f f f f f f f f f f f f f f a ", +" 4 f f f f f d @ , s > X . 3 d f f 3 # . O a f f f f f f f f f f . ", +" d f f f f f # 6 n % . . 3 a @ X X X X d f f f f f f f f f , ", +" O f f f f f , 8 { | _ > X 6 M X X b x X @ , # a f f f f f f d , ", +" 3 f f f f 3 6 ` | | | ( 7 6 N | | ^ % X X % Q | } v . f f f f f f d a ", +" f f f f 3 $ _ | | | | | | | | | | | [ W N ` | | | | { x X X @ d f f f f f f . ", +" O f f f . $ ^ | | | | | | | | | | | | | | | | | | | | | | ' ' 5 3 f f f f f f . ", +" # f f 4 X ^ | | M 6 % 5 % 8 ~ | | | | | | | ' m x x m W ^ ` | ! % d f f f f f @ ", +" , f f , X ` | | | 8 X X X 8 | | | | | | | / X X X X X x | } ( $ # d f f f f @ ", +" 4 f f @ > | | | | ~ b c n 8 x M | | | | | | | | c % $ % X X x | | } v X X > d f @ ", +" d f f @ % | | | | | | | | | | | | | | | | | | | | | | | | | | | | | { x X X 2 f @ ", +" f f f , X { | | | | | | | | | | | | | | | | | | | | | | | | | | | | | { ( W X . d @ ", +" f f f 4 X ^ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ^ . f @ ", +" f f f f . 7 } | | | | | | | | | | | | | | | | | | | | | | | | | | | | | { 5 3 f O ", +" f f f f 2 X ^ | | | | | | | | | ' ^ Q Q Q ~ ` | | | | | | | | | } x 6 N x X 2 f f . ", +" s f f f d % { | | | | | | | | n X X X X X x | | | | | | | | | ( X X . O f f f ", +" 2 f f f f 3 X 8 ` | | | | | | | m X X X X $ n | | | | | | | | ` $ @ a f f f ", +" @ f f f f f , X 6 _ | | | | | | | | | | | | | | | | | | | | ) 5 . 3 f f f f f f 3 ", +" . f f f f f d # $ Q } | | | | | | | | | | | | | | | } ~ 6 X 3 f f f f s 4 4 # ", +" f f f f f f f > X 8 ( | | | | | | | | | | | | | ( $ . 3 d f f f 4 @ ", +" a f d > . . > s 3 . X $ 8 W Q _ } | } ) ! N x % X > s 4 3 4 f a . ", +" > 3 O X X X X X > # # . ", +" o o o o o o o - V y ", +" o U .+.0.a.q.=.o.0.a.a.a.a.a.a.o.& ", +" o .e.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.q.C ", +" o O.i.w.=.=.a.a.a.a.a.a.a.a.a.a.a.a.a.t.u.5.:.* ", +" S j.j.S * r ,.>.2.4.3.i.y.i.3.6.7.,.k.@.Y %.j.*. . i . ", +" o ;.j.Y o . D j.j.j.j.j.j.j.j.j.j.j.j.j.G * w s.j.G o O l k ", +" q d.&.o S j.j.j.j.j.j.j.j.j.j.j.j.j.j.#.o F >.-.0 + R E 1 o . ", +" o o.e.y o & 1.>.,.f.h.h.h.j.j.j.h.h.f.k.8.6.Z o o 9.a...o . g E E R . ", +" - e.+.o .a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.0.o J a.e.C + z E E E : ", +" o V a.e & e.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.y & a.a.0.o o < T E E E g ", +" o +.0.o o K 8.2.5.p.a.a.a.a.a.a.a.a.a.a.t.i.3.8.$.o 0.e. . g E l j R g . ", +" 0.X.o o ;.j.j.j.j.j.j.j.j.h.h.h.h.j.j.j.j.j.j.g.o H y o . h E p . O ", +" o & * j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.; o . + z k + ", +" X X t ,.f.h.h.j.j.j.j.j.j.j.j.j.j.j.j.j.h.f.<.B < R 1 ", +" n ` X A r.r.a.a.a.a.a.p.i.6.4.6.3.i.a.a.a.a.a.a.L i O ", +" X Q | X P t.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.V ", +" n | C a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.o ", +" 5 _ X o .a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.& ", +" X X % =.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.9.U o ", +" X X % o o - e u V C L U X.X... .I V V 9 = o ", +" X o X o o o o o X ", +" X % 8 5 % $ $ $ % 6 8 ", +" X Q | | | ^ X X 6 | | | | Q X | ", +" X X X 5 ) | | | M X X 7 | | | | / $ $ | X ", +" X % / } | | | v X $ x | | | | [ $ X ", +" 5 _ | | | | x $ 8 | | | | | ] $ ", +" ) | | | | | M $ X % ) { | | | | ! X ", +" X X X X X X X X X % % X X X X ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" " +}; diff --git a/source/main.cpp b/source/main.cpp index 9bf999d..8a8830a 100644 --- a/source/main.cpp +++ b/source/main.cpp @@ -5,6 +5,7 @@ extern "C" { #include #include #include "utilsconsole.hpp" +#include "firsk.xpm" using namespace std; @@ -41,7 +42,7 @@ int main(void) { // MENU { - switch (uc_menu_quick("pixels", "images", "quit", NULL)) + switch (uc_menu_quick("pixels", "images", "xpm", "quit", NULL)) { case 0: goto pixels; @@ -49,6 +50,9 @@ int main(void) { case 1: goto images; break; + case 2: + goto xpm; + break; } goto end; } @@ -174,6 +178,90 @@ images: goto end; +xpm: + cout << "create window..." << endl; + uc_pause(); + win = mlx_new_window(mlx, 400, 240, "hey"); + + cout << "Show XPM image..." << endl; + uc_pause(); + { + static const char *xpm[] = { + "4 3 3 2", + "r c red", + "g c green", + "b c blue", + "r g b r ", + "g b r g ", + "b r g b ", + }; + t_image img = mlx_xpm_to_image(mlx, xpm, NULL, NULL); + if (img) + mlx_put_image_to_window(mlx, win, img, 10, 10); + else + cout << "error :(" << endl; + } + + cout << "Show bigger XPM image..." << endl; + uc_pause(); + { + /* XPM */ + static const char *xpm[] = { + /* plaid pixmap + * width height ncolors chars_per_pixel */ + "22 22 4 2", + /* colors */ + "r c red", + "Y c green", + "+ c yellow", + "x c black", + /* pixels */ + "x r x r x x x r x r x x x x x x + x x x x x ", + "r x r x r x r x r x r x x x x x x x x x x x ", + "x r x r x x x r x r x x x x x x + x x x x x ", + "r x r x r x r x r x r x x x x x x x x x x x ", + "x r x r x x x r x r x x x x x x + x x x x x ", + "Y Y Y Y Y x Y Y Y Y Y + x + x + x + x + x + ", + "x r x r x x x r x r x x x x x x + x x x x x ", + "r x r x r x r x r x r x x x x x x x x x x x ", + "x r x r x x x r x r x x x x x x + x x x x x ", + "r x r x r x r x r x r x x x x x x x x x x x ", + "x r x r x x x r x r x x x x x x + x x x x x ", + "r r r r r x r r r r r x r x r x Y x r x r x ", + "r r r r r x r r r r r r x r x r Y r x r x r ", + "r r r r r x r r r r r x r x r x Y x r x r x ", + "r r r r r x r r r r r r x r x r Y r x r x r ", + "r r r r r x r r r r r x r x r x Y x r x r x ", + "x x x x x x x x x x x x x x x x x x x x x x ", + "r r r r r x r r r r r x r x r x Y x r x r x ", + "r r r r r x r r r r r r x r x r Y r x r x r ", + "r r r r r x r r r r r x r x r x Y x r x r x ", + "r r r r r x r r r r r r x r x r Y r x r x r ", + "r r r r r x r r r r r x r x r x Y x r x r x " + }; + t_image img = mlx_xpm_to_image(mlx, xpm, NULL, NULL); + if (img) + mlx_put_image_to_window(mlx, win, img, 20, 10); + else + cout << "error :(" << endl; + } + + cout << "Show firsk..." << endl; + uc_pause(); + { + t_image img = mlx_xpm_to_image(mlx, firsk, NULL, NULL); + if (img) + mlx_put_image_to_window(mlx, win, img, 100, 10); + else + cout << "error :(" << endl; + } + + cout << "destroy window..." << endl; + uc_pause(); + mlx_destroy_window(mlx, win); + + goto end; + end: cout << "Exit..." << endl; uc_pause(); diff --git a/source/mlx_int.h b/source/mlx_int.h new file mode 100644 index 0000000..72a7be3 --- /dev/null +++ b/source/mlx_int.h @@ -0,0 +1,80 @@ +/* +** mlx_int.h for mlx in +** +** Made by Charlie Root +** Login +** +** Started on Mon Jul 31 16:45:48 2000 Charlie Root +** Last update Wed May 25 16:44:16 2011 Olivier Crouzet +*/ + + + +/* +** Internal settings for MiniLibX +*/ + +#ifndef MLX_INT_H + +# define MLX_INT_H + +# include +# include +# include +# include +# include + + +# define MLX_TYPE_SHM_PIXMAP 3 +# define MLX_TYPE_SHM 2 +# define MLX_TYPE_XIMAGE 1 + +# define MLX_MAX_EVENT LASTEvent + + +# define ENV_DISPLAY "DISPLAY" +# define LOCALHOST "localhost" +# define ERR_NO_TRUECOLOR "MinilibX Error : No TrueColor Visual available.\n" +# define WARN_SHM_ATTACH "MinilibX Warning : X server can't attach shared memory.\n" + +// [USED] [FULL] +typedef struct s_xpm_col +{ + int name; + int col; +} t_xpm_col; + + +struct s_col_name +{ + char *name; + int color; +}; + +typedef struct s_event_list +{ + int mask; + int (*hook)(); + void *param; +} t_event_list; + +int mlx_int_do_nothing(); +int mlx_get_color_value(); +int mlx_int_get_good_color(); +int mlx_int_find_in_pcm(); +int mlx_int_anti_resize_win(); +int mlx_int_wait_first_expose(); +int mlx_int_rgb_conversion(); +int mlx_int_deal_shm(); +void *mlx_int_new_xshm_image(); +// [USED] [FULL]... +char **mlx_int_str_to_wordtab(); +void *mlx_new_image(); +int shm_att_pb(); +// [USED] [FULL]... +int mlx_int_str_str_cote(char *str,char *find,int len); +// [USED] [FULL]... +int mlx_int_str_str(char *str,char *find,int len); + + +#endif diff --git a/source/mlx_int_str_to_wordtab.c b/source/mlx_int_str_to_wordtab.c new file mode 100644 index 0000000..3f50dfe --- /dev/null +++ b/source/mlx_int_str_to_wordtab.c @@ -0,0 +1,111 @@ +/* +** mlx_int_str_to_wordtab.c for MinilibX in +** +** Made by Charlie Root +** Login +** +** Started on Wed Sep 13 11:36:09 2000 Charlie Root +** Last update Fri Dec 14 11:02:09 2001 Charlie Root +*/ + +#include "mlx_int.h" + +// [USED] [FULL] +int mlx_int_str_str(char *str,char *find,int len) +{ + int len_f; + int pos; + char *s; + char *f; + + len_f = strlen(find); + if (len_f>len) + return (-1); + pos = 0; + while (*(str+len_f-1)) + { + s = str; + f = find; + while (*(f++) == *(s++)) + if (!*f) + return (pos); + str ++; + pos ++; + } + return (-1); +} + +// [USED] [FULL] +int mlx_int_str_str_cote(char *str,char *find,int len) +{ + int len_f; + int pos; + char *s; + char *f; + int cote; + + len_f = strlen(find); + if (len_f>len) + return (-1); + cote = 0; + pos = 0; + while (*(str+len_f-1)) + { + if (*str=='"') + cote = 1-cote; + if (!cote) + { + s = str; + f = find; + while (*(f++) == *(s++)) + if (!*f) + return (pos); + } + str ++; + pos ++; + } + return (-1); +} + +// [USED] [FULL] +char **mlx_int_str_to_wordtab(char *str) +{ + char **tab; + int pos; + int nb_word; + int len; + + len = strlen(str); + nb_word = 0; + pos = 0; + while (pos + ** + ** Started on Tue Dec 11 15:25:27 2001 olivier crouzet + ** Last update Sat Oct 1 14:56:13 2005 Olivier Crouzet + */ + +#include "utilsconsole_pause.h" + +#include "mlx_int.h" +#include "mlx.h" +#include "mlx_internal.h" + +extern struct s_col_name mlx_col_name[]; + + +#define RETURN { if (colors) free(colors); if (tab) free(tab); \ + tab = (void *)0; if (colors_direct) free(colors_direct); \ + if (img) free(img); \ + return ((void *)0);} + +// [USED] [FULL] +char *mlx_int_get_line(char *ptr,int *pos,int size) +{ + int pos2; + int pos3; + int pos4; + + if ((pos2 = mlx_int_str_str(ptr+*pos,"\"",size-*pos))==-1) + return ((char *)0); + if ((pos3 = mlx_int_str_str(ptr+*pos+pos2+1,"\"",size-*pos-pos2-1))==-1) + return ((char *)0); + *(ptr+*pos+pos2) = 0; + *(ptr+*pos+pos2+1+pos3) = 0; + pos4 = *pos+pos2+1; + *pos += pos2+pos3+2; + return (ptr+pos4); +} + +// [USED] [FULL] +unsigned int strlcpy_is_not_posix(char *dest, char *src, unsigned int size) +{ + unsigned count; + unsigned i; + + count = 0; + while (src[count] != '\0') + ++count; + i = 0; + while (src[i] != '\0' && i < (size - 1)) + { + dest[i] = src[i]; + ++i; + } + dest[i] = '\0'; + return (count); +} + +// [USED] [FULL] +char *mlx_int_static_line(char **xpm_data,int *pos,int size) +{ + static char *copy = 0; + static int len = 0; + int len2; + char *str; + + str = xpm_data[(*pos)++]; + if ((len2 = strlen(str))>len) + { + if (copy) + free(copy); + if (!(copy = malloc(len2+1))) + return ((char *)0); + len = len2; + } + strlcpy_is_not_posix(copy, str, len2 + 1); + + return (copy); +} + +// [USED] [FULL] +int mlx_int_get_col_name(char *str,int size) +{ + int result; + + result = 0; + while (size--) + result = (result<<8)+*(str++); + + return (result); +} + +// [USED] [FULL] +int mlx_int_get_text_rgb(char *name, char *end) +{ + int i; + char buff[64]; + + if (*name == '#') + return (strtol(name+1,0,16)); + if (end) + { + snprintf(buff, 64, "%s %s", name, end); + name = buff; + } + i = 0; + while (mlx_col_name[i].name) + { + if (!strcasecmp(mlx_col_name[i].name, name)) + return (mlx_col_name[i].color); + i ++; + } + return (0); +} + +// [USED] [FULL] +int mlx_int_xpm_set_pixel(t_internal_image *img, u8 *data, int opp, int col, int x) +{ + int dec; + + dec = opp; + while (dec--) + { + const bool byte_order = false; // apparently works lol + if (byte_order) + *(data+x*opp+dec) = col&0xFF; + else + *(data+x*opp+opp-dec-1) = col&0xFF; + col >>= 8; + } + return (0); +} + +// [USED] [FULL] +void *mlx_int_parse_xpm(t_mlx mlx_ptr,void *info,int info_size,char *(*f)()) +{ + int pos; + char *line; + char **tab; + u8 *data; + int nc; + int cpp; + int col; + int rgb_col; + int col_name; + int method; + int x; + int i; + int j; + t_internal_image *img; + t_xpm_col *colors; + int *colors_direct; + int width; + int height; + + colors = 0; + colors_direct = 0; + img = 0; + tab = 0; + pos = 0; + if (!(line = f(info,&pos,info_size)) || + !(tab = mlx_int_str_to_wordtab(line)) || !(width = atoi(tab[0])) || + !(height = atoi(tab[1])) || !(nc = atoi(tab[2])) || + !(cpp = atoi(tab[3]))) + RETURN; + + free(tab); + tab = 0; + + method = 0; + if (cpp<=2) + { + method = 1; + if (!(colors_direct = malloc((cpp==2?65536:256)*sizeof(int)))) + RETURN; + } + else + if (!(colors = malloc(nc*sizeof(*colors)))) + RETURN; + + + i = nc; + while (i--) + { + if (!(line = f(info,&pos,info_size)) || + !(tab = mlx_int_str_to_wordtab(line+cpp)) ) + RETURN; + j = 0; + while (tab[j] && strcmp(tab[j++],"c")); + + if (!tab[j]) + RETURN; + rgb_col = mlx_int_get_text_rgb(tab[j], tab[j+1]); + if (method) + colors_direct[mlx_int_get_col_name(line,cpp)] = rgb_col; + else + { + colors[i].name = mlx_int_get_col_name(line,cpp); + colors[i].col = rgb_col; + } + free(tab); + tab = (void *)0; + } + + + if (!(img = mlx_new_image(mlx_ptr,width,height))) + RETURN; + + i = height; + data = img->data; + while (i--) + { + if (!(line = f(info,&pos,info_size))) + RETURN; + x = 0; + while (xwidth * 3; + } + + if (colors) + free(colors); + if (colors_direct) + free(colors_direct); + return (img); +} + +// [USED] [FULL] +int mlx_int_file_get_rid_comment(char *ptr, int size) +{ + int com_begin; + int com_end; + + while ((com_begin = mlx_int_str_str_cote(ptr,"/*",size))!=-1) + { + com_end = mlx_int_str_str(ptr+com_begin+2,"*/",size-com_begin-2); + memset(ptr+com_begin,' ',com_end+4); + } + while ((com_begin = mlx_int_str_str_cote(ptr,"//",size))!=-1) + { + com_end = mlx_int_str_str(ptr+com_begin+2,"\n",size-com_begin-2); + memset(ptr+com_begin,' ',com_end+3); + } + return (0); +} + +/* [USED] +t_image mlx_xpm_file_to_image(t_mlx xvar,char *file,int *width,int *height) +{ + int fd; + int size; + char *ptr; + t_internal_image *img; + + fd = -1; + if ((fd = open(file,O_RDONLY))==-1 || (size = lseek(fd,0,SEEK_END))==-1 || + (ptr = mmap(0,size,PROT_WRITE|PROT_READ,MAP_PRIVATE,fd,0))== + (void *)MAP_FAILED) + { + if (fd>=0) + close(fd); + return ((void *)0); + } + mlx_int_file_get_rid_comment(ptr, size); + if (img = mlx_int_parse_xpm(xvar,ptr,size,mlx_int_get_line)) + { + *width = img->width; + *height = img->height; + } + munmap(ptr,size); + close(fd); + return (img); +} +//*/ + +// [USED] [FULL] +t_image mlx_xpm_to_image(t_mlx mlx_ptr, const char **xpm_data,int *width,int *height) +{ + t_internal_image *img; + + img = mlx_int_parse_xpm(mlx_ptr, xpm_data,0,mlx_int_static_line); + if (img) + { + if (width) + *width = img->width; + if (height) + *height = img->height; + } + return (img); +}