From 0872af38f0ab78d676ee2b37dfe87452df341c46 Mon Sep 17 00:00:00 2001 From: gwojda Date: Thu, 9 Mar 2017 17:29:55 +0100 Subject: [PATCH] ajout module de glob + match sur les vars d'environnement --- 42sh/Makefile | 3 + 42sh/includes/completion.h | 10 ++- 42sh/includes/ft_readline.h | 4 +- 42sh/src/c_seek_env.c | 55 +++++++++++++ 42sh/src/completion/c_abs_path.c | 27 +++++++ 42sh/src/completion/c_glob_matching.c | 72 +++++++++++++++++ 42sh/src/completion/c_init.c | 4 +- 42sh/src/completion/c_matching.c | 24 ++++-- 42sh/src/completion/c_parser.c | 4 +- 42sh/src/completion/completion.c | 4 +- 42sh/src/line-editing/completion.c | 37 ++++++--- .../lib_line_editing/ft_nb_line.c | 25 ++++++ .../lib_line_editing/toolz_termcaps.c | 4 +- 42sh/test | 77 +++++++++++++++++++ 42sh/testmake | 1 + 42sh/tost | 0 16 files changed, 328 insertions(+), 23 deletions(-) create mode 100644 42sh/src/c_seek_env.c create mode 100644 42sh/src/completion/c_abs_path.c create mode 100644 42sh/src/completion/c_glob_matching.c create mode 100644 42sh/src/line-editing/lib_line_editing/ft_nb_line.c create mode 100644 42sh/test create mode 100644 42sh/testmake create mode 100644 42sh/tost diff --git a/42sh/Makefile b/42sh/Makefile index 4fd57af5..dc8ffbfd 100644 --- a/42sh/Makefile +++ b/42sh/Makefile @@ -44,9 +44,11 @@ builtin/builtin_setenv.c\ builtin/builtin_unset.c\ builtin/builtin_unsetenv.c\ builtin/is_builtin.c\ +c_seek_env.c\ completion/c_binary.c\ completion/c_clear.c\ completion/c_files.c\ +completion/c_glob_matching.c\ completion/c_init.c\ completion/c_matching.c\ completion/c_misc.c\ @@ -194,6 +196,7 @@ line-editing/copy_cut_paste.c\ line-editing/ft_prompt.c\ line-editing/get_key.c\ line-editing/home_end.c\ +line-editing/lib_line_editing/ft_nb_line.c\ line-editing/lib_line_editing/tool_line.c\ line-editing/lib_line_editing/tool_line_2.c\ line-editing/lib_line_editing/toolz.c\ diff --git a/42sh/includes/completion.h b/42sh/includes/completion.h index dc826172..06d71d79 100644 --- a/42sh/includes/completion.h +++ b/42sh/includes/completion.h @@ -6,7 +6,7 @@ /* By: alao +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2016/02/18 11:13:04 by alao #+# #+# */ -/* Updated: 2017/03/08 13:46:51 by gwojda ### ########.fr */ +/* Updated: 2017/03/09 15:58:27 by gwojda ### ########.fr */ /* */ /* ************************************************************************** */ @@ -162,4 +162,12 @@ int c_spacing_clear(t_comp *c); int ft_sstrlen(char **s); char *ft_sstrtostr(char **s, char *sep); +/* +** j'ajoute a la va vite^^ +*/ + +int c_glob_matching(void); +int c_seek_env(t_comp *c, char *current_word); +void c_add_to_lst(t_comp *c, t_clst *node); + #endif diff --git a/42sh/includes/ft_readline.h b/42sh/includes/ft_readline.h index 06b7f449..3a434f35 100644 --- a/42sh/includes/ft_readline.h +++ b/42sh/includes/ft_readline.h @@ -6,7 +6,7 @@ /* By: gwojda +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/01/23 10:35:44 by gwojda #+# #+# */ -/* Updated: 2017/02/16 12:44:23 by gwojda ### ########.fr */ +/* Updated: 2017/03/08 17:43:49 by gwojda ### ########.fr */ /* */ /* ************************************************************************** */ @@ -152,6 +152,8 @@ char *ft_strget_history(char *str); int ft_nb_last_line(char *str, size_t pos); int ft_put(int nb); void ft_check_line(void); +int ft_nb_of_line(char *str, size_t pos); +int ft_get_size_prev(char *str, size_t pos); char *ft_read_stdin(void); void ft_end(void); diff --git a/42sh/src/c_seek_env.c b/42sh/src/c_seek_env.c new file mode 100644 index 00000000..9c3680c0 --- /dev/null +++ b/42sh/src/c_seek_env.c @@ -0,0 +1,55 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* c_seek_env.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gwojda +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/03/09 15:50:24 by gwojda #+# #+# */ +/* Updated: 2017/03/09 16:52:57 by gwojda ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "minishell.h" + +static int c_storing(t_comp *c, char *value) +{ + t_clst *tmp; + + if (!(tmp = (t_clst *)malloc(sizeof(t_clst)))) + return (-1); + tmp->name = value; + tmp->len = ft_strlen(tmp->name); + tmp->type = 10; + tmp->cursor = 0; + c_add_to_lst(c, tmp); + return (0); +} + +static void c_maj_rcmd(t_comp *c, char *current_word) +{ + char *tmp; + + tmp = c->rcmd; + c->rcmd = ft_strndup(c->rcmd, current_word - c->rcmd + 1); + free(tmp); +} + +int c_seek_env(t_comp *c, char *current_word) +{ + char *match; + char **env; + int i; + + i = 0; + env = data_singleton()->env; + match = ft_strdupi_w(current_word + 1); + c_maj_rcmd(c, current_word); + while (env[i]) + { + if (!ft_strncmp(match, env[i], ft_strlen(match))) + c_storing(c, ft_strndup(env[i], ft_strchr(env[i], '=') - env[i])); + ++i; + } + return (0); +} diff --git a/42sh/src/completion/c_abs_path.c b/42sh/src/completion/c_abs_path.c new file mode 100644 index 00000000..a7519125 --- /dev/null +++ b/42sh/src/completion/c_abs_path.c @@ -0,0 +1,27 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* c_abs_path.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gwojda +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/03/09 16:54:59 by gwojda #+# #+# */ +/* Updated: 2017/03/09 16:55:45 by gwojda ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "completion.h" + +void c_seek_abs_path(t_comp *c) +{ + c->cpath = ft_strndup(current_word, ft_strrchr(c->rcmd, '/') - current_word + 1); + if (current_word[0] == '~') + { + tmp = c->cpath; + c->cpath = ft_str3join(getenv("PWD"), "/", c->cpath + 2); + free(tmp); + } + !c->match ? c->match = ft_strdupi_w(ft_strrchr(c->rcmd, '/') + 1) : 0; + c_parser(c, c->cpath, c->match); + c_exclusion_folder(c); +} diff --git a/42sh/src/completion/c_glob_matching.c b/42sh/src/completion/c_glob_matching.c new file mode 100644 index 00000000..2efdddc0 --- /dev/null +++ b/42sh/src/completion/c_glob_matching.c @@ -0,0 +1,72 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* c_glob_matching.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gwojda +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/03/08 17:20:01 by gwojda #+# #+# */ +/* Updated: 2017/03/09 17:29:01 by gwojda ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "minishell.h" + +static void c_replace_globbing(char **glob, size_t start) +{ + char *ref_next; + char *ref_mid; + char *ref_prev; + char *str; + size_t pos; + + str = data_singleton()->line.input; + pos = data_singleton()->line.pos; + while (str[pos] && str[pos] != ' ') + ++pos; + while (str[pos] && str[pos] == ' ') + ++pos; + ref_prev = ft_strndup(str, start); + ref_mid = ft_sstrtostr(glob, " "); + ref_next = ft_strdup(str + pos); + data_singleton()->line.input = ft_str3join(ref_prev, ref_mid, ref_next); + free(ref_prev); + free(ref_mid); + free(ref_next); + free(str); +} + +int c_glob_matching(void) +{ + char *current_word; + char **ss_glob; + unsigned char *glob_echap; + char *str; + size_t pos; + + str = data_singleton()->line.input; + pos = data_singleton()->line.pos; + if (!str) + return (0); + if (pos && str[pos] == ' ') + --pos; + while (pos && str[pos] != ' ') + --pos; + if (str[pos] == ' ') + ++pos; + current_word = ft_strdupi_w(str + pos); + if (current_word[0] == '$') + { + free(current_word); + return (0); + } + glob_echap = (unsigned char *)ft_strnew(ft_strlen(str) >> 3); + ft_bzero(glob_echap, ft_strlen(str) >> 3); +// glob = glob(current_word, glob_echap, glob_echap, 1); + ss_glob = glob(current_word, glob_echap, glob_echap); + free(current_word); + if (!*ss_glob || !**ss_glob || !ft_strncmp(str + pos, *ss_glob, ft_strlen(*ss_glob))) + return (0); + c_replace_globbing(ss_glob, pos); + return (1); +} diff --git a/42sh/src/completion/c_init.c b/42sh/src/completion/c_init.c index d1529e0b..f7df54b5 100644 --- a/42sh/src/completion/c_init.c +++ b/42sh/src/completion/c_init.c @@ -6,7 +6,7 @@ /* By: alao +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/01/09 11:21:16 by alao #+# #+# */ -/* Updated: 2017/03/08 12:18:07 by gwojda ### ########.fr */ +/* Updated: 2017/03/09 14:45:21 by gwojda ### ########.fr */ /* */ /* ************************************************************************** */ @@ -72,7 +72,7 @@ static void c_init_base(t_comp *c) ** structure data and call for the c_matching() function. */ -void c_init(t_data *s, long int input) +void c_init(t_data *s, long int input) { int len_trail; diff --git a/42sh/src/completion/c_matching.c b/42sh/src/completion/c_matching.c index f47db9d5..50b1932e 100644 --- a/42sh/src/completion/c_matching.c +++ b/42sh/src/completion/c_matching.c @@ -6,7 +6,7 @@ /* By: alao +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2016/10/15 13:27:14 by alao #+# #+# */ -/* Updated: 2017/03/08 16:06:13 by gwojda ### ########.fr */ +/* Updated: 2017/03/09 17:25:06 by gwojda ### ########.fr */ /* */ /* ************************************************************************** */ @@ -28,8 +28,6 @@ static int c_exclusion_folder(t_comp *c) tmp2 = ft_strjoin(c->match, "/"); c_updater(c, tmp2); tmp2 ? ft_memdel((void *)&tmp2) : (0); - ft_strdel(&c->match); - c->match = ft_strdup("/"); return (1); } tmp ? ft_memdel((void *)&tmp) : (0); @@ -69,14 +67,28 @@ int c_chevron(t_comp *c) ** Else 0 is returned. */ +static char *c_current_words(t_comp *c) +{ + int pos; + + pos = c->ircmd; + while (pos && c->rcmd[pos] != ' ') + --pos; + if (c->rcmd[pos] == ' ') + ++pos; + return (c->rcmd + pos); +} + int c_matching(t_data *s, t_comp *c) { + char *current_word; char *tmp; + current_word = c_current_words(c); if (ft_strchr(c->rcmd, '/')) { - c->cpath = ft_strndup(c->rcmd, ft_strrchr(c->rcmd, '/') - c->rcmd + 1); - if (c->rcmd[0] == '~') + c->cpath = ft_strndup(current_word, ft_strrchr(c->rcmd, '/') - current_word + 1); + if (current_word[0] == '~') { tmp = c->cpath; c->cpath = ft_str3join(getenv("PWD"), "/", c->cpath + 2); @@ -86,6 +98,8 @@ int c_matching(t_data *s, t_comp *c) c_parser(c, c->cpath, c->match); c_exclusion_folder(c); } + else if (ft_strchr(c->rcmd, '$')) + c_seek_env(c, current_word); else if (c->rcmd[0] != '.' && !(ft_strchr(c->rcmd, ' ')) && !c_chevron(c)) c_seek_binary(s, c); else diff --git a/42sh/src/completion/c_parser.c b/42sh/src/completion/c_parser.c index b5d60ac9..38a45cfd 100644 --- a/42sh/src/completion/c_parser.c +++ b/42sh/src/completion/c_parser.c @@ -6,7 +6,7 @@ /* By: alao +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/01/09 13:52:07 by alao #+# #+# */ -/* Updated: 2017/03/08 15:47:58 by gwojda ### ########.fr */ +/* Updated: 2017/03/09 16:47:31 by gwojda ### ########.fr */ /* */ /* ************************************************************************** */ @@ -16,7 +16,7 @@ ** Add the matching element to the list */ -static void c_add_to_lst(t_comp *c, t_clst *node) +void c_add_to_lst(t_comp *c, t_clst *node) { if (c->lst == NULL) { diff --git a/42sh/src/completion/completion.c b/42sh/src/completion/completion.c index d84c9a9e..d92dea80 100644 --- a/42sh/src/completion/completion.c +++ b/42sh/src/completion/completion.c @@ -6,7 +6,7 @@ /* By: alao +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2016/09/20 14:50:33 by alao #+# #+# */ -/* Updated: 2017/02/17 18:36:14 by alao ### ########.fr */ +/* Updated: 2017/03/09 14:44:52 by gwojda ### ########.fr */ /* */ /* ************************************************************************** */ @@ -81,6 +81,8 @@ int completion(long int keypress) t_data *s; s = data_singleton(); + if (c_glob_matching()) + return (1); if (s->comp == NULL) { if (s->line.pos == 0) diff --git a/42sh/src/line-editing/completion.c b/42sh/src/line-editing/completion.c index 0e09cc3f..10caf891 100644 --- a/42sh/src/line-editing/completion.c +++ b/42sh/src/line-editing/completion.c @@ -6,36 +6,55 @@ /* By: gwojda +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/02/03 14:15:55 by gwojda #+# #+# */ -/* Updated: 2017/02/16 14:22:44 by gwojda ### ########.fr */ +/* Updated: 2017/03/09 15:20:18 by gwojda ### ########.fr */ /* */ /* ************************************************************************** */ #include "minishell.h" -int ft_completion(int ret) +static size_t ft_strleni_w(char *str, size_t pos, char c) +{ + size_t len; + + len = 0; + if (!STR) + return (0); + while (str[pos] && str[pos] != c) + { + ++len; + ++pos; + } + return (len); +} + +int ft_completion(int ret) { size_t tmp; size_t pos_tmp; - int beg_len; + size_t right; char boolean; boolean = 0; - beg_len = ft_strlen(data_singleton()->line.input); + pos_tmp = POS; + right = ft_strleni_w(STR, POS, '\n'); if (((ret != TOUCHE_TAB && ret != 10) || (ret == 10)) && !(data_singleton()->comp)) return (0); - tmp = POS; - pos_tmp = POS; if (data_singleton()->comp || ret == TOUCHE_TAB) boolean = completion(ret); if (boolean || ret == 10) { + if (pos_tmp) + --pos_tmp; + else + ft_puttermcaps("nd"); + ft_get_beggin_with_curs(STR, &pos_tmp); + tmp = pos_tmp; ft_puttermcaps("cd"); ft_current_str(STR, tmp); ft_get_next_str(STR, &tmp); - ft_putnc('\b', tmp - - (pos_tmp + ft_strlen(data_singleton()->line.input) - beg_len)); - POS = pos_tmp + ft_strlen(data_singleton()->line.input) - beg_len; + ft_putnc('\b', right); + POS = ft_strleni_w(STR, pos_tmp, '\n') - right; } return (1); } diff --git a/42sh/src/line-editing/lib_line_editing/ft_nb_line.c b/42sh/src/line-editing/lib_line_editing/ft_nb_line.c new file mode 100644 index 00000000..c8fef299 --- /dev/null +++ b/42sh/src/line-editing/lib_line_editing/ft_nb_line.c @@ -0,0 +1,25 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_nb_line.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: gwojda +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/03/08 17:11:57 by gwojda #+# #+# */ +/* Updated: 2017/03/08 17:43:14 by gwojda ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "minishell.h" + +int ft_nb_of_line(char *str, size_t pos) +{ + int len; + + len = 1; + if (pos && str[pos] == '\n') + --pos; + len += data_singleton()->line.prompt_size; + len += ft_get_size_prev(str, pos); + return (len / ft_size_term()); +} diff --git a/42sh/src/line-editing/lib_line_editing/toolz_termcaps.c b/42sh/src/line-editing/lib_line_editing/toolz_termcaps.c index 637b5aef..6de15a4d 100644 --- a/42sh/src/line-editing/lib_line_editing/toolz_termcaps.c +++ b/42sh/src/line-editing/lib_line_editing/toolz_termcaps.c @@ -6,7 +6,7 @@ /* By: gwojda +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/01/08 12:35:11 by gwojda #+# #+# */ -/* Updated: 2017/02/14 11:13:10 by gwojda ### ########.fr */ +/* Updated: 2017/03/08 17:10:42 by gwojda ### ########.fr */ /* */ /* ************************************************************************** */ @@ -47,7 +47,7 @@ int ft_nb_last_line(char *str, size_t pos) --pos; len += data_singleton()->line.prompt_size; len += ft_get_size_prev(str, pos); - return ((len) ? len % ft_size_term() : -1); + return (len % ft_size_term()); } void ft_check_end_of_line(char *str, size_t pos) diff --git a/42sh/test b/42sh/test new file mode 100644 index 00000000..7572deac --- /dev/null +++ b/42sh/test @@ -0,0 +1,77 @@ + shell_init.c 28 interactive shell settings + c_glob_matching.c 66 current str = / + c_glob_matching.c 66 current str = / + c_glob_matching.c 66 current str = / + c_glob_matching.c 66 current str = / + c_glob_matching.c 66 current str = / + c_glob_matching.c 66 current str = / + c_glob_matching.c 66 current str = / + c_glob_matching.c 66 current str = / + c_glob_matching.c 66 current str = / + c_glob_matching.c 66 current str = / + c_glob_matching.c 66 current str = / + c_glob_matching.c 66 current str = / + c_glob_matching.c 66 current str = / + c_glob_matching.c 66 current str = / + c_glob_matching.c 66 current str = / + c_glob_matching.c 66 current str = / + c_glob_matching.c 66 current str = / + c_glob_matching.c 66 current str = / + c_glob_matching.c 66 current str = / + c_glob_matching.c 66 current str = / + c_glob_matching.c 66 current str = / + c_glob_matching.c 66 current str = / + c_glob_matching.c 66 current str = / + c_glob_matching.c 66 current str = / + c_glob_matching.c 66 current str = / + c_glob_matching.c 66 current str = /Applications + c_glob_matching.c 66 current str = /Applications/ + c_glob_matching.c 66 current str = /Applications/ + c_glob_matching.c 66 current str = /Applications/ + c_glob_matching.c 66 current str = /Applications/ + c_glob_matching.c 66 current str = /Applications/ + c_glob_matching.c 66 current str = /Applications/ + c_glob_matching.c 66 current str = /Applications/ + c_glob_matching.c 66 current str = /Applications/ + c_glob_matching.c 66 current str = /Applications/CocoaDialog.app + c_glob_matching.c 66 current str = /Applications/CocoaDialog.app/ + c_glob_matching.c 66 current str = /Applications/CocoaDialog.app/Contents + c_glob_matching.c 66 current str = /Applications/CocoaDialog.app/Contents/ + c_glob_matching.c 66 current str = /Applications/CocoaDialog.app/Contents/ + c_glob_matching.c 66 current str = /Applications/CocoaDialog.app/Contents/ + c_glob_matching.c 66 current str = /Applications/CocoaDialog.app/Contents/ + c_glob_matching.c 66 current str = /Applications/CocoaDialog.app/Contents/ + c_glob_matching.c 66 current str = /Applications/CocoaDialog.app/Contents/Resources + c_glob_matching.c 66 current str = /Applications/CocoaDialog.app/Contents/Resources/ + c_glob_matching.c 66 current str = /Applications/CocoaDialog.app/Contents/Resources/ + c_glob_matching.c 66 current str = /Applications/CocoaDialog.app/Contents/Resources/ + c_glob_matching.c 66 current str = /Applications/CocoaDialog.app/Contents/Resources/ + c_glob_matching.c 66 current str = /Applications/CocoaDialog.app/Contents/Resources/ + c_glob_matching.c 66 current str = /Applications/CocoaDialog.app/Contents/Resources/ + c_glob_matching.c 66 current str = /Applications/CocoaDialog.app/Contents/Resources/ + c_glob_matching.c 66 current str = /Applications/CocoaDialog.app/Contents/Resources/ + c_glob_matching.c 66 current str = /Applications/CocoaDialog.app/Contents/Resources/ + c_glob_matching.c 66 current str = /Applications/CocoaDialog.app/Contents/Resources/ + c_glob_matching.c 66 current str = /Applications/CocoaDialog.app/Contents/Resources/ + c_glob_matching.c 66 current str = /Applications/CocoaDialog.app/Contents/Resources/ + c_glob_matching.c 66 current str = /Applications/CocoaDialog.app/Contents/Resources/ + c_glob_matching.c 66 current str = /Applications/CocoaDialog.app/Contents/Resources/ + c_glob_matching.c 66 current str = /Applications/CocoaDialog.app/Contents/Resources/ + c_glob_matching.c 66 current str = /Applications/CocoaDialog.app/Contents/Resources/ + c_glob_matching.c 66 current str = /Applications/CocoaDialog.app/Contents/Resources/ + c_glob_matching.c 66 current str = /Applications/CocoaDialog.app/Contents/Resources/ + c_glob_matching.c 66 current str = /Applications/CocoaDialog.app/Contents/Resources/ + c_glob_matching.c 66 current str = /Applications/CocoaDialog.app/Contents/Resources/ + c_glob_matching.c 66 current str = /Applications/CocoaDialog.app/Contents/Resources/Inputbox.nib + c_glob_matching.c 66 current str = /Applications/CocoaDialog.app/Contents/Resources/Inputbox.nib/ + c_glob_matching.c 66 current str = /Applications/CocoaDialog.app/Contents/Resources/Inputbox.nib/ + c_glob_matching.c 66 current str = /Applications/CocoaDialog.app/Contents/Resources/Inputbox.nib/ + c_glob_matching.c 66 current str = /Applications/CocoaDialog.app/Contents/Resources/Inputbox.nib/ + c_glob_matching.c 66 current str = /Applications/CocoaDialog.app/Contents/Resources/Inputbox.nib/keyedobjects.nib + c_glob_matching.c 66 current str = /Applications/CocoaDialog.app/Contents/Resources/Inputbox.nib/keyedobjects.nib + c_glob_matching.c 66 current str = /Applications/CocoaDialog.app/Contents/Resources/Inputbox.nib/keyedobjects.nib + c_glob_matching.c 66 current str = /Applications/CocoaDialog.app/Contents/Resources/Inputbox.nib/keyedobjects.nib + c_glob_matching.c 66 current str = /Applications/CocoaDialog.app/Contents/Resources/Inputbox.nib/keyedobjects.nib + c_glob_matching.c 66 current str = /Applications/CocoaDialog.app/Contents/Resources/Inputbox.nib/keyedobjects.nib + c_glob_matching.c 66 current str = /Applications/CocoaDialog.app/Contents/Resources/Inputbox.nib/keyedobjects.nib + c_glob_matching.c 66 current str = /Applications/CocoaDialog.app/Contents/Resources/Inputbox.nib/keyedobjects.nib diff --git a/42sh/testmake b/42sh/testmake new file mode 100644 index 00000000..5ceb6d13 --- /dev/null +++ b/42sh/testmake @@ -0,0 +1 @@ + shell_init.c 28 interactive shell settings diff --git a/42sh/tost b/42sh/tost new file mode 100644 index 00000000..e69de29b