#ifndef RAS_SHELL_BUILTIN_H
#define RAS_SHELL_BUILTIN_H

#include "shell.h"

typedef struct {
	char*        cmd;
	RasShellFunc func;
} RasShellBuiltin;

extern const RasShellBuiltin ras_shell_builtins[];

#define RAS_SHELL_BUILTIN_DECL(func) \
	int ras_shell_builtin_##func(int argc, char* argv[], RasShell* shell)
#define RAS_SHELL_BUILTIN_ENTRY(func) \
	{ #func, ras_shell_builtin_##func }
#define RAS_SHELL_BUILTIN_ENTRY_NULL \
	{ NULL, NULL}

RAS_SHELL_BUILTIN_DECL (cd);
RAS_SHELL_BUILTIN_DECL (echo);
RAS_SHELL_BUILTIN_DECL (exit);
RAS_SHELL_BUILTIN_DECL (false);
RAS_SHELL_BUILTIN_DECL (logout);
RAS_SHELL_BUILTIN_DECL (printenv);
RAS_SHELL_BUILTIN_DECL (pwd);
RAS_SHELL_BUILTIN_DECL (set);
RAS_SHELL_BUILTIN_DECL (setenv);
RAS_SHELL_BUILTIN_DECL (shopt);
RAS_SHELL_BUILTIN_DECL (tacat);
RAS_SHELL_BUILTIN_DECL (tapipe);
RAS_SHELL_BUILTIN_DECL (true);
RAS_SHELL_BUILTIN_DECL (tty);
RAS_SHELL_BUILTIN_DECL (type);
RAS_SHELL_BUILTIN_DECL (umask);
RAS_SHELL_BUILTIN_DECL (unset);
RAS_SHELL_BUILTIN_DECL (unsetenv);

#endif /* RAS_SHELL_BUILTIN_H */