Skip to content
shell_entry.c 1 KiB
Newer Older
Seblu's avatar
Seblu committed
/*
Seblu's avatar
Seblu committed
** main.c for 42sh
Seblu's avatar
Seblu committed
**
** Made by Seblu
** Login   <seblu@epita.fr>
**
** Started on  Mon Apr 10 23:57:28 2006 Seblu
** Last update Fri Aug 25 12:24:50 2006 Seblu
Seblu's avatar
Seblu committed
*/

#include <stdio.h>
Seblu's avatar
Seblu committed
#include <libgen.h>
Seblu's avatar
Seblu committed
#include "shell.h"
Seblu's avatar
Seblu committed
#include "../ast/ast.h"
#include "../parser/parser.h"
#include "../exec/exec.h"
#include "../common/macro.h"
Seblu's avatar
Seblu committed

/*
** Global shell structure
*/
Seblu's avatar
Seblu committed
ts_shell *shell = NULL;
Seblu's avatar
Seblu committed

/*!
** Program entry point
**
** @param argc Argument count
** @param argv Argument vector
**
** @return return program value
*/
int		main(int argc, char *argv[])
{
Seblu's avatar
Seblu committed
  ts_ast_node	*ast;
  ts_parser	*parser;
Seblu's avatar
Seblu committed

Seblu's avatar
Seblu committed
  // shell initialization
  shell = shell_init(argv[0]);
  // parse argv
Seblu's avatar
Seblu committed
  option_parser(shell->options, argc, argv);
Seblu's avatar
Seblu committed
  // shell parser init
  parser = parser_init(stdin);
  // parse and execute stdin stream
  do
  {
    ast = parse(parser);
Seblu's avatar
Seblu committed
    if (!parser->error)
Seblu's avatar
Seblu committed
      exec_ast(ast);
    ast_destruct(ast);
  }
  while (!parser->lexer->eof);
  if (!isinteractive())
    fprintf(stderr, "exit\n");
Seblu's avatar
Seblu committed
  return shell->status;
Seblu's avatar
Seblu committed
}