Example #1
0
static void init(void)
{
  symtab = symtab_set(symtab, "PS1", SYM_VAR, PS1);
#ifdef LSH_ENABLE_EXTERNAL
  symtab = symtab_set(symtab, "PATH", SYM_VAR, PATH);
#endif /* LSH_ENABLE_EXTERNAL */

  symtab = symtab_set(symtab, "exit", SYM_INTERNAL, halt);
#ifdef LSH_ENABLE_CD
  symtab = symtab_set(symtab, "cd", SYM_INTERNAL, lsh_cd);
#endif /* LSH_ENABLE_CD */
}
Example #2
0
/*
 * Check for the valid forms of command input which are:
 *
 * <command> [<arg1> <arg2> ... <argN>]
 * <name>=<value>
 */
static int
parse(void)
{
  TRIM(cmd);

#ifdef LSH_ENABLE_USERVARS
  regex_t regex;
  const int cflags = REG_EXTENDED|REG_NEWLINE;
  int rc;
  regmatch_t pmatch[4];

  // Look for patterns of the form: <name>=<value>
  (void)regcomp(&regex, "([a-zA-Z]+[a-zA-Z0-9]*)=(.*)", cflags);
  rc = regexec(&regex, cmd, SZ(pmatch), pmatch, 0);
  if (rc == 0) {
    int count = 0;
    token_t **tokens = tokenise_fetch(cmd, &count);
    symtab = symtab_set(symtab, tokens[0]->value, SYM_VAR, tokens[2]->value);
    tokenise_free(tokens, count);
  } else {
    /*
     * Not a variable setting so assume it's a command
     */
#endif
    dispatch();
#ifdef LSH_ENABLE_USERVARS
  }
#endif

  RESET(cmd);

  // FIXME
  return 0;
}
Example #3
0
File: sem.c Project: aji/nursery
static void s_arg_list(struct symtab *tab, char *fn, struct p_arg_list *args)
{
	struct s_expr *ex;
	int n = 0;

	for (; args; args = args->next) {
		if (symtab_get(tab, args->id) != NULL) {
			error("%s declared twice in %s argument list",
			      args->id, fn);
		}

		ex = malloc(sizeof(*ex));
		ex->type = S_EXPR_ARGUMENT;
		ex->n = n++;
		symtab_set(tab, args->id, ex);
	}
}