/************************************************************************* * TinyFugue - programmable mud client * Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2002, 2003, 2004, 2005, 2006-2007 Ken Keys * * TinyFugue (aka "tf") is protected under the terms of the GNU * General Public License. See the file "COPYING" for details. ************************************************************************/ /* $Id: expand.h,v 35004.45 2007/01/13 23:12:39 kkeys Exp $ */ #ifndef EXPAND_H #define EXPAND_H /* note: these numbers must agree with enum_subs[] in variable.c. */ #define SUB_LITERAL -1 /* send literally (no /command interpretation, even) */ #define SUB_KEYWORD 0 /* SUB_NEWLINE if initial keyword, else no subs */ #define SUB_NEWLINE 1 /* %; subs and command execution */ #define SUB_FULL 2 /* all subs and command execution */ #define SUB_MACRO 3 /* all subs and command execution, from macro */ #if 0 typedef struct { Program *prog; int ip; /* instruction pointer */ String *cmd; } Process; #endif extern void init_expand(void); extern void prog_free(Program *prog); extern int prog_run(const Program *prog, const String *args, int offset, const char *name, int kbnumlocal); extern struct Program *compile_tf(conString *body, int bodystart, int subs, int is_expr, int optimize); extern int macro_run(conString *body, int boffset, String *args, int offset, int subs, const char *name); extern Value *prog_interpret(const Program *prog, int in_expr); extern String *do_mprefix(void); extern const char **keyword(const char *id); extern void eat_newline(Program *prog); extern void eat_space(Program *prog); #if USE_DMALLOC extern void free_expand(void); #endif extern struct Value *user_result; extern const char *current_command; extern int recur_count, breaking; #define return_user_result() do { \ struct Value *v = user_result; \ user_result = NULL; \ return v; \ } while (0) #define set_user_result(val) do { \ Value *tmp = val; /* evaluate val once, before freeing user_result */ \ freeval(user_result); user_result = tmp; \ } while(0) #endif /* EXPAND_H */