Commit a49bbbdc authored by Seblu's avatar Seblu
Browse files

reorganisation des options

ajout des fonctions pour les alias
debut de reecriture du lexer final

parent f923fc3f
Loading
Loading
Loading
Loading
+7 −5
Original line number Diff line number Diff line
@@ -4,7 +4,9 @@ bin_PROGRAMS=42sh
#42sh_LDADD  = parser/libparse.a ../check/leaktrack/libmem.a evalexpr/libevalexpr.a


42sh_SOURCES=	ast/ast.h			\
42sh_SOURCES=	alias/alias.h			\
		alias/alias.c			\
		ast/ast.h			\
		ast/ast_and.c			\
		ast/ast_bang.c			\
		ast/ast_case.c			\
@@ -21,6 +23,7 @@ bin_PROGRAMS=42sh
		ast/ast_until.c			\
		ast/ast_while.c			\
		common/common.h			\
		common/isdigitstr.c		\
		common/mem.h			\
		common/strmerge.c		\
		common/strvmerge.c		\
@@ -28,10 +31,9 @@ bin_PROGRAMS=42sh
		common/basename.c		\
		exec/exec.h			\
		exec/exec_ast.c			\
		opt/opt.h			\
		opt/opt.c			\
		opt/opt_init.c			\
		opt/opt_parser.c		\
		option/option.h			\
		option/option.c			\
		option/option_parser.c		\
		parser/parser.h			\
		parser/parser.c			\
		parser/lexer.c			\

src/alias/alias.c

0 → 100644
+73 −0
Original line number Diff line number Diff line
/*
** alias.c for 42sh
**
** Made by Seblu
** Login   <seblu@epita.fr>
**
** Started on  Wed Aug 23 00:39:17 2006 Seblu
** Last update Wed Aug 23 18:47:59 2006 Seblu
*/

#include <string.h>
#include "alias.h"
#include "../common/mem.h"

static size_t step = 5;

ts_aliases	*alias_init(void)
{
  ts_aliases	*new;

  secmalloc(new, sizeof (ts_aliases));
  new->size = step;
  new->pos = 0;
  new->db = NULL;
  return new;
}

void		alias_add(ts_aliases *aliases, const char *name, const char *value)
{
  ts_alias	*new;
  int		freeplace = 0;
  size_t	index;

  //check if already exist and if free place exist
  for (register int i = 0; aliases && aliases->db[i]; ++i)
    if (!strcmp(aliases->db[i]->name, name)) {
      free(aliases->db[i]->value);
      aliases->db[i]->value = strdup(value);
      return;
    }
    else if (!freeplace && *aliases->db[i]->name == 0)
      index = i;
  //if a place is free, fill it
  if (freeplace) {
    aliases->db[index]->name = strdup(name);
    aliases->db[index]->value = strdup(value);
    return;
  }
  //create a new one
  secmalloc(new, sizeof (ts_alias));
  new->name = strdup(name);
  new->value = strdup(value);
  //add a new alias if not find
  if (aliases->pos >= aliases->size) {
    aliases->size += step;
    secrealloc(aliases->db, aliases->db, aliases->size * sizeof (ts_alias));
  }
  aliases->db[aliases->pos] = new;
  ++aliases->pos;
}

int		alias_remove(ts_aliases *aliases, const char *name)
{
  //find alias index
  for (register int i = 0; aliases && aliases->db[i]; ++i)
    if (!strcmp(aliases->db[i]->name, name)) {
      free(aliases->db[i]->name);
      free(aliases->db[i]->value);
      aliases->db[i]->name = "";
      return 1;
    }
  return 0;
}

src/alias/alias.h

0 → 100644
+55 −0
Original line number Diff line number Diff line
/*
** alias.h for 42sh
**
** Made by Seblu
** Login   <seblu@epita.fr>
**
** Started on  Wed Aug 23 00:32:09 2006 Seblu
** Last update Wed Aug 23 18:44:52 2006 Seblu
*/

#ifndef ALIAS_H_
# define ALIAS_H_

# include <stddef.h>

typedef struct s_alias
{
  char		*name;
  char		*value;
} ts_alias;

typedef struct s_aliases
{
  size_t	size;
  size_t	pos;
  ts_alias	**db;
} ts_aliases;

/*!
** Create a new aliases database
**
** @return new alias database
*/
ts_aliases	*alias_init(void);

/*!
** Add an alias into an alias database
**
** @param aliases alias database
** @param name new alias name
** @param value new alias value
*/
void		alias_add(ts_aliases *aliases, const char *name, const char *value);

/*!
** Remove an alias into an alias database
**
** @param aliases alias database
** @param name alias name to remove
**
** @return true, if alias was found in database, else false
*/
int		alias_remove(ts_aliases *aliases, const char *name);

#endif
+10 −1
Original line number Diff line number Diff line
@@ -5,7 +5,7 @@
** Login   <seblu@epita.fr>
**
** Started on  Sun Jul 30 03:59:48 2006 Seblu
** Last update Thu Aug  3 06:01:23 2006 Seblu
** Last update Tue Aug 22 22:41:29 2006 Seblu
*/

#ifndef COMMON_H_
@@ -52,4 +52,13 @@ char *basename(const char *path);
*/
char            *strndup(const char *str, size_t n);

/*!
** Compute if string is composed only by digit
**
** @param str string to test
**
** @return boolean result
*/
int		isdigitstr(const char *str);

#endif
+19 −0
Original line number Diff line number Diff line
/*
** isdigitstr.c for 42sh
**
** Made by Seblu
** Login   <seblu@seblu.net>
**
** Started on  Sun Nov 13 08:13:54 2005 Seblu
** Last update Tue Aug 22 22:43:54 2006 Seblu
*/

int		isdigitstr(const char *str)
{
  if (*str == 0)
    return 0;
  for (; *str; str++)
    if (!(*str >= '0' && *str <= '9'))
      return 0;
  return 1;
}
Loading