Skip to content
builtin.c 1.15 KiB
Newer Older
Seblu's avatar
Seblu committed
/*
** builtin.c for 42sh
**
** Made by Seblu
** Login   <seblu@epita.fr>
**
** Started on  Tue Apr 11 00:22:44 2006 Seblu
Seblu's avatar
Seblu committed
** Last update Fri Nov 17 13:12:22 2006 seblu
Seblu's avatar
Seblu committed
*/

#include <string.h>
Seblu's avatar
Seblu committed
#include <assert.h>
Seblu's avatar
Seblu committed
#include "builtin.h"

Seblu's avatar
Seblu committed
enum { BUILTIN_COUNT = 12 };
Seblu's avatar
Seblu committed

Seblu's avatar
Seblu committed
struct		builtin_table
Seblu's avatar
Seblu committed
{
Seblu's avatar
Seblu committed
  const char	*name;
  f_builtin	func;
Seblu's avatar
Seblu committed
};
Seblu's avatar
Seblu committed

Seblu's avatar
Seblu committed
static struct builtin_table builtin_table[BUILTIN_COUNT] =
Seblu's avatar
Seblu committed
  {
Seblu's avatar
Seblu committed
    {"cd", builtin_cd},
    {"echo", builtin_echo},
Seblu's avatar
Seblu committed
    {"exit", builtin_exit},
Seblu's avatar
Seblu committed
    {"shopt", builtin_shopt},
    {"alias", builtin_alias},
    {"unalias", builtin_unalias},
Seblu's avatar
Seblu committed
    {"source", NULL}, //builtin_source},
Seblu's avatar
Seblu committed
    {".", NULL}, //builtin_source},
    {"set", builtin_set},
    {"unset", builtin_unset},
    {"export", builtin_export},
    {"exec", builtin_exec}
Seblu's avatar
Seblu committed
  };

Seblu's avatar
Seblu committed
int		is_a_builtin(const char *name)
Seblu's avatar
Seblu committed
{
Seblu's avatar
Seblu committed
  for (register int i = 0; i < BUILTIN_COUNT; ++i)
Seblu's avatar
Seblu committed
    if (!strcmp(name, builtin_table[i].name))
Seblu's avatar
Seblu committed
      return 1;
  return 0;
}

Seblu's avatar
Seblu committed
f_builtin	get_builtin(const char *name)
Seblu's avatar
Seblu committed
{
Seblu's avatar
Seblu committed
  for (register int i = 0; i < BUILTIN_COUNT; ++i)
    if (!strcmp(name, builtin_table[i].name)) {
      assert(builtin_table[i].func);
      return builtin_table[i].func;
    }
  assert(0);
  return NULL;
Seblu's avatar
Seblu committed
}