add: get_user_input
This commit is contained in:
parent
38c27fd583
commit
cc8cb37697
2
Makefile
2
Makefile
@ -7,7 +7,7 @@ OBJ_DIR = obj
|
|||||||
LIB_DIR = lib
|
LIB_DIR = lib
|
||||||
SOURCES = $(shell find $(SRC_DIR) -type f -name '*.c')
|
SOURCES = $(shell find $(SRC_DIR) -type f -name '*.c')
|
||||||
OBJECTS = $(patsubst $(SRC_DIR)/%.c,$(OBJ_DIR)/%.o,$(SOURCES))
|
OBJECTS = $(patsubst $(SRC_DIR)/%.c,$(OBJ_DIR)/%.o,$(SOURCES))
|
||||||
LIBRARIES = lib/bozolib/bozolib.a
|
LIBRARIES = lib/bozolib/bozolib.a -lreadline
|
||||||
DEPS = $(OBJECTS:.o=.d)
|
DEPS = $(OBJECTS:.o=.d)
|
||||||
|
|
||||||
all: $(NAME) $(LIBRARIES)
|
all: $(NAME) $(LIBRARIES)
|
||||||
|
54
src/input/input.c
Normal file
54
src/input/input.c
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
#include <readline/readline.h>
|
||||||
|
#include <readline/history.h>
|
||||||
|
#include <limits.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include "../../lib/bozolib/bozolib.h"
|
||||||
|
#include "../env/env.h"
|
||||||
|
|
||||||
|
static char* get_prompt(lst** env)
|
||||||
|
{
|
||||||
|
char* out;
|
||||||
|
int size;
|
||||||
|
char cwd[PATH_MAX];
|
||||||
|
if (getcwd(cwd, sizeof(cwd)) == NULL)
|
||||||
|
{
|
||||||
|
dprintf(2, "chemin inconnu");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
char* computer = get_env_variable(env, "COMPUTER");
|
||||||
|
char* user = get_env_variable(env, "USER");
|
||||||
|
char* home = get_env_variable(env, "HOME");
|
||||||
|
if (computer == NULL)
|
||||||
|
computer = "";
|
||||||
|
if (user == NULL)
|
||||||
|
user = "";
|
||||||
|
else if (strncmp(home, cwd, strlen(home)) == 0)
|
||||||
|
{
|
||||||
|
strcpy(cwd, "~");
|
||||||
|
strcat(cwd, cwd + strlen(home));
|
||||||
|
}
|
||||||
|
size = snprintf(NULL, 0, "%s@%s>%s $ ",user, computer, cwd) + 10;
|
||||||
|
out = malloc(size*sizeof(char));
|
||||||
|
if(out == NULL)
|
||||||
|
return NULL;
|
||||||
|
sprintf(out, "%s@%s > %s $ ",user, computer, cwd);
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
|
||||||
|
char *get_user_input(lst** env)
|
||||||
|
{
|
||||||
|
char *prompt;
|
||||||
|
char *input;
|
||||||
|
|
||||||
|
prompt = get_prompt(env);
|
||||||
|
if (prompt == NULL)
|
||||||
|
return NULL;
|
||||||
|
input = readline(prompt);
|
||||||
|
if (input != NULL && str_contain_only(input, "\t ") == 0)
|
||||||
|
add_history(input);
|
||||||
|
free(prompt);
|
||||||
|
if (input == NULL)
|
||||||
|
printf("exit");
|
||||||
|
return (input);
|
||||||
|
}
|
@ -1,4 +1,5 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include "../../lib/bozolib/bozolib.h"
|
|
||||||
char* get_prompt(lst** env);
|
|
||||||
|
|
||||||
|
#include "../../lib/bozolib/bozolib.h"
|
||||||
|
|
||||||
|
char *get_user_input(lst** env);
|
@ -1,38 +0,0 @@
|
|||||||
#include <stdio.h>
|
|
||||||
#include <limits.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
#include "../../lib/bozolib/bozolib.h"
|
|
||||||
#include "../env/env.h"
|
|
||||||
|
|
||||||
char* get_prompt(lst** env)
|
|
||||||
{
|
|
||||||
char* out;
|
|
||||||
int size;
|
|
||||||
char cwd[PATH_MAX];
|
|
||||||
if (getcwd(cwd, sizeof(cwd)) == NULL)
|
|
||||||
{
|
|
||||||
dprintf(2, "chemin inconnu");
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
char* computer = get_env_variable(env, "COMPUTER");
|
|
||||||
char* user = get_env_variable(env, "USER");
|
|
||||||
char* home = get_env_variable(env, "HOME");
|
|
||||||
if (computer == NULL)
|
|
||||||
computer = "";
|
|
||||||
if (user == NULL)
|
|
||||||
user = "";
|
|
||||||
else if (strncmp(home, cwd, strlen(home)) == 0)
|
|
||||||
{
|
|
||||||
strcpy(cwd, "~");
|
|
||||||
strcat(cwd, cwd + strlen(home));
|
|
||||||
}
|
|
||||||
size = snprintf(NULL, 0, "%s@%s>%s $",user, computer, cwd);
|
|
||||||
out = malloc(size*sizeof(char));
|
|
||||||
if(out == NULL)
|
|
||||||
{
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
sprintf(out, "%s@%s > %s $",user, computer, cwd);
|
|
||||||
|
|
||||||
return out;
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user